mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2025-02-22 02:21:19 +00:00
Fix x86-64 ILP32 shared library.
bfd/ 2011-01-13 H.J. Lu <hongjiu.lu@intel.com> * elf64-x86-64.c (elf_x86_64_link_hash_table): Remove swap_reloca_out. (elf_x86_64_link_hash_table_create): Don't set swap_reloca_out. (elf_x86_64_check_relocs): Align relocation section to 4 byte for 32bit. (elf_x86_64_gc_sweep_hook): Replace ELF64_ST_TYPE with ELF_ST_TYPE. (elf_x86_64_finish_dynamic_symbol): Updated. (elf_x86_64_finish_dynamic_sections): Don't use Elf64_External_Dyn, bfd_elf64_swap_dyn_in, nor bfd_elf64_swap_dyn_out. ld/testsuite/ 2011-01-13 H.J. Lu <hongjiu.lu@intel.com> * ld-x86-64/ilp32-4.d: New. * ld-x86-64/x86-64.exp: Run ilp32-4.
This commit is contained in:
parent
175b7cd42c
commit
82e96e07e5
@ -1,3 +1,17 @@
|
||||
2011-01-13 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* elf64-x86-64.c (elf_x86_64_link_hash_table): Remove
|
||||
swap_reloca_out.
|
||||
(elf_x86_64_link_hash_table_create): Don't set swap_reloca_out.
|
||||
(elf_x86_64_check_relocs): Align relocation section to 4 byte
|
||||
for 32bit.
|
||||
(elf_x86_64_gc_sweep_hook): Replace ELF64_ST_TYPE with
|
||||
ELF_ST_TYPE.
|
||||
(elf_x86_64_finish_dynamic_symbol): Updated.
|
||||
(elf_x86_64_finish_dynamic_sections): Don't use
|
||||
Elf64_External_Dyn, bfd_elf64_swap_dyn_in, nor
|
||||
bfd_elf64_swap_dyn_out.
|
||||
|
||||
2011-01-14 J. Park <grassman@gmail.com>
|
||||
|
||||
PR ld/12339
|
||||
|
@ -495,7 +495,6 @@ struct elf_x86_64_link_hash_table
|
||||
|
||||
bfd_vma (*r_info) (bfd_vma, bfd_vma);
|
||||
bfd_vma (*r_sym) (bfd_vma);
|
||||
void (*swap_reloca_out) (bfd *, const Elf_Internal_Rela *, bfd_byte *);
|
||||
const char *dynamic_interpreter;
|
||||
int dynamic_interpreter_size;
|
||||
|
||||
@ -659,7 +658,6 @@ elf_x86_64_link_hash_table_create (bfd *abfd)
|
||||
{
|
||||
ret->r_info = elf64_r_info;
|
||||
ret->r_sym = elf64_r_sym;
|
||||
ret->swap_reloca_out = bfd_elf64_swap_reloca_out;
|
||||
ret->dynamic_interpreter = ELF64_DYNAMIC_INTERPRETER;
|
||||
ret->dynamic_interpreter_size = sizeof ELF64_DYNAMIC_INTERPRETER;
|
||||
}
|
||||
@ -667,7 +665,6 @@ elf_x86_64_link_hash_table_create (bfd *abfd)
|
||||
{
|
||||
ret->r_info = elf32_r_info;
|
||||
ret->r_sym = elf32_r_sym;
|
||||
ret->swap_reloca_out = bfd_elf32_swap_reloca_out;
|
||||
ret->dynamic_interpreter = ELF32_DYNAMIC_INTERPRETER;
|
||||
ret->dynamic_interpreter_size = sizeof ELF32_DYNAMIC_INTERPRETER;
|
||||
}
|
||||
@ -1545,7 +1542,8 @@ elf_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info,
|
||||
htab->elf.dynobj = abfd;
|
||||
|
||||
sreloc = _bfd_elf_make_dynamic_reloc_section
|
||||
(sec, htab->elf.dynobj, 3, abfd, /*rela?*/ TRUE);
|
||||
(sec, htab->elf.dynobj, ABI_64_P (abfd) ? 3 : 2,
|
||||
abfd, /*rela?*/ TRUE);
|
||||
|
||||
if (sreloc == NULL)
|
||||
return FALSE;
|
||||
@ -1699,7 +1697,7 @@ elf_x86_64_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info,
|
||||
|
||||
/* Check relocation against local STT_GNU_IFUNC symbol. */
|
||||
if (isym != NULL
|
||||
&& ELF64_ST_TYPE (isym->st_info) == STT_GNU_IFUNC)
|
||||
&& ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC)
|
||||
{
|
||||
h = elf_x86_64_get_local_sym_hash (htab, abfd, rel, FALSE);
|
||||
if (h == NULL)
|
||||
@ -3945,7 +3943,7 @@ elf_x86_64_finish_dynamic_symbol (bfd *output_bfd,
|
||||
|
||||
bed = get_elf_backend_data (output_bfd);
|
||||
loc = relplt->contents + plt_index * bed->s->sizeof_rela;
|
||||
htab->swap_reloca_out (output_bfd, &rela, loc);
|
||||
bed->s->swap_reloca_out (output_bfd, &rela, loc);
|
||||
|
||||
if (!h->def_regular)
|
||||
{
|
||||
@ -4116,19 +4114,23 @@ elf_x86_64_finish_dynamic_sections (bfd *output_bfd,
|
||||
|
||||
if (htab->elf.dynamic_sections_created)
|
||||
{
|
||||
Elf64_External_Dyn *dyncon, *dynconend;
|
||||
bfd_byte *dyncon, *dynconend;
|
||||
const struct elf_backend_data *bed;
|
||||
bfd_size_type sizeof_dyn;
|
||||
|
||||
if (sdyn == NULL || htab->elf.sgot == NULL)
|
||||
abort ();
|
||||
|
||||
dyncon = (Elf64_External_Dyn *) sdyn->contents;
|
||||
dynconend = (Elf64_External_Dyn *) (sdyn->contents + sdyn->size);
|
||||
for (; dyncon < dynconend; dyncon++)
|
||||
bed = get_elf_backend_data (dynobj);
|
||||
sizeof_dyn = bed->s->sizeof_dyn;
|
||||
dyncon = sdyn->contents;
|
||||
dynconend = sdyn->contents + sdyn->size;
|
||||
for (; dyncon < dynconend; dyncon += sizeof_dyn)
|
||||
{
|
||||
Elf_Internal_Dyn dyn;
|
||||
asection *s;
|
||||
|
||||
bfd_elf64_swap_dyn_in (dynobj, dyncon, &dyn);
|
||||
(*bed->s->swap_dyn_in) (dynobj, dyncon, &dyn);
|
||||
|
||||
switch (dyn.d_tag)
|
||||
{
|
||||
@ -4177,7 +4179,7 @@ elf_x86_64_finish_dynamic_sections (bfd *output_bfd,
|
||||
break;
|
||||
}
|
||||
|
||||
bfd_elf64_swap_dyn_out (output_bfd, &dyn, dyncon);
|
||||
(*bed->s->swap_dyn_out) (output_bfd, &dyn, dyncon);
|
||||
}
|
||||
|
||||
/* Fill in the special first entry in the procedure linkage table. */
|
||||
|
@ -1,3 +1,9 @@
|
||||
2011-01-13 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* ld-x86-64/ilp32-4.d: New.
|
||||
|
||||
* ld-x86-64/x86-64.exp: Run ilp32-4.
|
||||
|
||||
2011-01-13 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR ld/12356
|
||||
|
36
ld/testsuite/ld-x86-64/ilp32-4.d
Normal file
36
ld/testsuite/ld-x86-64/ilp32-4.d
Normal file
@ -0,0 +1,36 @@
|
||||
#source: start.s
|
||||
#as: --n32
|
||||
#ld: -m elf32_x86_64 -shared
|
||||
#readelf: -d -S --wide
|
||||
|
||||
There are 10 section headers, starting at offset 0x22c:
|
||||
|
||||
Section Headers:
|
||||
\[Nr\] Name Type Addr Off Size ES Flg Lk Inf Al
|
||||
\[ 0\] NULL 00000000 000000 000000 00 0 0 0
|
||||
\[ 1\] .hash HASH 00000094 000094 000030 04 A 2 0 4
|
||||
\[ 2\] .dynsym DYNSYM 000000c4 0000c4 000070 10 A 3 2 4
|
||||
\[ 3\] .dynstr STRTAB 00000134 000134 00001d 00 A 0 0 1
|
||||
\[ 4\] .rela.dyn RELA 00000154 000154 00000c 0c A 2 0 4
|
||||
\[ 5\] .text PROGBITS 00000160 000160 000005 00 AX 0 0 4
|
||||
\[ 6\] .dynamic DYNAMIC 00200168 000168 000078 08 WA 3 0 4
|
||||
\[ 7\] .shstrtab STRTAB 00000000 0001e0 00004a 00 0 0 1
|
||||
\[ 8\] .symtab SYMTAB 00000000 0003bc 0000f0 10 9 10 4
|
||||
\[ 9\] .strtab STRTAB 00000000 0004ac 00005d 00 0 0 1
|
||||
Key to Flags:
|
||||
W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\), l \(large\)
|
||||
I \(info\), L \(link order\), G \(group\), T \(TLS\), E \(exclude\), x \(unknown\)
|
||||
O \(extra OS processing required\) o \(OS specific\), p \(processor specific\)
|
||||
|
||||
Dynamic section at offset 0x168 contains 10 entries:
|
||||
Tag Type Name/Value
|
||||
0x00000004 \(HASH\) 0x94
|
||||
0x00000005 \(STRTAB\) 0x134
|
||||
0x00000006 \(SYMTAB\) 0xc4
|
||||
0x0000000a \(STRSZ\) 29 \(bytes\)
|
||||
0x0000000b \(SYMENT\) 16 \(bytes\)
|
||||
0x00000007 \(RELA\) 0x154
|
||||
0x00000008 \(RELASZ\) 12 \(bytes\)
|
||||
0x00000009 \(RELAENT\) 12 \(bytes\)
|
||||
0x00000016 \(TEXTREL\) 0x0
|
||||
0x00000000 \(NULL\) 0x0
|
@ -175,6 +175,7 @@ run_dump_test "compressed1"
|
||||
run_dump_test "ilp32-1"
|
||||
run_dump_test "ilp32-2"
|
||||
run_dump_test "ilp32-3"
|
||||
run_dump_test "ilp32-4"
|
||||
run_dump_test "ia32-1"
|
||||
run_dump_test "ia32-2"
|
||||
run_dump_test "ia32-3"
|
||||
|
Loading…
x
Reference in New Issue
Block a user