* emultempl/ppc64elf.em (ppc_before_allocation): New function.
authorAlan Modra <amodra@gmail.com>
Tue, 12 Nov 2002 07:56:38 +0000 (07:56 +0000)
committerAlan Modra <amodra@gmail.com>
Tue, 12 Nov 2002 07:56:38 +0000 (07:56 +0000)
(LDEMUL_BEFORE_ALLOCATION): Define.
(gld${EMULATION_NAME}_finish): Run discard_info for relocatable
linking.
* emultemp/hppaelf.em ((gld${EMULATION_NAME}_finish): Likewise.

ld/ChangeLog
ld/emultempl/hppaelf.em
ld/emultempl/ppc64elf.em

index 061266d03128a19db3d47e22a8bddd91d0d73005..1a067b9c60cb60e83d03f0cccfbb6857fff886a8 100644 (file)
@@ -1,3 +1,11 @@
+2002-11-12  Alan Modra  <amodra@bigpond.net.au>
+
+       * emultempl/ppc64elf.em (ppc_before_allocation): New function.
+       (LDEMUL_BEFORE_ALLOCATION): Define.
+       (gld${EMULATION_NAME}_finish): Run discard_info for relocatable
+       linking.
+       * emultemp/hppaelf.em ((gld${EMULATION_NAME}_finish): Likewise.
+
 2002-11-11  Christopher Faylor  <cgf@redhat.com>
 
        * configure.tgt (LIB_PATH): Default to searching w32api directory under
@@ -27,7 +35,7 @@
        * emultempl/pe.em (pe_fixup_stdcalls): Don't fixup fastcall
        symbols to cdecl names or vise-versa.
 
-2002-10-13  Eric Kohl  <ekohl@rz-online.de> 
+2002-10-13  Eric Kohl  <ekohl@rz-online.de>
 
        * pe-dll.c (process_def_file): Handle fastcall symbols when
        generating undecorated aliases.  Don't prefix decorated fastcall
index 490ff070d1758bf3c82bf65b08fd3f95f659e57b..394f28e1668cdb6d0c00ebd7e62e0bd11cb996ba 100644 (file)
@@ -263,13 +263,6 @@ build_section_lists (statement)
 static void
 gld${EMULATION_NAME}_finish ()
 {
-  int ret;
-
-  /* If generating a relocatable output file, then we don't
-     have to examine the relocs.  */
-  if (link_info.relocateable)
-    return;
-
   /* bfd_elf32_discard_info just plays with debugging sections,
      ie. doesn't affect any code, so we can delay resizing the
      sections.  It's likely we'll resize everything in the process of
@@ -277,46 +270,55 @@ gld${EMULATION_NAME}_finish ()
   if (bfd_elf${ELFSIZE}_discard_info (output_bfd, &link_info))
     need_laying_out = 1;
 
-  ret = elf32_hppa_setup_section_lists (output_bfd, &link_info);
-  if (ret != 0)
+  /* If generating a relocatable output file, then we don't
+     have to examine the relocs.  */
+  if (! link_info.relocateable)
     {
-      if (ret < 0)
+      int ret = elf32_hppa_setup_section_lists (output_bfd, &link_info);
+
+      if (ret != 0)
        {
-         einfo ("%X%P: can not size stub section: %E\n");
-         return;
-       }
+         if (ret < 0)
+           {
+             einfo ("%X%P: can not size stub section: %E\n");
+             return;
+           }
 
-      lang_for_each_statement (build_section_lists);
+         lang_for_each_statement (build_section_lists);
 
-      /* Call into the BFD backend to do the real work.  */
-      if (! elf32_hppa_size_stubs (output_bfd,
-                                  stub_file->the_bfd,
-                                  &link_info,
-                                  multi_subspace,
-                                  group_size,
-                                  &hppaelf_add_stub_section,
-                                  &hppaelf_layout_sections_again))
-       {
-         einfo ("%X%P: can not size stub section: %E\n");
-         return;
+         /* Call into the BFD backend to do the real work.  */
+         if (! elf32_hppa_size_stubs (output_bfd,
+                                      stub_file->the_bfd,
+                                      &link_info,
+                                      multi_subspace,
+                                      group_size,
+                                      &hppaelf_add_stub_section,
+                                      &hppaelf_layout_sections_again))
+           {
+             einfo ("%X%P: can not size stub section: %E\n");
+             return;
+           }
        }
     }
 
   if (need_laying_out)
     hppaelf_layout_sections_again ();
 
-  /* Set the global data pointer.  */
-  if (! elf32_hppa_set_gp (output_bfd, &link_info))
+  if (! link_info.relocateable)
     {
-      einfo ("%X%P: can not set gp\n");
-      return;
-    }
+      /* Set the global data pointer.  */
+      if (! elf32_hppa_set_gp (output_bfd, &link_info))
+       {
+         einfo ("%X%P: can not set gp\n");
+         return;
+       }
 
-  /* Now build the linker stubs.  */
-  if (stub_file->the_bfd->sections != NULL)
-    {
-      if (! elf32_hppa_build_stubs (&link_info))
-       einfo ("%X%P: can not build stubs: %E\n");
+      /* Now build the linker stubs.  */
+      if (stub_file->the_bfd->sections != NULL)
+       {
+         if (! elf32_hppa_build_stubs (&link_info))
+           einfo ("%X%P: can not build stubs: %E\n");
+       }
     }
 }
 
index cf6918eeed7edeabb0a50428ff1114fb9343ecf5..b5dd6a2683c3de10e0f3141ca07592e5e5bda97f 100644 (file)
@@ -43,6 +43,7 @@ static int dotsyms = 1;
 
 static void ppc_create_output_section_statements PARAMS ((void));
 static void ppc_after_open PARAMS ((void));
+static void ppc_before_allocation PARAMS ((void));
 static asection *ppc_add_stub_section PARAMS ((const char *, asection *));
 static void ppc_layout_sections_again PARAMS ((void));
 static void gld${EMULATION_NAME}_after_allocation PARAMS ((void));
@@ -84,6 +85,18 @@ ppc_after_open ()
   gld${EMULATION_NAME}_after_open ();
 }
 
+static void
+ppc_before_allocation ()
+{
+  if (!ppc64_elf_edit_opd (output_bfd, &link_info))
+    {
+      einfo ("%X%P: can not edit opd %E\n");
+      return;
+    }
+
+  gld${EMULATION_NAME}_before_allocation ();
+}
+
 struct hook_stub_info
 {
   lang_statement_list_type add;
@@ -265,18 +278,11 @@ build_section_lists (statement)
 static void
 gld${EMULATION_NAME}_finish ()
 {
-  int ret;
-
   /* e_entry on PowerPC64 points to the function descriptor for
      _start.  If _start is missing, default to the first function
      descriptor in the .opd section.  */
   entry_section = ".opd";
 
-  /* If generating a relocatable output file, then we don't have any
-     stubs.  */
-  if (link_info.relocateable)
-    return;
-
   /* bfd_elf64_discard_info just plays with debugging sections,
      ie. doesn't affect any code, so we can delay resizing the
      sections.  It's likely we'll resize everything in the process of
@@ -284,27 +290,32 @@ gld${EMULATION_NAME}_finish ()
   if (bfd_elf${ELFSIZE}_discard_info (output_bfd, &link_info))
     need_laying_out = 1;
 
-  ret = ppc64_elf_setup_section_lists (output_bfd, &link_info);
-  if (ret != 0)
+  /* If generating a relocatable output file, then we don't have any
+     stubs.  */
+  if (!link_info.relocateable)
     {
-      if (ret < 0)
+      int ret = ppc64_elf_setup_section_lists (output_bfd, &link_info);
+      if (ret != 0)
        {
-         einfo ("%X%P: can not size stub section: %E\n");
-         return;
-       }
+         if (ret < 0)
+           {
+             einfo ("%X%P: can not size stub section: %E\n");
+             return;
+           }
 
-      lang_for_each_statement (build_section_lists);
+         lang_for_each_statement (build_section_lists);
 
-      /* 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,
-                                &ppc_layout_sections_again))
-       {
-         einfo ("%X%P: can not size stub section: %E\n");
-         return;
+         /* 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,
+                                    &ppc_layout_sections_again))
+           {
+             einfo ("%X%P: can not size stub section: %E\n");
+             return;
+           }
        }
     }
 
@@ -486,6 +497,7 @@ PARSE_AND_LIST_ARGS_CASES='
 # Put these extra ppc64elf routines in ld_${EMULATION_NAME}_emulation
 #
 LDEMUL_AFTER_OPEN=ppc_after_open
+LDEMUL_BEFORE_ALLOCATION=ppc_before_allocation
 LDEMUL_AFTER_ALLOCATION=gld${EMULATION_NAME}_after_allocation
 LDEMUL_FINISH=gld${EMULATION_NAME}_finish
 LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS=ppc_create_output_section_statements