https://sourceware.org/bugzilla/show_bug.cgi?id=16794
Bug ID: 16794 Summary: gold doesn't include the "implicit addend" when processing REL relocations to mergable sections Product: binutils Version: unspecified Status: NEW Severity: normal Priority: P2 Component: gold Assignee: ian at airs dot com Reporter: rafael.espindola at gmail dot com CC: ccoutant at google dot com Created attachment 7516 --> https://sourceware.org/bugzilla/attachment.cgi?id=7516&action=edit testcase The attached testcase has both 32 and 64 bit versions of a test. The file test.o contains relocations to a mergeable section. In the 32 bit case it has: 00000012 00000509 R_386_GOTOFF 00000000 .rodata.str1.1 0000001c 00000509 R_386_GOTOFF 00000000 .rodata.str1.1 The "implicit addend" are in the two lea instructions: objdump -d test.o 10: 8d 83 07 00 00 00 lea 0x7(%ebx),%eax 16: 89 44 24 04 mov %eax,0x4(%esp) 1a: 8d 83 00 00 00 00 lea 0x0(%ebx),%eax On the gold produced output, the distance between the two is still 7 (0x11ac- 0x11a5) 80484e0: 8d 83 5b ee ff ff lea -0x11a5(%ebx),%eax 80484e6: 89 44 24 04 mov %eax,0x4(%esp) 80484ea: 8d 83 54 ee ff ff lea -0x11ac(%ebx),%eax The the actual section has been modified to merge the strings, so that is no longer valid. Using bfd ld, the offset is updated: 8048460: 8d 83 4d ee ff ff lea -0x11b3(%ebx),%eax 8048466: 89 44 24 04 mov %eax,0x4(%esp) 804846a: 8d 83 4c ee ff ff lea -0x11b4(%ebx),%ea Everything works on 64 bits. I assume that is because it uses RELA relocations. In 64 bits the test.o file has 000000000003 000500000002 R_X86_64_PC32 0000000000000000 .rodata.str1.1 + 0 00000000000a 000500000002 R_X86_64_PC32 0000000000000000 .rodata.str1.1 + 7 0: 48 8d 3d 00 00 00 00 lea 0x0(%rip),%rdi 7: 48 8d 35 00 00 00 00 lea 0x0(%rip),%rsi and the final binary is update correctly 400530: 48 8d 3d ad 00 00 00 lea 0xad(%rip),%rdi 400537: 48 8d 35 a7 00 00 00 lea 0xa7(%rip),%rsi -- 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