+2016-05-20 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR gas/19600
+ * config/tc-i386.c (md_apply_fix): Preserve addend for
+ BFD_RELOC_386_GOT32 and BFD_RELOC_X86_64_GOT32.
+ * testsuite/gas/i386/addend.d: New file.
+ * testsuite/gas/i386/addend.s: Likewise.
+ * testsuite/gas/i386/x86-64-addend.d: Likewise.
+ * testsuite/gas/i386/x86-64-addend.s: Likewise.
+ * testsuite/gas/i386/i386.exp: Run addend and x86-64-addend.
+ * testsuite/gas/i386/reloc32.d: Updated.
+
2016-05-20 Maciej W. Rozycki <macro@imgtec.com>
* config/tc-mips.c (append_insn): Correct the encoding of a
fixP->fx_done = 0;
return;
- case BFD_RELOC_386_GOT32:
- case BFD_RELOC_X86_64_GOT32:
- value = 0; /* Fully resolved at runtime. No addend. */
- break;
-
case BFD_RELOC_VTABLE_INHERIT:
case BFD_RELOC_VTABLE_ENTRY:
fixP->fx_done = 0;
--- /dev/null
+#as: -mrelax-relocations=yes
+#objdump: -dwr
+
+.*: +file format .*
+
+
+Disassembly of section .text:
+
+0+ <_start>:
+[ ]*[a-f0-9]+: b8 00 00 00 00 mov \$0x0,%eax 1: R_386_GOT32 foo
+[ ]*[a-f0-9]+: b8 04 00 00 00 mov \$0x4,%eax 6: R_386_GOT32 foo
+[ ]*[a-f0-9]+: b8 00 00 00 00 mov \$0x0,%eax b: R_386_GOT32 foo
+[ ]*[a-f0-9]+: b8 04 00 00 00 mov \$0x4,%eax 10: R_386_GOT32 foo
+#pass
--- /dev/null
+ .text
+_start:
+ movl $foo@GOT, %eax
+ movl $foo@GOT + 4, %eax
+
+ .intel_syntax noprefix
+
+ mov eax, offset foo@got
+ mov eax, offset foo@got + 4
run_dump_test "got"
run_dump_test "got-no-relax"
+ run_dump_test "addend"
+
if {![istarget "*-*-nacl*"]} then {
run_dump_test "iamcu-1"
run_dump_test "iamcu-2"
run_dump_test "x86-64-gotpcrel"
run_dump_test "x86-64-gotpcrel-no-relax"
+
+ run_dump_test "x86-64-addend"
}
set ASFLAGS "$old_ASFLAGS"
.*[ ]+R_386_PC8[ ]+xtrn
#...
.*[ ]+R_386_GOT32[ ]+xtrn
+#...
.*[ ]+R_386_GOT32[ ]+xtrn
+#pass
--- /dev/null
+#as: -mrelax-relocations=yes
+#objdump: -dwr
+
+.*: +file format .*
+
+
+Disassembly of section .text:
+
+0+ <_start>:
+[ ]*[a-f0-9]+: 48 c7 c0 00 00 00 00 mov \$0x0,%rax 3: R_X86_64_GOT32 foo
+[ ]*[a-f0-9]+: 48 c7 c0 00 00 00 00 mov \$0x0,%rax a: R_X86_64_GOT32 foo\+0x4
+[ ]*[a-f0-9]+: 48 c7 c0 00 00 00 00 mov \$0x0,%rax 11: R_X86_64_GOT32 foo
+[ ]*[a-f0-9]+: 48 c7 c0 00 00 00 00 mov \$0x0,%rax 18: R_X86_64_GOT32 foo\+0x4
+#pass
--- /dev/null
+ .text
+_start:
+ movq $foo@GOT, %rax
+ movq $foo@GOT + 4, %rax
+
+ .intel_syntax noprefix
+
+ mov rax, offset foo@got
+ mov rax, offset foo@got + 4