i386: Allow GOT32 relocations against ABS symbols
GOT32 relocations are allowed since absolute value + addend is stored in the GOT slot. Tested on glibc 2.35 build with GCC 11.2 and -Os. bfd/ PR ld/28870 * elfxx-x86.c (_bfd_elf_x86_valid_reloc_p): Also allow GOT32 relocations. ld/ PR ld/28870 * testsuite/ld-i386/i386.exp: Run pr28870. * testsuite/ld-i386/pr28870.d: New file. * testsuite/ld-i386/pr28870.s: Likewise.
This commit is contained in:
parent
a194bde670
commit
30a954525f
4 changed files with 23 additions and 4 deletions
|
@ -1942,9 +1942,9 @@ _bfd_elf_x86_valid_reloc_p (asection *input_section,
|
|||
irel = *rel;
|
||||
|
||||
/* Only allow relocations against absolute symbol, which can be
|
||||
resolved as absolute value + addend. GOTPCREL relocations
|
||||
are allowed since absolute value + addend is stored in the
|
||||
GOT slot. */
|
||||
resolved as absolute value + addend. GOTPCREL and GOT32
|
||||
relocations are allowed since absolute value + addend is
|
||||
stored in the GOT slot. */
|
||||
if (bed->target_id == X86_64_ELF_DATA)
|
||||
{
|
||||
r_type &= ~R_X86_64_converted_reloc_bit;
|
||||
|
@ -1965,7 +1965,9 @@ _bfd_elf_x86_valid_reloc_p (asection *input_section,
|
|||
else
|
||||
valid_p = (r_type == R_386_32
|
||||
|| r_type == R_386_16
|
||||
|| r_type == R_386_8);
|
||||
|| r_type == R_386_8
|
||||
|| r_type == R_386_GOT32
|
||||
|| r_type == R_386_GOT32X);
|
||||
|
||||
if (valid_p)
|
||||
*no_dynreloc_p = true;
|
||||
|
|
|
@ -509,6 +509,7 @@ run_dump_test "pr27491-3"
|
|||
run_dump_test "pr27491-4"
|
||||
run_dump_test "dt-relr-1a"
|
||||
run_dump_test "dt-relr-1b"
|
||||
run_dump_test "pr28870"
|
||||
|
||||
if { !([istarget "i?86-*-linux*"]
|
||||
|| [istarget "i?86-*-gnu*"]
|
||||
|
|
10
ld/testsuite/ld-i386/pr28870.d
Normal file
10
ld/testsuite/ld-i386/pr28870.d
Normal file
|
@ -0,0 +1,10 @@
|
|||
#as: --32
|
||||
#ld: --no-dynamic-linker -m elf_i386 -pie
|
||||
#readelf: -s --wide
|
||||
|
||||
#...
|
||||
Symbol table '.symtab' contains [0-9]+ entries:
|
||||
Num: Value Size Type Bind Vis Ndx Name
|
||||
#...
|
||||
+[a-f0-9]+: 00000002 0 NOTYPE LOCAL DEFAULT ABS foo
|
||||
#pass
|
6
ld/testsuite/ld-i386/pr28870.s
Normal file
6
ld/testsuite/ld-i386/pr28870.s
Normal file
|
@ -0,0 +1,6 @@
|
|||
.text
|
||||
.globl _start
|
||||
_start:
|
||||
addl foo@GOT(%ebx), %eax
|
||||
cmpl $0, foo@GOT(%ebx)
|
||||
foo = 2
|
Loading…
Add table
Reference in a new issue