Undo part of 3/26 change and always create got section

This commit is contained in:
Michael Meissner 1997-04-02 21:22:19 +00:00
parent 7a68d1f726
commit acba322ed2
2 changed files with 45 additions and 16 deletions

View File

@ -1,3 +1,9 @@
Wed Apr 2 16:19:41 1997 Mike Meissner <meissner@cygnus.com>
* elf32-ppc.c (ppc_elf_check_relocs): Undo March 26 change and
always create got section so that the _GLOBAL_OFFSET_TABLE_ label
is always created.
Wed Apr 2 10:49:07 1997 Ian Lance Taylor <ian@cygnus.com>
* elf-m10200.c: Rename from elf32-mn10200.c.

View File

@ -1527,14 +1527,11 @@ ppc_elf_adjust_dynamic_symbol (info, h)
s = bfd_get_section_by_name (dynobj, ".dynbss");
BFD_ASSERT (s != NULL);
/* If the symbol is currently defined in the .bss section of the
dynamic object, then it is OK to simply initialize it to zero.
If the symbol is in some other section, we must generate a
R_PPC_COPY reloc to tell the dynamic linker to copy the initial
value out of the dynamic object and into the runtime process
image. We need to remember the offset into the .rela.bss section
we are going to use. */
if ((h->root.u.def.section->flags & SEC_LOAD) != 0)
/* We must generate a R_PPC_COPY reloc to tell the dynamic linker to
copy the initial value out of the dynamic object and into the
runtime process image. We need to remember the offset into the
.rela.bss section we are going to use. */
if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
{
asection *srel;
@ -1844,14 +1841,9 @@ ppc_elf_check_relocs (abfd, info, sec, relocs)
bfd_get_filename (abfd));
#endif
/* Create the linker generated sections all the time so that the special
symbols are created. */
if ((got = elf_linker_section (abfd, LINKER_SECTION_GOT)) == NULL)
{
got = ppc_elf_create_linker_section (abfd, info, LINKER_SECTION_GOT);
if (!got)
ret = false;
}
/* Create the linker generated sections all the time so that the
special symbols are created. The .got section is an exception,
so that we don't waste space allocating it when it is not needed. */
#if 0
if ((plt = elf_linker_section (abfd, LINKER_SECTION_PLT)) == NULL)
@ -1877,6 +1869,13 @@ ppc_elf_check_relocs (abfd, info, sec, relocs)
ret = false;
}
if ((got = elf_linker_section (abfd, LINKER_SECTION_GOT)) == NULL)
{
got = ppc_elf_create_linker_section (abfd, info, LINKER_SECTION_GOT);
if (!got)
ret = false;
}
dynobj = elf_hash_table (info)->dynobj;
symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
sym_hashes = elf_sym_hashes (abfd);
@ -1927,6 +1926,18 @@ ppc_elf_check_relocs (abfd, info, sec, relocs)
break;
}
if (got == NULL
&& (got = elf_linker_section (abfd, LINKER_SECTION_GOT)) == NULL)
{
got = ppc_elf_create_linker_section (abfd, info,
LINKER_SECTION_GOT);
if (!got)
{
ret = false;
break;
}
}
if (got->rel_section == NULL
&& (h != NULL || info->shared)
&& !_bfd_elf_make_linker_section_rela (dynobj, got, 2))
@ -1951,6 +1962,18 @@ ppc_elf_check_relocs (abfd, info, sec, relocs)
break;
}
if (got == NULL
&& (got = elf_linker_section (abfd, LINKER_SECTION_GOT)) == NULL)
{
got = ppc_elf_create_linker_section (abfd, info,
LINKER_SECTION_GOT);
if (!got)
{
ret = false;
break;
}
}
if (got->rel_section == NULL
&& (h != NULL || info->shared)
&& !_bfd_elf_make_linker_section_rela (dynobj, got, 2))