mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-09-10 10:12:21 +08:00
bfd/
* elf-bfd.h (elf_link_hash_table): Add hplt field. * elflink.c (_bfd_elf_create_dynamic_sections): Initialize it. * elf-m10300.c (_bfd_mn10300_elf_create_got_section): Likewise. * elf32-frv.c (_frv_create_got_section): Likewise. * elf32-m32r.c (m32r_elf_create_dynamic_sections): Likewise. * elf32-sh.c (sh_elf_create_dynamic_sections): Likewise. * elf64-alpha.c (elf64_alpha_create_dynamic_sections): Likewise. * elf64-sh64.c (sh64_elf64_create_dynamic_sections): Likewise. * elf32-i386.c (elf_i386_link_hash_table): Remove hgot and hplt. (elf_i386_link_hash_table_create): Don't initialize them. (elf_i386_size_dynamic_sections): Use the generic ELF hplt and hgot fields. (elf_i386_finish_dynamic_symbol): Likewise. * elf32-ppc.c (ppc_elf_link_hash_table): Remove hplt. (ppc_elf_size_dynamic_sections): Use the generic ELF hplt fields. (ppc_elf_finish_dynamic_symbol): Likewise.
This commit is contained in:
@ -1,3 +1,22 @@
|
|||||||
|
2006-02-25 Richard Sandiford <richard@codesourcery.com>
|
||||||
|
|
||||||
|
* elf-bfd.h (elf_link_hash_table): Add hplt field.
|
||||||
|
* elflink.c (_bfd_elf_create_dynamic_sections): Initialize it.
|
||||||
|
* elf-m10300.c (_bfd_mn10300_elf_create_got_section): Likewise.
|
||||||
|
* elf32-frv.c (_frv_create_got_section): Likewise.
|
||||||
|
* elf32-m32r.c (m32r_elf_create_dynamic_sections): Likewise.
|
||||||
|
* elf32-sh.c (sh_elf_create_dynamic_sections): Likewise.
|
||||||
|
* elf64-alpha.c (elf64_alpha_create_dynamic_sections): Likewise.
|
||||||
|
* elf64-sh64.c (sh64_elf64_create_dynamic_sections): Likewise.
|
||||||
|
* elf32-i386.c (elf_i386_link_hash_table): Remove hgot and hplt.
|
||||||
|
(elf_i386_link_hash_table_create): Don't initialize them.
|
||||||
|
(elf_i386_size_dynamic_sections): Use the generic ELF hplt and
|
||||||
|
hgot fields.
|
||||||
|
(elf_i386_finish_dynamic_symbol): Likewise.
|
||||||
|
* elf32-ppc.c (ppc_elf_link_hash_table): Remove hplt.
|
||||||
|
(ppc_elf_size_dynamic_sections): Use the generic ELF hplt fields.
|
||||||
|
(ppc_elf_finish_dynamic_symbol): Likewise.
|
||||||
|
|
||||||
2006-02-24 DJ Delorie <dj@redhat.com>
|
2006-02-24 DJ Delorie <dj@redhat.com>
|
||||||
|
|
||||||
* elf32-m32c.c (m32c_elf_howto_table): Add relaxation relocs.
|
* elf32-m32c.c (m32c_elf_howto_table): Add relaxation relocs.
|
||||||
|
@ -378,6 +378,9 @@ struct elf_link_hash_table
|
|||||||
/* The _GLOBAL_OFFSET_TABLE_ symbol. */
|
/* The _GLOBAL_OFFSET_TABLE_ symbol. */
|
||||||
struct elf_link_hash_entry *hgot;
|
struct elf_link_hash_entry *hgot;
|
||||||
|
|
||||||
|
/* The _PROCEDURE_LINKAGE_TABLE_ symbol. */
|
||||||
|
struct elf_link_hash_entry *hplt;
|
||||||
|
|
||||||
/* A pointer to information used to merge SEC_MERGE sections. */
|
/* A pointer to information used to merge SEC_MERGE sections. */
|
||||||
void *merge_info;
|
void *merge_info;
|
||||||
|
|
||||||
|
@ -582,10 +582,14 @@ _bfd_mn10300_elf_create_got_section (abfd, info)
|
|||||||
|
|
||||||
/* Define the symbol _PROCEDURE_LINKAGE_TABLE_ at the start of the
|
/* Define the symbol _PROCEDURE_LINKAGE_TABLE_ at the start of the
|
||||||
.plt section. */
|
.plt section. */
|
||||||
if (bed->want_plt_sym
|
if (bed->want_plt_sym)
|
||||||
&& !_bfd_elf_define_linkage_sym (abfd, info, s,
|
{
|
||||||
"_PROCEDURE_LINKAGE_TABLE_"))
|
h = _bfd_elf_define_linkage_sym (abfd, info, s,
|
||||||
return FALSE;
|
"_PROCEDURE_LINKAGE_TABLE_");
|
||||||
|
elf_hash_table (info)->hplt = h;
|
||||||
|
if (h == NULL)
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
s = bfd_make_section_with_flags (abfd, ".got", flags);
|
s = bfd_make_section_with_flags (abfd, ".got", flags);
|
||||||
if (s == NULL
|
if (s == NULL
|
||||||
|
@ -4398,10 +4398,14 @@ _frv_create_got_section (bfd *abfd, struct bfd_link_info *info)
|
|||||||
|
|
||||||
/* Define the symbol _PROCEDURE_LINKAGE_TABLE_ at the start of the
|
/* Define the symbol _PROCEDURE_LINKAGE_TABLE_ at the start of the
|
||||||
.plt section. */
|
.plt section. */
|
||||||
if (bed->want_plt_sym
|
if (bed->want_plt_sym)
|
||||||
&& !_bfd_elf_define_linkage_sym (abfd, info, s,
|
{
|
||||||
"_PROCEDURE_LINKAGE_TABLE_"))
|
h = _bfd_elf_define_linkage_sym (abfd, info, s,
|
||||||
return FALSE;
|
"_PROCEDURE_LINKAGE_TABLE_");
|
||||||
|
elf_hash_table (info)->hplt = h;
|
||||||
|
if (h == NULL)
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
/* FRV-specific: we want rel relocations for the plt. */
|
/* FRV-specific: we want rel relocations for the plt. */
|
||||||
s = bfd_make_section_with_flags (abfd, ".rel.plt",
|
s = bfd_make_section_with_flags (abfd, ".rel.plt",
|
||||||
|
@ -647,9 +647,6 @@ struct elf_i386_link_hash_table
|
|||||||
/* The (unloaded but important) .rel.plt.unloaded section on VxWorks. */
|
/* The (unloaded but important) .rel.plt.unloaded section on VxWorks. */
|
||||||
asection *srelplt2;
|
asection *srelplt2;
|
||||||
|
|
||||||
/* Short-cuts to frequently used symbols for VxWorks targets. */
|
|
||||||
struct elf_link_hash_entry *hgot, *hplt;
|
|
||||||
|
|
||||||
/* True if the target system is VxWorks. */
|
/* True if the target system is VxWorks. */
|
||||||
int is_vxworks;
|
int is_vxworks;
|
||||||
|
|
||||||
@ -739,8 +736,6 @@ elf_i386_link_hash_table_create (bfd *abfd)
|
|||||||
ret->sym_sec.abfd = NULL;
|
ret->sym_sec.abfd = NULL;
|
||||||
ret->is_vxworks = 0;
|
ret->is_vxworks = 0;
|
||||||
ret->srelplt2 = NULL;
|
ret->srelplt2 = NULL;
|
||||||
ret->hgot = NULL;
|
|
||||||
ret->hplt = NULL;
|
|
||||||
ret->plt0_pad_byte = 0;
|
ret->plt0_pad_byte = 0;
|
||||||
|
|
||||||
return &ret->elf.root;
|
return &ret->elf.root;
|
||||||
@ -2003,23 +1998,17 @@ elf_i386_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
|
|||||||
|
|
||||||
if (htab->is_vxworks)
|
if (htab->is_vxworks)
|
||||||
{
|
{
|
||||||
/* Save the GOT and PLT symbols in the hash table for easy access.
|
/* Mark the GOT and PLT symbols as having relocations; they might
|
||||||
Mark them as having relocations; they might not, but we won't
|
not, but we won't know for sure until we build the GOT in
|
||||||
know for sure until we build the GOT in finish_dynamic_symbol. */
|
finish_dynamic_symbol. */
|
||||||
|
if (htab->elf.hgot)
|
||||||
htab->hgot = elf_link_hash_lookup (elf_hash_table (info),
|
htab->elf.hgot->indx = -2;
|
||||||
"_GLOBAL_OFFSET_TABLE_",
|
if (htab->elf.hplt)
|
||||||
FALSE, FALSE, FALSE);
|
{
|
||||||
if (htab->hgot)
|
htab->elf.hplt->indx = -2;
|
||||||
htab->hgot->indx = -2;
|
if (htab->splt->flags & SEC_CODE)
|
||||||
htab->hplt = elf_link_hash_lookup (elf_hash_table (info),
|
htab->elf.hplt->type = STT_FUNC;
|
||||||
"_PROCEDURE_LINKAGE_TABLE_",
|
}
|
||||||
FALSE, FALSE, FALSE);
|
|
||||||
if (htab->hplt)
|
|
||||||
htab->hplt->indx = -2;
|
|
||||||
|
|
||||||
if (htab->is_vxworks && htab->hplt && htab->splt->flags & SEC_CODE)
|
|
||||||
htab->hplt->type = STT_FUNC;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Allocate global sym .plt and .got entries, and space for global
|
/* Allocate global sym .plt and .got entries, and space for global
|
||||||
@ -2055,7 +2044,7 @@ elf_i386_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
|
|||||||
we've exported dynamic symbols from them we must leave them.
|
we've exported dynamic symbols from them we must leave them.
|
||||||
It's too late to tell BFD to get rid of the symbols. */
|
It's too late to tell BFD to get rid of the symbols. */
|
||||||
|
|
||||||
if (htab->hplt != NULL)
|
if (htab->elf.hplt != NULL)
|
||||||
strip_section = FALSE;
|
strip_section = FALSE;
|
||||||
}
|
}
|
||||||
else if (strncmp (bfd_get_section_name (dynobj, s), ".rel", 4) == 0)
|
else if (strncmp (bfd_get_section_name (dynobj, s), ".rel", 4) == 0)
|
||||||
@ -3524,7 +3513,7 @@ elf_i386_finish_dynamic_symbol (bfd *output_bfd,
|
|||||||
rel.r_offset = (htab->splt->output_section->vma
|
rel.r_offset = (htab->splt->output_section->vma
|
||||||
+ htab->splt->output_offset
|
+ htab->splt->output_offset
|
||||||
+ h->plt.offset + 2),
|
+ h->plt.offset + 2),
|
||||||
rel.r_info = ELF32_R_INFO (htab->hgot->indx, R_386_32);
|
rel.r_info = ELF32_R_INFO (htab->elf.hgot->indx, R_386_32);
|
||||||
bfd_elf32_swap_reloc_out (output_bfd, &rel, loc);
|
bfd_elf32_swap_reloc_out (output_bfd, &rel, loc);
|
||||||
|
|
||||||
/* Create the R_386_32 relocation referencing the beginning of
|
/* Create the R_386_32 relocation referencing the beginning of
|
||||||
@ -3532,7 +3521,7 @@ elf_i386_finish_dynamic_symbol (bfd *output_bfd,
|
|||||||
rel.r_offset = (htab->sgotplt->output_section->vma
|
rel.r_offset = (htab->sgotplt->output_section->vma
|
||||||
+ htab->sgotplt->output_offset
|
+ htab->sgotplt->output_offset
|
||||||
+ got_offset);
|
+ got_offset);
|
||||||
rel.r_info = ELF32_R_INFO (htab->hplt->indx, R_386_32);
|
rel.r_info = ELF32_R_INFO (htab->elf.hplt->indx, R_386_32);
|
||||||
bfd_elf32_swap_reloc_out (output_bfd, &rel,
|
bfd_elf32_swap_reloc_out (output_bfd, &rel,
|
||||||
loc + sizeof (Elf32_External_Rel));
|
loc + sizeof (Elf32_External_Rel));
|
||||||
}
|
}
|
||||||
@ -3786,28 +3775,21 @@ elf_i386_finish_dynamic_sections (bfd *output_bfd,
|
|||||||
if (htab->is_vxworks)
|
if (htab->is_vxworks)
|
||||||
{
|
{
|
||||||
Elf_Internal_Rela rel;
|
Elf_Internal_Rela rel;
|
||||||
struct elf_link_hash_entry *hgot;
|
|
||||||
|
|
||||||
/* The VxWorks GOT is relocated by the dynamic linker.
|
|
||||||
Therefore, we must emit relocations rather than
|
|
||||||
simply computing the values now. */
|
|
||||||
hgot = elf_link_hash_lookup (elf_hash_table (info),
|
|
||||||
"_GLOBAL_OFFSET_TABLE_",
|
|
||||||
FALSE, FALSE, FALSE);
|
|
||||||
/* Generate a relocation for _GLOBAL_OFFSET_TABLE_ + 4.
|
/* Generate a relocation for _GLOBAL_OFFSET_TABLE_ + 4.
|
||||||
On IA32 we use REL relocations so the addend goes in
|
On IA32 we use REL relocations so the addend goes in
|
||||||
the PLT directly. */
|
the PLT directly. */
|
||||||
rel.r_offset = (htab->splt->output_section->vma
|
rel.r_offset = (htab->splt->output_section->vma
|
||||||
+ htab->splt->output_offset
|
+ htab->splt->output_offset
|
||||||
+ 2);
|
+ 2);
|
||||||
rel.r_info = ELF32_R_INFO (hgot->indx, R_386_32);
|
rel.r_info = ELF32_R_INFO (htab->elf.hgot->indx, R_386_32);
|
||||||
bfd_elf32_swap_reloc_out (output_bfd, &rel,
|
bfd_elf32_swap_reloc_out (output_bfd, &rel,
|
||||||
htab->srelplt2->contents);
|
htab->srelplt2->contents);
|
||||||
/* Generate a relocation for _GLOBAL_OFFSET_TABLE_ + 8. */
|
/* Generate a relocation for _GLOBAL_OFFSET_TABLE_ + 8. */
|
||||||
rel.r_offset = (htab->splt->output_section->vma
|
rel.r_offset = (htab->splt->output_section->vma
|
||||||
+ htab->splt->output_offset
|
+ htab->splt->output_offset
|
||||||
+ 8);
|
+ 8);
|
||||||
rel.r_info = ELF32_R_INFO (hgot->indx, R_386_32);
|
rel.r_info = ELF32_R_INFO (htab->elf.hgot->indx, R_386_32);
|
||||||
bfd_elf32_swap_reloc_out (output_bfd, &rel,
|
bfd_elf32_swap_reloc_out (output_bfd, &rel,
|
||||||
htab->srelplt2->contents +
|
htab->srelplt2->contents +
|
||||||
sizeof (Elf32_External_Rel));
|
sizeof (Elf32_External_Rel));
|
||||||
@ -3835,12 +3817,12 @@ elf_i386_finish_dynamic_sections (bfd *output_bfd,
|
|||||||
{
|
{
|
||||||
Elf_Internal_Rela rel;
|
Elf_Internal_Rela rel;
|
||||||
bfd_elf32_swap_reloc_in (output_bfd, p, &rel);
|
bfd_elf32_swap_reloc_in (output_bfd, p, &rel);
|
||||||
rel.r_info = ELF32_R_INFO (htab->hgot->indx, R_386_32);
|
rel.r_info = ELF32_R_INFO (htab->elf.hgot->indx, R_386_32);
|
||||||
bfd_elf32_swap_reloc_out (output_bfd, &rel, p);
|
bfd_elf32_swap_reloc_out (output_bfd, &rel, p);
|
||||||
p += sizeof (Elf32_External_Rel);
|
p += sizeof (Elf32_External_Rel);
|
||||||
|
|
||||||
bfd_elf32_swap_reloc_in (output_bfd, p, &rel);
|
bfd_elf32_swap_reloc_in (output_bfd, p, &rel);
|
||||||
rel.r_info = ELF32_R_INFO (htab->hplt->indx, R_386_32);
|
rel.r_info = ELF32_R_INFO (htab->elf.hplt->indx, R_386_32);
|
||||||
bfd_elf32_swap_reloc_out (output_bfd, &rel, p);
|
bfd_elf32_swap_reloc_out (output_bfd, &rel, p);
|
||||||
p += sizeof (Elf32_External_Rel);
|
p += sizeof (Elf32_External_Rel);
|
||||||
}
|
}
|
||||||
|
@ -1668,6 +1668,7 @@ m32r_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
|
|||||||
h = (struct elf_link_hash_entry *) bh;
|
h = (struct elf_link_hash_entry *) bh;
|
||||||
h->def_regular = 1;
|
h->def_regular = 1;
|
||||||
h->type = STT_OBJECT;
|
h->type = STT_OBJECT;
|
||||||
|
htab->root.hplt = h;
|
||||||
|
|
||||||
if (info->shared
|
if (info->shared
|
||||||
&& ! bfd_elf_link_record_dynamic_symbol (info, h))
|
&& ! bfd_elf_link_record_dynamic_symbol (info, h))
|
||||||
|
@ -2365,9 +2365,6 @@ struct ppc_elf_link_hash_table
|
|||||||
/* The .got.plt section (VxWorks only)*/
|
/* The .got.plt section (VxWorks only)*/
|
||||||
asection *sgotplt;
|
asection *sgotplt;
|
||||||
|
|
||||||
/* Short-cuts to frequently used symbols on VxWorks targets. */
|
|
||||||
struct elf_link_hash_entry *hplt;
|
|
||||||
|
|
||||||
/* True if the target system is VxWorks. */
|
/* True if the target system is VxWorks. */
|
||||||
int is_vxworks;
|
int is_vxworks;
|
||||||
|
|
||||||
@ -4762,21 +4759,17 @@ ppc_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
|
|||||||
|
|
||||||
if (htab->is_vxworks)
|
if (htab->is_vxworks)
|
||||||
{
|
{
|
||||||
/* Save the PLT symbol in the hash table for easy access.
|
/* Mark the GOT and PLT symbols as having relocations; they might
|
||||||
Mark GOT and PLT syms as having relocations; they might not,
|
not, but we won't know for sure until we build the GOT in
|
||||||
but we won't know for sure until we build the GOT in
|
|
||||||
finish_dynamic_symbol. */
|
finish_dynamic_symbol. */
|
||||||
|
|
||||||
if (htab->elf.hgot)
|
if (htab->elf.hgot)
|
||||||
htab->elf.hgot->indx = -2;
|
htab->elf.hgot->indx = -2;
|
||||||
htab->hplt = elf_link_hash_lookup (elf_hash_table (info),
|
if (htab->elf.hplt)
|
||||||
"_PROCEDURE_LINKAGE_TABLE_",
|
{
|
||||||
FALSE, FALSE, FALSE);
|
htab->elf.hplt->indx = -2;
|
||||||
if (htab->hplt)
|
if (htab->plt->flags & SEC_CODE)
|
||||||
htab->hplt->indx = -2;
|
htab->elf.hplt->type = STT_FUNC;
|
||||||
/* If the PLT is executable then give the symbol function type. */
|
}
|
||||||
if (htab->hplt && htab->plt->flags & SEC_CODE)
|
|
||||||
htab->hplt->type = STT_FUNC;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Allocate space for global sym dynamic relocs. */
|
/* Allocate space for global sym dynamic relocs. */
|
||||||
@ -4867,7 +4860,7 @@ ppc_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
|
|||||||
/* We'd like to strip these sections if they aren't needed, but if
|
/* We'd like to strip these sections if they aren't needed, but if
|
||||||
we've exported dynamic symbols from them we must leave them.
|
we've exported dynamic symbols from them we must leave them.
|
||||||
It's too late to tell BFD to get rid of the symbols. */
|
It's too late to tell BFD to get rid of the symbols. */
|
||||||
if ((s == htab->plt || s == htab->got) && htab->hplt != NULL)
|
if ((s == htab->plt || s == htab->got) && htab->elf.hplt != NULL)
|
||||||
strip_section = FALSE;
|
strip_section = FALSE;
|
||||||
/* Strip this section if we don't need it; see the
|
/* Strip this section if we don't need it; see the
|
||||||
comment below. */
|
comment below. */
|
||||||
@ -6880,7 +6873,7 @@ ppc_elf_finish_dynamic_symbol (bfd *output_bfd,
|
|||||||
rela.r_offset = (htab->sgotplt->output_section->vma
|
rela.r_offset = (htab->sgotplt->output_section->vma
|
||||||
+ htab->sgotplt->output_offset
|
+ htab->sgotplt->output_offset
|
||||||
+ got_offset);
|
+ got_offset);
|
||||||
rela.r_info = ELF32_R_INFO (htab->hplt->indx,
|
rela.r_info = ELF32_R_INFO (htab->elf.hplt->indx,
|
||||||
R_PPC_ADDR32);
|
R_PPC_ADDR32);
|
||||||
rela.r_addend = ent->plt.offset + 16;
|
rela.r_addend = ent->plt.offset + 16;
|
||||||
bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
|
bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
|
||||||
@ -7248,7 +7241,7 @@ ppc_elf_finish_dynamic_sections (bfd *output_bfd,
|
|||||||
loc += sizeof (Elf32_External_Rela);
|
loc += sizeof (Elf32_External_Rela);
|
||||||
|
|
||||||
bfd_elf32_swap_reloc_in (output_bfd, loc, &rel);
|
bfd_elf32_swap_reloc_in (output_bfd, loc, &rel);
|
||||||
rel.r_info = ELF32_R_INFO (htab->hplt->indx, R_PPC_ADDR32);
|
rel.r_info = ELF32_R_INFO (htab->elf.hplt->indx, R_PPC_ADDR32);
|
||||||
bfd_elf32_swap_reloc_out (output_bfd, &rel, loc);
|
bfd_elf32_swap_reloc_out (output_bfd, &rel, loc);
|
||||||
loc += sizeof (Elf32_External_Rela);
|
loc += sizeof (Elf32_External_Rela);
|
||||||
}
|
}
|
||||||
|
@ -3726,6 +3726,7 @@ sh_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
|
|||||||
h = (struct elf_link_hash_entry *) bh;
|
h = (struct elf_link_hash_entry *) bh;
|
||||||
h->def_regular = 1;
|
h->def_regular = 1;
|
||||||
h->type = STT_OBJECT;
|
h->type = STT_OBJECT;
|
||||||
|
htab->root.hplt = h;
|
||||||
|
|
||||||
if (info->shared
|
if (info->shared
|
||||||
&& ! bfd_elf_link_record_dynamic_symbol (info, h))
|
&& ! bfd_elf_link_record_dynamic_symbol (info, h))
|
||||||
|
@ -1244,8 +1244,10 @@ elf64_alpha_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
|
|||||||
|
|
||||||
/* Define the symbol _PROCEDURE_LINKAGE_TABLE_ at the start of the
|
/* Define the symbol _PROCEDURE_LINKAGE_TABLE_ at the start of the
|
||||||
.plt section. */
|
.plt section. */
|
||||||
if (!_bfd_elf_define_linkage_sym (abfd, info, s,
|
h = _bfd_elf_define_linkage_sym (abfd, info, s,
|
||||||
"_PROCEDURE_LINKAGE_TABLE_"))
|
"_PROCEDURE_LINKAGE_TABLE_");
|
||||||
|
elf_hash_table (info)->hplt = h;
|
||||||
|
if (h == NULL)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
|
flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
|
||||||
|
@ -3240,6 +3240,7 @@ sh64_elf64_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
|
|||||||
h = (struct elf_link_hash_entry *) bh;
|
h = (struct elf_link_hash_entry *) bh;
|
||||||
h->def_regular = 1;
|
h->def_regular = 1;
|
||||||
h->type = STT_OBJECT;
|
h->type = STT_OBJECT;
|
||||||
|
elf_hash_table (info)->hplt = h;
|
||||||
|
|
||||||
if (info->shared
|
if (info->shared
|
||||||
&& ! bfd_elf_link_record_dynamic_symbol (info, h))
|
&& ! bfd_elf_link_record_dynamic_symbol (info, h))
|
||||||
|
@ -263,6 +263,7 @@ bfd_boolean
|
|||||||
_bfd_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
|
_bfd_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
|
||||||
{
|
{
|
||||||
flagword flags, pltflags;
|
flagword flags, pltflags;
|
||||||
|
struct elf_link_hash_entry *h;
|
||||||
asection *s;
|
asection *s;
|
||||||
const struct elf_backend_data *bed = get_elf_backend_data (abfd);
|
const struct elf_backend_data *bed = get_elf_backend_data (abfd);
|
||||||
|
|
||||||
@ -288,10 +289,14 @@ _bfd_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
|
|||||||
|
|
||||||
/* Define the symbol _PROCEDURE_LINKAGE_TABLE_ at the start of the
|
/* Define the symbol _PROCEDURE_LINKAGE_TABLE_ at the start of the
|
||||||
.plt section. */
|
.plt section. */
|
||||||
if (bed->want_plt_sym
|
if (bed->want_plt_sym)
|
||||||
&& !_bfd_elf_define_linkage_sym (abfd, info, s,
|
{
|
||||||
"_PROCEDURE_LINKAGE_TABLE_"))
|
h = _bfd_elf_define_linkage_sym (abfd, info, s,
|
||||||
return FALSE;
|
"_PROCEDURE_LINKAGE_TABLE_");
|
||||||
|
elf_hash_table (info)->hplt = h;
|
||||||
|
if (h == NULL)
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
s = bfd_make_section_with_flags (abfd,
|
s = bfd_make_section_with_flags (abfd,
|
||||||
(bed->default_use_rela_p
|
(bed->default_use_rela_p
|
||||||
|
Reference in New Issue
Block a user