Tested using:
Clang 12.0.1 (Fedora 12.0.1-1.fc34)
Built zlib-ng from develop branch and ran the resulting example (basic self-tests) binary.
export SZ_CODE=1 SZ_LINK=0 SZ_HEAP=0 SZ_STACK=0 SZ_CLEAN=1
cmake -DCMAKE_VERBOSE_MAKEFILE=ON -DWITH_BENCHMARKS=OFF -DWITH_GTEST=OFF -DWITH_OPTIM=OFF -DWITH_NEW_STRATEGIES=OFF -DCMAKE_C_COMPILER=/home/hansr/github/stabilizer/szcc -DCMAKE_C_FLAGS="-Wall -Wpedantic -g3 -ggdb -O0" .`
gdb ./example
Program received signal SIGSEGV, Segmentation fault.
main (argc=1, argv=0x7fffffffde58) at /home/hansr/github/zlib/zlib-ng/test/example.c:960
960 if (zVersion()[0] != myVersion[0]) {
=> 0x00000000004040e4 <main+20>: ff 15 56 03 70 15 call *0x15700356(%rip) # 0x15b04440
This is the first line of actual code in main(), after variable definitions.
Did a little experiment to see whether adding a line above that with __asm__("nop"); would do anything at all.
#0 main (argc=1, argv=0x7fffffffde58) at /home/hansr/github/zlib/zlib-ng/test/example.c:962
962 if (zVersion()[0] != myVersion[0]) {
=> 0x00000000004040e5 <main+21>: ff 15 55 00 3a a0 call *-0x5fc5ffab(%rip) # 0xffffffffa07a4140
Not much changed, but the call address seems to be very random, unless there is a bit pattern I am not seeing.
Seems to me like something is still quite wrong somewhere in the Stabilizer plugin pass when it comes to patching the call addresses.
Tested using:
Clang 12.0.1 (Fedora 12.0.1-1.fc34)
Built zlib-ng from
developbranch and ran the resulting example (basic self-tests) binary.This is the first line of actual code in main(), after variable definitions.
Did a little experiment to see whether adding a line above that with
__asm__("nop");would do anything at all.Not much changed, but the call address seems to be very random, unless there is a bit pattern I am not seeing.
Seems to me like something is still quite wrong somewhere in the Stabilizer plugin pass when it comes to patching the call addresses.