Add symbols for global entry stub, and report stats
[deliverable/binutils-gdb.git] / ld / emultempl / ppc64elf.em
index 78faf6894e2e2502d6eb341d3f49ef2222b4dc1e..d45fdacf2da55628e82b5bf197dab64302809978 100644 (file)
@@ -29,6 +29,7 @@ fragment <<EOF
 #include "elf-bfd.h"
 #include "elf64-ppc.h"
 #include "ldlex.h"
+#include "elf/ppc64.h"
 
 static asection *ppc_add_stub_section (const char *, asection *);
 static void ppc_layout_sections_again (void);
@@ -42,7 +43,6 @@ static struct ppc64_elf_params params = { NULL,
 
 /* 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;
@@ -390,7 +390,6 @@ 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;
 
@@ -518,33 +517,33 @@ gld${EMULATION_NAME}_after_allocation (void)
 static void
 gld${EMULATION_NAME}_finish (void)
 {
+  char *msg = NULL;
+  char *line, *endline;
+
   /* 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 (stub_added)
+  if ((elf_elfheader (link_info.output_bfd)->e_flags & EF_PPC64_ABI) == 1)
+    entry_section = ".opd";
+
+  if (params.emit_stub_syms < 0)
+    params.emit_stub_syms = 1;
+  if (stub_file != NULL
+      && !link_info.relocatable
+      && !ppc64_elf_build_stubs (&link_info, config.stats ? &msg : NULL))
+    einfo ("%X%P: can not build stubs: %E\n");
+
+  fflush (stdout);
+  for (line = msg; line != NULL; line = endline)
     {
-      char *msg = NULL;
-      char *line, *endline;
-
-      if (params.emit_stub_syms < 0)
-       params.emit_stub_syms = 1;
-      if (!ppc64_elf_build_stubs (&link_info, config.stats ? &msg : NULL))
-       einfo ("%X%P: can not build stubs: %E\n");
-
-      fflush (stdout);
-      for (line = msg; line != NULL; line = endline)
-       {
-         endline = strchr (line, '\n');
-         if (endline != NULL)
-           *endline++ = '\0';
-         fprintf (stderr, "%s: %s\n", program_name, line);
-       }
-      fflush (stderr);
-      if (msg != NULL)
-       free (msg);
+      endline = strchr (line, '\n');
+      if (endline != NULL)
+       *endline++ = '\0';
+      fprintf (stderr, "%s: %s\n", program_name, line);
     }
+  fflush (stderr);
+  if (msg != NULL)
+    free (msg);
 
   ppc64_elf_restore_symbols (&link_info);
   finish_default ();
This page took 0.024721 seconds and 4 git commands to generate.