https://sourceware.org/bugzilla/show_bug.cgi?id=33237
--- Comment #10 from Rainer Orth <ro at CeBiTec dot Uni-Bielefeld.DE> ---
> Why does Solaris have a different value?
I've reduced the testcase a bit as seen in the new attachment.
When I compile it like
gcc -c -fPIE main1.c
gcc -c check1.S
gcc -Bld/ -o 1f-1 -pie check1.o main1.o -R . libno-plt-1a.so libno-plt-1b.so
-Wl,-rpath,.,--no-warn-execstack
gcc -c -fPIE -O1 -fno-dwarf2-cfi-asm -fno-asynchronous-unwind-tables
-fomit-frame-pointer -fno-plt -save-temps check2.c
gcc -Bld/ -o 1f-2 -pie check2.o main1.o -R . libno-plt-1a.so libno-plt-1b.so
-Wl,-rpath,.,--no-warn-execstack
(with ld a symlink to the current ld/tmpdir/ld directory) and
libno-plt-1?.so also symlinks to the original objects.
There's what I find:
* On Linux/x86_64, both 1f-1 and 1f-2 run successfully.
* On Solaris/amd64, 1f-1 aborts, while 1f-2 works.
Also, in gdb func_p is 0x0 in 1f-1.
Comparing check1.S and check2.s, there's no difference on Linux/x86_64
while on Solaris/amd64 there's
check:
subq $8, %rsp
call *get_func@GOTPCREL(%rip)
- cmpq %rax, func_p(%rip)
+ movq func_p@GOTPCREL(%rip), %rdx
+ cmpq %rax, (%rdx)
So gcc generates different code in this case. No idea why, though.
--
You are receiving this mail because:
You are on the CC list for the bug.