https://sourceware.org/bugzilla/show_bug.cgi?id=19177
Bug ID: 19177 Summary: gold doesn't handle R_386_GOT32X relocation without base register Product: binutils Version: 2.26 (HEAD) Status: NEW Severity: normal Priority: P2 Component: gold Assignee: ccoutant at gmail dot com Reporter: hjl.tools at gmail dot com CC: ian at airs dot com Target Milestone: --- The new R_386_GOT32X relocation can have no base register: movl bar@GOT, %eax Its calculation is G + A, instead of G + A - GOT, and it can only used to generate non-PIC executable: https://github.com/hjl-tools/x86-psABI/wiki/intel386-psABI-20151021.pdf [hjl@gnu-tools-1 gold]$ cat x.S .text movl bar@GOT, %eax [hjl@gnu-tools-1 gold]$ cat y.S .data .globl bar .type bar, @object bar: .byte 1 [hjl@gnu-tools-1 gold]$ make gcc -m32 -c -o x.o x.S gcc -m32 -c -o y.o y.S ld.bfd -m elf_i386 -o liby.so -shared y.o ld.bfd -m elf_i386 -o x x.o liby.so ld.bfd: warning: cannot find entry symbol _start; defaulting to 0000000008048190 objdump -dwr x.o x.o: file format elf32-i386 Disassembly of section .text: 00000000 <.text>: 0: 8b 05 00 00 00 00 mov 0x0,%eax 2: R_386_GOT32X bar objdump -dwr x x: file format elf32-i386 Disassembly of section .text: 08048190 <.text>: 8048190: 8b 05 18 92 04 08 mov 0x8049218,%eax readelf -SW x | grep ".\got " [ 9] .got PROGBITS 08049218 000218 000004 04 WA 0 0 4 [hjl@gnu-tools-1 gold]$ make libx.so ld.bfd -m elf_i386 -o libx.so -shared x.o ld.bfd: x.o: direct GOT relocation R_386_GOT32X against `bar' without base register can not be used when making a shared object ld.bfd: failed to set dynamic section sizes: File format not recognized Makefile:18: recipe for target 'libx.so' failed make: *** [libx.so] Error 1 Gold doesn't handle it properly: [hjl@gnu-tools-1 gold]$ make LD=ld.gold gcc -m32 -c -o x.o x.S gcc -m32 -c -o y.o y.S ld.gold -m elf_i386 -o liby.so -shared y.o ld.gold -m elf_i386 -o x x.o liby.so objdump -dwr x.o x.o: file format elf32-i386 Disassembly of section .text: 00000000 <.text>: 0: 8b 05 00 00 00 00 mov 0x0,%eax 2: R_386_GOT32X bar objdump -dwr x x: file format elf32-i386 Disassembly of section .text: 08048190 <.text>: 8048190: 8b 05 fc ff ff ff mov 0xfffffffc,%eax readelf -SW x | grep ".\got " [ 8] .got PROGBITS 08049220 000220 000004 00 WA 0 0 4 [hjl@gnu-tools-1 gold]$ make LD=ld.gold libx.so ld.gold -m elf_i386 -o libx.so -shared x.o [hjl@gnu-tools-1 gold]$ -- You are receiving this mail because: You are on the CC list for the bug. _______________________________________________ bug-binutils mailing list bug-binutils@gnu.org https://lists.gnu.org/mailman/listinfo/bug-binutils