mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-28 23:39:35 +08:00
bfd/
* elf32-i386.c (elf_i386_link_hash_table): Add next_tls_desc_index. (elf_i386_link_hash_table_create): Initialize it. (elf_i386_compute_jump_table_size): Use it instead of srelplt->reloc_count. (allocate_dynrelocs): Likewise. (elf_i386_size_dynamic_sections): Likewise. (elf_i386_relocate_section): Likewise. ld/testsuite/ * ld-i386/emit-relocs.s, ld-i386/emit-relocs.d: New test. * ld-i386/i386.exp: Run it.
This commit is contained in:
@ -1,3 +1,13 @@
|
|||||||
|
2006-02-28 Richard Sandiford <richard@codesourcery.com>
|
||||||
|
|
||||||
|
* elf32-i386.c (elf_i386_link_hash_table): Add next_tls_desc_index.
|
||||||
|
(elf_i386_link_hash_table_create): Initialize it.
|
||||||
|
(elf_i386_compute_jump_table_size): Use it instead of
|
||||||
|
srelplt->reloc_count.
|
||||||
|
(allocate_dynrelocs): Likewise.
|
||||||
|
(elf_i386_size_dynamic_sections): Likewise.
|
||||||
|
(elf_i386_relocate_section): Likewise.
|
||||||
|
|
||||||
2006-02-27 Jakub Jelinek <jakub@redhat.com>
|
2006-02-27 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
* elf-eh-frame.c (_bfd_elf_discard_section_eh_frame): Handle S flag.
|
* elf-eh-frame.c (_bfd_elf_discard_section_eh_frame): Handle S flag.
|
||||||
|
@ -653,6 +653,9 @@ struct elf_i386_link_hash_table
|
|||||||
/* Value used to fill the last word of the first plt entry. */
|
/* Value used to fill the last word of the first plt entry. */
|
||||||
bfd_byte plt0_pad_byte;
|
bfd_byte plt0_pad_byte;
|
||||||
|
|
||||||
|
/* The index of the next unused R_386_TLS_DESC slot in .rel.plt. */
|
||||||
|
bfd_vma next_tls_desc_index;
|
||||||
|
|
||||||
union {
|
union {
|
||||||
bfd_signed_vma refcount;
|
bfd_signed_vma refcount;
|
||||||
bfd_vma offset;
|
bfd_vma offset;
|
||||||
@ -672,7 +675,7 @@ struct elf_i386_link_hash_table
|
|||||||
((struct elf_i386_link_hash_table *) ((p)->hash))
|
((struct elf_i386_link_hash_table *) ((p)->hash))
|
||||||
|
|
||||||
#define elf_i386_compute_jump_table_size(htab) \
|
#define elf_i386_compute_jump_table_size(htab) \
|
||||||
((htab)->srelplt->reloc_count * 4)
|
((htab)->next_tls_desc_index * 4)
|
||||||
|
|
||||||
/* Create an entry in an i386 ELF linker hash table. */
|
/* Create an entry in an i386 ELF linker hash table. */
|
||||||
|
|
||||||
@ -732,6 +735,7 @@ elf_i386_link_hash_table_create (bfd *abfd)
|
|||||||
ret->sdynbss = NULL;
|
ret->sdynbss = NULL;
|
||||||
ret->srelbss = NULL;
|
ret->srelbss = NULL;
|
||||||
ret->tls_ldm_got.refcount = 0;
|
ret->tls_ldm_got.refcount = 0;
|
||||||
|
ret->next_tls_desc_index = 0;
|
||||||
ret->sgotplt_jump_table_size = 0;
|
ret->sgotplt_jump_table_size = 0;
|
||||||
ret->sym_sec.abfd = NULL;
|
ret->sym_sec.abfd = NULL;
|
||||||
ret->is_vxworks = 0;
|
ret->is_vxworks = 0;
|
||||||
@ -1639,7 +1643,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
|
|||||||
|
|
||||||
/* We also need to make an entry in the .rel.plt section. */
|
/* We also need to make an entry in the .rel.plt section. */
|
||||||
htab->srelplt->size += sizeof (Elf32_External_Rel);
|
htab->srelplt->size += sizeof (Elf32_External_Rel);
|
||||||
htab->srelplt->reloc_count++;
|
htab->next_tls_desc_index++;
|
||||||
|
|
||||||
if (htab->is_vxworks && !info->shared)
|
if (htab->is_vxworks && !info->shared)
|
||||||
{
|
{
|
||||||
@ -2021,7 +2025,7 @@ elf_i386_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
|
|||||||
for them, it suffices to multiply the reloc count by the jump
|
for them, it suffices to multiply the reloc count by the jump
|
||||||
slot size. */
|
slot size. */
|
||||||
if (htab->srelplt)
|
if (htab->srelplt)
|
||||||
htab->sgotplt_jump_table_size = htab->srelplt->reloc_count * 4;
|
htab->sgotplt_jump_table_size = htab->next_tls_desc_index * 4;
|
||||||
|
|
||||||
/* We now have determined the sizes of the various dynamic sections.
|
/* We now have determined the sizes of the various dynamic sections.
|
||||||
Allocate memory for them. */
|
Allocate memory for them. */
|
||||||
@ -2054,8 +2058,7 @@ elf_i386_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
|
|||||||
|
|
||||||
/* We use the reloc_count field as a counter if we need
|
/* We use the reloc_count field as a counter if we need
|
||||||
to copy relocs into the output file. */
|
to copy relocs into the output file. */
|
||||||
if (s != htab->srelplt)
|
s->reloc_count = 0;
|
||||||
s->reloc_count = 0;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -2997,8 +3000,8 @@ elf_i386_relocate_section (bfd *output_bfd,
|
|||||||
+ htab->sgotplt_jump_table_size);
|
+ htab->sgotplt_jump_table_size);
|
||||||
sreloc = htab->srelplt;
|
sreloc = htab->srelplt;
|
||||||
loc = sreloc->contents;
|
loc = sreloc->contents;
|
||||||
loc += sreloc->reloc_count++
|
loc += (htab->next_tls_desc_index++
|
||||||
* sizeof (Elf32_External_Rel);
|
* sizeof (Elf32_External_Rel));
|
||||||
BFD_ASSERT (loc + sizeof (Elf32_External_Rel)
|
BFD_ASSERT (loc + sizeof (Elf32_External_Rel)
|
||||||
<= sreloc->contents + sreloc->size);
|
<= sreloc->contents + sreloc->size);
|
||||||
bfd_elf32_swap_reloc_out (output_bfd, &outrel, loc);
|
bfd_elf32_swap_reloc_out (output_bfd, &outrel, loc);
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
2006-02-28 Richard Sandiford <richard@codesourcery.com>
|
||||||
|
|
||||||
|
* ld-i386/emit-relocs.s, ld-i386/emit-relocs.d: New test.
|
||||||
|
* ld-i386/i386.exp: Run it.
|
||||||
|
|
||||||
2006-02-23 H.J. Lu <hongjiu.lu@intel.com>
|
2006-02-23 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
* ld-pie/weakundef-data.c: Fix the typo.
|
* ld-pie/weakundef-data.c: Fix the typo.
|
||||||
|
8
ld/testsuite/ld-i386/emit-relocs.d
Normal file
8
ld/testsuite/ld-i386/emit-relocs.d
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
|
||||||
|
Relocation section '\.rel\.plt' at offset .* contains 1 entries:
|
||||||
|
Offset Info Type Sym\.Value Sym\. Name
|
||||||
|
.* .*07 R_386_JUMP_SLOT 00000000 foo
|
||||||
|
|
||||||
|
Relocation section '\.rel\.text' at offset .* contains 1 entries:
|
||||||
|
Offset Info Type Sym\.Value Sym\. Name
|
||||||
|
.* .*04 R_386_PLT32 00000000 foo
|
1
ld/testsuite/ld-i386/emit-relocs.s
Normal file
1
ld/testsuite/ld-i386/emit-relocs.s
Normal file
@ -0,0 +1 @@
|
|||||||
|
call foo@plt
|
@ -75,6 +75,8 @@ set i386tests {
|
|||||||
{{objdump -drj.text tlsindntpoff.dd}} "tlsindntpoff"}
|
{{objdump -drj.text tlsindntpoff.dd}} "tlsindntpoff"}
|
||||||
{"Reloc section order" "-shared -melf_i386 -z nocombreloc" "--32"
|
{"Reloc section order" "-shared -melf_i386 -z nocombreloc" "--32"
|
||||||
{reloc.s} {{objdump -hw reloc.d}} "reloc.so"}
|
{reloc.s} {{objdump -hw reloc.d}} "reloc.so"}
|
||||||
|
{"Basic --emit-relocs support" "-shared -melf_i386 --emit-relocs" "--32"
|
||||||
|
{emit-relocs.s} {{readelf --relocs emit-relocs.d}} "emit-relocs.so"}
|
||||||
{"-z combreloc relocation sections" "-shared -melf_i386 -z combreloc"
|
{"-z combreloc relocation sections" "-shared -melf_i386 -z combreloc"
|
||||||
"--32" {combreloc.s} {{readelf -r combreloc.d}} "combreloc.so"}
|
"--32" {combreloc.s} {{readelf -r combreloc.d}} "combreloc.so"}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user