forked from Imagelibrary/binutils-gdb
* section.c (bfd_get_linker_section): New function.
* elf32-arm.c: When retrieving SEC_LINKER_CREATED sections, use the above throughout rather than bfd_get_section_by_name. Use bfd_make_section_anyway rather than bfd_make_section when creating them. * elf32-bfin.c: Likewise. * elf32-cr16.c: Likewise. * elf32-cris.c: Likewise. * elf32-frv.c: Likewise. * elf32-hppa.c: Likewise. * elf32-i370.c: Likewise. * elf32-i386.c: Likewise. * elf32-lm32.c: Likewise. * elf32-m32c.c: Likewise. * elf32-m32r.c: Likewise. * elf32-m68k.c: Likewise. * elf32-microblaze.c: Likewise. * elf32-ppc.c: Likewise. * elf32-rl78.c: Likewise. * elf32-s390.c: Likewise. * elf32-score.c: Likewise. * elf32-score7.c: Likewise. * elf32-sh.c: Likewise. * elf32-tic6x.c: Likewise. * elf32-tilepro.c: Likewise. * elf32-vax.c: Likewise. * elf32-xstormy16.c: Likewise. * elf32-xtensa.c: Likewise. * elf64-alpha.c: Likewise. * elf64-hppa.c: Likewise. * elf64-ia64-vms.c: Likewise. * elf64-ppc.c: Likewise. * elf64-s390.c: Likewise. * elf64-sh64.c: Likewise. * elf64-sparc.c: Likewise. * elf64-x86-64.c: Likewise. * elfnn-ia64.c: Likewise. * elfxx-mips.c: Likewise. * elfxx-sparc.c: Likewise. * elfxx-tilegx.c: Likewise. * elflink.c: Likewise. * elf-vxworks.c: Likewise. * elf-m10300.c: Likewise. Also make use of htab plt, got and gotplt shortcuts. * bfd-in2.h: Regenerate. * elf32-lm32.c (lm32_elf_check_relocs): Use the correct bfd when calling create_rofixup_section. * elflink.c (bfd_elf_final_link): Simplify test for .dynstr.
This commit is contained in:
@@ -613,24 +613,23 @@ elf_vax_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec,
|
||||
|
||||
if (sgot == NULL)
|
||||
{
|
||||
sgot = bfd_get_section_by_name (dynobj, ".got");
|
||||
sgot = bfd_get_linker_section (dynobj, ".got");
|
||||
BFD_ASSERT (sgot != NULL);
|
||||
}
|
||||
|
||||
if (srelgot == NULL
|
||||
&& (h != NULL || info->shared))
|
||||
{
|
||||
srelgot = bfd_get_section_by_name (dynobj, ".rela.got");
|
||||
srelgot = bfd_get_linker_section (dynobj, ".rela.got");
|
||||
if (srelgot == NULL)
|
||||
{
|
||||
srelgot = bfd_make_section_with_flags (dynobj,
|
||||
".rela.got",
|
||||
(SEC_ALLOC
|
||||
| SEC_LOAD
|
||||
| SEC_HAS_CONTENTS
|
||||
| SEC_IN_MEMORY
|
||||
| SEC_LINKER_CREATED
|
||||
| SEC_READONLY));
|
||||
flagword flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS
|
||||
| SEC_IN_MEMORY | SEC_LINKER_CREATED
|
||||
| SEC_READONLY);
|
||||
|
||||
srelgot = bfd_make_section_anyway_with_flags (dynobj,
|
||||
".rela.got",
|
||||
flags);
|
||||
if (srelgot == NULL
|
||||
|| !bfd_set_section_alignment (dynobj, srelgot, 2))
|
||||
return FALSE;
|
||||
@@ -967,7 +966,7 @@ elf_vax_adjust_dynamic_symbol (info, h)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
s = bfd_get_section_by_name (dynobj, ".plt");
|
||||
s = bfd_get_linker_section (dynobj, ".plt");
|
||||
BFD_ASSERT (s != NULL);
|
||||
|
||||
/* If this is the first .plt entry, make room for the special
|
||||
@@ -997,13 +996,13 @@ elf_vax_adjust_dynamic_symbol (info, h)
|
||||
/* We also need to make an entry in the .got.plt section, which
|
||||
will be placed in the .got section by the linker script. */
|
||||
|
||||
s = bfd_get_section_by_name (dynobj, ".got.plt");
|
||||
s = bfd_get_linker_section (dynobj, ".got.plt");
|
||||
BFD_ASSERT (s != NULL);
|
||||
s->size += 4;
|
||||
|
||||
/* We also need to make an entry in the .rela.plt section. */
|
||||
|
||||
s = bfd_get_section_by_name (dynobj, ".rela.plt");
|
||||
s = bfd_get_linker_section (dynobj, ".rela.plt");
|
||||
BFD_ASSERT (s != NULL);
|
||||
s->size += sizeof (Elf32_External_Rela);
|
||||
|
||||
@@ -1046,7 +1045,7 @@ elf_vax_adjust_dynamic_symbol (info, h)
|
||||
both the dynamic object and the regular object will refer to the
|
||||
same memory location for the variable. */
|
||||
|
||||
s = bfd_get_section_by_name (dynobj, ".dynbss");
|
||||
s = bfd_get_linker_section (dynobj, ".dynbss");
|
||||
BFD_ASSERT (s != NULL);
|
||||
|
||||
/* We must generate a R_VAX_COPY reloc to tell the dynamic linker to
|
||||
@@ -1057,7 +1056,7 @@ elf_vax_adjust_dynamic_symbol (info, h)
|
||||
{
|
||||
asection *srel;
|
||||
|
||||
srel = bfd_get_section_by_name (dynobj, ".rela.bss");
|
||||
srel = bfd_get_linker_section (dynobj, ".rela.bss");
|
||||
BFD_ASSERT (srel != NULL);
|
||||
srel->size += sizeof (Elf32_External_Rela);
|
||||
h->needs_copy = 1;
|
||||
@@ -1085,7 +1084,7 @@ elf_vax_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
|
||||
/* Set the contents of the .interp section to the interpreter. */
|
||||
if (info->executable)
|
||||
{
|
||||
s = bfd_get_section_by_name (dynobj, ".interp");
|
||||
s = bfd_get_linker_section (dynobj, ".interp");
|
||||
BFD_ASSERT (s != NULL);
|
||||
s->size = sizeof ELF_DYNAMIC_INTERPRETER;
|
||||
s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER;
|
||||
@@ -1098,13 +1097,13 @@ elf_vax_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
|
||||
not actually use these entries. Reset the size of .rela.got
|
||||
and .got, which will cause it to get stripped from the output
|
||||
file below. */
|
||||
s = bfd_get_section_by_name (dynobj, ".rela.got");
|
||||
s = bfd_get_linker_section (dynobj, ".rela.got");
|
||||
if (s != NULL)
|
||||
s->size = 0;
|
||||
s = bfd_get_section_by_name (dynobj, ".got.plt");
|
||||
s = bfd_get_linker_section (dynobj, ".got.plt");
|
||||
if (s != NULL)
|
||||
s->size = 0;
|
||||
s = bfd_get_section_by_name (dynobj, ".got");
|
||||
s = bfd_get_linker_section (dynobj, ".got");
|
||||
if (s != NULL)
|
||||
s->size = 0;
|
||||
}
|
||||
@@ -1299,8 +1298,8 @@ elf_vax_instantiate_got_entries (struct elf_link_hash_entry *h, PTR infoptr)
|
||||
if (dynobj == NULL)
|
||||
return TRUE;
|
||||
|
||||
sgot = bfd_get_section_by_name (dynobj, ".got");
|
||||
srelgot = bfd_get_section_by_name (dynobj, ".rela.got");
|
||||
sgot = bfd_get_linker_section (dynobj, ".got");
|
||||
srelgot = bfd_get_linker_section (dynobj, ".rela.got");
|
||||
|
||||
if (!elf_hash_table (info)->dynamic_sections_created
|
||||
|| (info->shared && info->symbolic)
|
||||
@@ -1470,7 +1469,7 @@ elf_vax_relocate_section (bfd *output_bfd,
|
||||
|
||||
if (sgot == NULL)
|
||||
{
|
||||
sgot = bfd_get_section_by_name (dynobj, ".got");
|
||||
sgot = bfd_get_linker_section (dynobj, ".got");
|
||||
BFD_ASSERT (sgot != NULL);
|
||||
}
|
||||
|
||||
@@ -1546,13 +1545,13 @@ elf_vax_relocate_section (bfd *output_bfd,
|
||||
|
||||
if (splt == NULL)
|
||||
{
|
||||
splt = bfd_get_section_by_name (dynobj, ".plt");
|
||||
splt = bfd_get_linker_section (dynobj, ".plt");
|
||||
BFD_ASSERT (splt != NULL);
|
||||
}
|
||||
|
||||
if (sgotplt == NULL)
|
||||
{
|
||||
sgotplt = bfd_get_section_by_name (dynobj, ".got.plt");
|
||||
sgotplt = bfd_get_linker_section (dynobj, ".got.plt");
|
||||
BFD_ASSERT (sgotplt != NULL);
|
||||
}
|
||||
|
||||
@@ -1808,9 +1807,9 @@ elf_vax_finish_dynamic_symbol (bfd *output_bfd, struct bfd_link_info *info,
|
||||
it up. */
|
||||
BFD_ASSERT (h->dynindx != -1);
|
||||
|
||||
splt = bfd_get_section_by_name (dynobj, ".plt");
|
||||
sgot = bfd_get_section_by_name (dynobj, ".got.plt");
|
||||
srela = bfd_get_section_by_name (dynobj, ".rela.plt");
|
||||
splt = bfd_get_linker_section (dynobj, ".plt");
|
||||
sgot = bfd_get_linker_section (dynobj, ".got.plt");
|
||||
srela = bfd_get_linker_section (dynobj, ".rela.plt");
|
||||
BFD_ASSERT (splt != NULL && sgot != NULL && srela != NULL);
|
||||
|
||||
addend = 2 * (h->plt.offset & 1);
|
||||
@@ -1872,8 +1871,8 @@ elf_vax_finish_dynamic_symbol (bfd *output_bfd, struct bfd_link_info *info,
|
||||
|
||||
/* This symbol has an entry in the global offset table. Set it
|
||||
up. */
|
||||
sgot = bfd_get_section_by_name (dynobj, ".got");
|
||||
srela = bfd_get_section_by_name (dynobj, ".rela.got");
|
||||
sgot = bfd_get_linker_section (dynobj, ".got");
|
||||
srela = bfd_get_linker_section (dynobj, ".rela.got");
|
||||
BFD_ASSERT (sgot != NULL && srela != NULL);
|
||||
|
||||
rela.r_offset = (sgot->output_section->vma
|
||||
@@ -1914,8 +1913,7 @@ elf_vax_finish_dynamic_symbol (bfd *output_bfd, struct bfd_link_info *info,
|
||||
&& (h->root.type == bfd_link_hash_defined
|
||||
|| h->root.type == bfd_link_hash_defweak));
|
||||
|
||||
s = bfd_get_section_by_name (h->root.u.def.section->owner,
|
||||
".rela.bss");
|
||||
s = bfd_get_linker_section (dynobj, ".rela.bss");
|
||||
BFD_ASSERT (s != NULL);
|
||||
|
||||
rela.r_offset = (h->root.u.def.value
|
||||
@@ -1946,16 +1944,16 @@ elf_vax_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
|
||||
|
||||
dynobj = elf_hash_table (info)->dynobj;
|
||||
|
||||
sgot = bfd_get_section_by_name (dynobj, ".got.plt");
|
||||
sgot = bfd_get_linker_section (dynobj, ".got.plt");
|
||||
BFD_ASSERT (sgot != NULL);
|
||||
sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
|
||||
sdyn = bfd_get_linker_section (dynobj, ".dynamic");
|
||||
|
||||
if (elf_hash_table (info)->dynamic_sections_created)
|
||||
{
|
||||
asection *splt;
|
||||
Elf32_External_Dyn *dyncon, *dynconend;
|
||||
|
||||
splt = bfd_get_section_by_name (dynobj, ".plt");
|
||||
splt = bfd_get_linker_section (dynobj, ".plt");
|
||||
BFD_ASSERT (splt != NULL && sdyn != NULL);
|
||||
|
||||
dyncon = (Elf32_External_Dyn *) sdyn->contents;
|
||||
|
||||
Reference in New Issue
Block a user