* emulparams/elf64ppc.sh (OTHER_GOT_SECTIONS): Don't define.
authorAlan Modra <amodra@gmail.com>
Thu, 10 Jul 2003 00:38:19 +0000 (00:38 +0000)
committerAlan Modra <amodra@gmail.com>
Thu, 10 Jul 2003 00:38:19 +0000 (00:38 +0000)
(GOT): Define.
* emultempl/ppc64elf.em (stub_added): New static var.
(ppc_create_output_section_statements): Call ppc64_elf_init_stub_bfd.
(ppc_add_stub_section): Set stub_added.
(gld${EMULATION_NAME}_finish): Look for .got rather than .toc.  Adjust
ppc64_elf_size_stubs call and test for stubs.
* scripttempl/elf.sc (GOT): Define and use.

ld/ChangeLog
ld/emulparams/elf64ppc.sh
ld/emultempl/ppc64elf.em
ld/scripttempl/elf.sc

index 7dc68c6835c79d6b291734c9e52b669a765e61d9..0a643fa958e6f8b3f5ada0496c25acf6f48593e6 100644 (file)
@@ -1,3 +1,14 @@
+2003-07-10  Alan Modra  <amodra@bigpond.net.au>
+
+       * emulparams/elf64ppc.sh (OTHER_GOT_SECTIONS): Don't define.
+       (GOT): Define.
+       * emultempl/ppc64elf.em (stub_added): New static var.
+       (ppc_create_output_section_statements): Call ppc64_elf_init_stub_bfd.
+       (ppc_add_stub_section): Set stub_added.
+       (gld${EMULATION_NAME}_finish): Look for .got rather than .toc.  Adjust
+       ppc64_elf_size_stubs call and test for stubs.
+       * scripttempl/elf.sc (GOT): Define and use.
+
 2003-07-08  J"orn Rennecke <joern.rennecke@superh.com>
 
        * emultempl/sh64elf.em (sh64_elf_${EMULATION_NAME}_after_allocation):
index 5f812f6c65b217f37cfbd3684b5321fe627cd2b9..e1d9e1d32f1baac98bbc193854be66f30c9c8f06 100644 (file)
@@ -18,8 +18,8 @@ OTHER_BSS_SYMBOLS="
   .tocbss      ${RELOCATING-0}${RELOCATING+ALIGN(8)} : { *(.tocbss)}"
 OTHER_PLT_RELOC_SECTIONS="
   .rela.tocbss ${RELOCATING-0} : { *(.rela.tocbss) }"
-OTHER_GOT_SECTIONS="
-  .toc         ${RELOCATING-0}${RELOCATING+ALIGN(8)} : { *(.toc) }"
+GOT="
+  .got         ${RELOCATING-0}${RELOCATING+ALIGN(8)} : { *(.got .toc) }"
 OTHER_GOT_RELOC_SECTIONS="
   .rela.toc    ${RELOCATING-0} : { *(.rela.toc) }"
 OTHER_READWRITE_SECTIONS="
index dfe7932bc04ab3c6be4fd6dee848273f303146bf..b1b3f9ef07aeabe76318eabaa4bcacb09d42a4b4 100644 (file)
@@ -29,6 +29,7 @@ cat >>e${EMULATION_NAME}.c <<EOF
 
 /* Fake input file for stubs.  */
 static lang_input_statement_type *stub_file;
+static int stub_added = 0;
 
 /* Whether we need to call ppc_layout_sections_again.  */
 static int need_laying_out = 0;
@@ -77,6 +78,7 @@ ppc_create_output_section_statements (void)
     }
 
   ldlang_add_file (stub_file);
+  ppc64_elf_init_stub_bfd (stub_file->the_bfd, &link_info);
 }
 
 static void
@@ -232,6 +234,7 @@ ppc_add_stub_section (const char *stub_sec_name, asection *input_section)
   if (info.add.head == NULL)
     goto err_ret;
 
+  stub_added = 1;
   if (hook_in_stub (&info, &os->children.head))
     return stub_sec;
 
@@ -330,7 +333,7 @@ gld${EMULATION_NAME}_finish (void)
              return;
            }
 
-         toc_section = bfd_get_section_by_name (output_bfd, ".toc");
+         toc_section = bfd_get_section_by_name (output_bfd, ".got");
          if (toc_section != NULL)
            lang_for_each_statement (build_toc_list);
 
@@ -340,7 +343,6 @@ gld${EMULATION_NAME}_finish (void)
 
          /* Call into the BFD backend to do the real work.  */
          if (!ppc64_elf_size_stubs (output_bfd,
-                                    stub_file->the_bfd,
                                     &link_info,
                                     group_size,
                                     &ppc_add_stub_section,
@@ -355,7 +357,7 @@ gld${EMULATION_NAME}_finish (void)
   if (need_laying_out)
     ppc_layout_sections_again ();
 
-  if (stub_file != NULL && stub_file->the_bfd->sections != NULL)
+  if (stub_added)
     {
       char *msg = NULL;
       char *line, *endline;
index 0c1f5c62966d6d4a93ab7ea1a8401eb94a7a8cec..a63ef94a22e7081609c00de6f0d05c54c4a8b83f 100644 (file)
@@ -82,6 +82,7 @@ if test -n "${COMMONPAGESIZE}"; then
 fi
 INTERP=".interp       ${RELOCATING-0} : { *(.interp) }"
 PLT=".plt          ${RELOCATING-0} : { *(.plt) }"
+test -z "$GOT" && GOT=".got          ${RELOCATING-0} : { *(.got.plt) *(.got) }"
 DYNAMIC=".dynamic      ${RELOCATING-0} : { *(.dynamic) }"
 RODATA=".rodata       ${RELOCATING-0} : { *(.rodata${RELOCATING+ .rodata.* .gnu.linkonce.r.*}) }"
 STACKNOTE="/DISCARD/ : { *(.note.GNU-stack) }"
@@ -325,7 +326,7 @@ cat <<EOF
   .jcr          ${RELOCATING-0} : { KEEP (*(.jcr)) }
   ${DATA_PLT+${PLT}}
   ${RELOCATING+${OTHER_GOT_SYMBOLS}}
-  .got          ${RELOCATING-0} : { *(.got.plt) *(.got) }
+  ${GOT}
   ${OTHER_GOT_SECTIONS}
   ${CREATE_SHLIB+${SDATA2}}
   ${CREATE_SHLIB+${SBSS2}}