bfd, include, ld, binutils, libctf: CTF should use the dynstr/sym
[binutils-gdb.git] / ld / emultempl / aix.em
index 4965ad2f2f48ce7ce03f1f3a4bf18028bee02b9e..df7471bc4907949bf32b7c2af4471ad6d9e64273 100644 (file)
@@ -9,7 +9,7 @@ fragment <<EOF
 /* This file is is generated by a shell script.  DO NOT EDIT! */
 
 /* AIX emulation code for ${EMULATION_NAME}
-   Copyright (C) 1991-2017 Free Software Foundation, Inc.
+   Copyright (C) 1991-2020 Free Software Foundation, Inc.
    Written by Steve Chamberlain <sac@cygnus.com>
    AIX support by Ian Lance Taylor <ian@cygnus.com>
    AIX 64 bit support by Tom Rix <trix@redhat.com>
@@ -40,6 +40,7 @@ fragment <<EOF
 #include "getopt.h"
 #include "obstack.h"
 #include "bfdlink.h"
+#include "ctf-api.h"
 
 #include "ld.h"
 #include "ldmain.h"
@@ -55,6 +56,7 @@ fragment <<EOF
 #include "coff/xcoff.h"
 #include "libcoff.h"
 #include "libxcoff.h"
+#include "xcofflink.h"
 
 static void gld${EMULATION_NAME}_read_file (const char *, bfd_boolean);
 static void gld${EMULATION_NAME}_free (void *);
@@ -470,8 +472,8 @@ gld${EMULATION_NAME}_handle_option (int optc)
       break;
 
     case OPTION_ERNOTOK:
-      link_info.unresolved_syms_in_objects = RM_GENERATE_ERROR;
-      link_info.unresolved_syms_in_shared_libs = RM_GENERATE_ERROR;
+      link_info.unresolved_syms_in_objects = RM_DIAGNOSE;
+      link_info.unresolved_syms_in_shared_libs = RM_DIAGNOSE;
       break;
 
     case OPTION_EROK:
@@ -749,9 +751,9 @@ gld${EMULATION_NAME}_before_allocation (void)
 
       h = bfd_link_hash_lookup (link_info.hash, el->name, FALSE, FALSE, FALSE);
       if (h == NULL)
-       einfo (_("%P%F: bfd_link_hash_lookup of export symbol failed: %E\n"));
+       einfo (_("%F%P: bfd_link_hash_lookup of export symbol failed: %E\n"));
       if (!bfd_xcoff_export_symbol (link_info.output_bfd, &link_info, h))
-       einfo (_("%P%F: bfd_xcoff_export_symbol failed: %E\n"));
+       einfo (_("%F%P: bfd_xcoff_export_symbol failed: %E\n"));
     }
 
   /* Track down all relocations called for by the linker script (these
@@ -835,7 +837,7 @@ gld${EMULATION_NAME}_before_allocation (void)
        maxstack, maxdata, gc && !unix_ld ? TRUE : FALSE,
        modtype, textro ? TRUE : FALSE, flags, special_sections,
        rtld ? TRUE : FALSE))
-    einfo (_("%P%F: failed to set dynamic section sizes: %E\n"));
+    einfo (_("%F%P: failed to set dynamic section sizes: %E\n"));
 
   /* Look through the special sections, and put them in the right
      place in the link ordering.  This is especially magic.  */
@@ -857,7 +859,7 @@ gld${EMULATION_NAME}_before_allocation (void)
       is = NULL;
       os = lang_output_section_get (sec->output_section);
       if (os == NULL)
-       einfo (_("%P%F: can't find output section %s\n"),
+       einfo (_("%F%P: can't find output section %s\n"),
               sec->output_section->name);
 
       for (pls = &os->children.head; *pls != NULL; pls = &(*pls)->header.next)
@@ -894,8 +896,8 @@ gld${EMULATION_NAME}_before_allocation (void)
 
       if (is == NULL)
        {
-         einfo (_("%P%F: can't find %s in output section\n"),
-                bfd_get_section_name (sec->owner, sec));
+         einfo (_("%F%P: can't find %s in output section\n"),
+                bfd_section_name (sec));
        }
 
       /* Now figure out where the section should go.  */
@@ -945,9 +947,8 @@ gld${EMULATION_NAME}_before_allocation (void)
       else
        {
          is->header.next = NULL;
-         lang_statement_append (&os->children,
-                                (lang_statement_union_type *) is,
-                                &is->header.next);
+         *os->children.tail = (lang_statement_union_type *) is;
+         os->children.tail = &is->header.next;
        }
     }
 
@@ -1109,7 +1110,7 @@ gld${EMULATION_NAME}_read_file (const char *filename, bfd_boolean import)
   if (f == NULL)
     {
       bfd_set_error (bfd_error_system_call);
-      einfo ("%F%s: %E\n", filename);
+      einfo ("%F%P: %s: %E\n", filename);
       return;
     }
 
@@ -1171,7 +1172,7 @@ gld${EMULATION_NAME}_read_file (const char *filename, bfd_boolean import)
              obstack_free (o, obstack_base (o));
            }
          else if (*s == '(')
-           einfo (_("%F%s%d: #! ([member]) is not supported "
+           einfo (_("%F%P:%s:%d: #! ([member]) is not supported "
                     "in import files\n"),
                   filename, lineno);
          else
@@ -1188,7 +1189,7 @@ gld${EMULATION_NAME}_read_file (const char *filename, bfd_boolean import)
              *s = '\0';
              if (!bfd_xcoff_split_import_path (link_info.output_bfd,
                                                start, &imppath, &impfile))
-               einfo (_("%F%P: Could not parse import path: %E\n"));
+               einfo (_("%F%P: could not parse import path: %E\n"));
              while (ISSPACE (cs))
                {
                  ++s;
@@ -1198,7 +1199,7 @@ gld${EMULATION_NAME}_read_file (const char *filename, bfd_boolean import)
                {
                  impmember = "";
                  if (cs != '\0')
-                   einfo (_("%s:%d: warning: syntax error in import file\n"),
+                   einfo (_("%P:%s:%d: warning: syntax error in import file\n"),
                           filename, lineno);
                }
              else
@@ -1210,7 +1211,7 @@ gld${EMULATION_NAME}_read_file (const char *filename, bfd_boolean import)
                  if (*s == ')')
                    *s = '\0';
                  else
-                   einfo (_("%s:%d: warning: syntax error in import file\n"),
+                   einfo (_("%P:%s:%d: warning: syntax error in import file\n"),
                           filename, lineno);
                }
            }
@@ -1245,7 +1246,7 @@ gld${EMULATION_NAME}_read_file (const char *filename, bfd_boolean import)
                  while (ISSPACE (*se))
                    ++se;
                  if (*se != '\0')
-                   einfo (_("%s%d: warning: syntax error in "
+                   einfo (_("%P:%s%d: warning: syntax error in "
                             "import/export file\n"),
                           filename, lineno);
                }
@@ -1263,7 +1264,7 @@ gld${EMULATION_NAME}_read_file (const char *filename, bfd_boolean import)
                      address = bfd_scan_vma (s, &end, 0);
                      if (*end != '\0')
                        {
-                         einfo (_("%s:%d: warning: syntax error in "
+                         einfo (_("%P:%s:%d: warning: syntax error in "
                                   "import/export file\n"),
                                 filename, lineno);
 
@@ -1298,7 +1299,7 @@ gld${EMULATION_NAME}_read_file (const char *filename, bfd_boolean import)
                                                &link_info, h,
                                                address, imppath, impfile,
                                                impmember, syscall_flag))
-                   einfo (_("%X%s:%d: failed to import symbol %s: %E\n"),
+                   einfo (_("%X%P:%s:%d: failed to import symbol %s: %E\n"),
                           filename, lineno, symname);
                }
            }
@@ -1308,7 +1309,7 @@ gld${EMULATION_NAME}_read_file (const char *filename, bfd_boolean import)
 
   if (obstack_object_size (o) > 0)
     {
-      einfo (_("%s:%d: warning: ignoring unterminated last line\n"),
+      einfo (_("%P:%s:%d: warning: ignoring unterminated last line\n"),
             filename, lineno);
       obstack_free (o, obstack_base (o));
     }
@@ -1363,6 +1364,7 @@ gld${EMULATION_NAME}_find_exp_assignment (etree_type *exp)
   switch (exp->type.node_class)
     {
     case etree_provide:
+    case etree_provided:
       h = bfd_link_hash_lookup (link_info.hash, exp->assign.dst,
                                FALSE, FALSE, FALSE);
       if (h == NULL)
@@ -1374,7 +1376,7 @@ gld${EMULATION_NAME}_find_exp_assignment (etree_type *exp)
          if (!bfd_xcoff_record_link_assignment (link_info.output_bfd,
                                                 &link_info,
                                                 exp->assign.dst))
-           einfo (_("%P%F: failed to record assignment to %s: %E\n"),
+           einfo (_("%F%P: failed to record assignment to %s: %E\n"),
                   exp->assign.dst);
        }
       gld${EMULATION_NAME}_find_exp_assignment (exp->assign.src);
@@ -1472,7 +1474,7 @@ gld${EMULATION_NAME}_create_output_section_statements (void)
                                  bfd_get_arch (link_info.output_bfd),
                                  bfd_get_mach (link_info.output_bfd)))
        {
-         einfo (_("%X%P: can not create BFD %E\n"));
+         einfo (_("%F%P: can not create BFD: %E\n"));
          return;
        }
 
@@ -1482,7 +1484,7 @@ gld${EMULATION_NAME}_create_output_section_statements (void)
                                            link_info.fini_function,
                                            rtld))
        {
-         einfo (_("%X%P: can not create BFD %E\n"));
+         einfo (_("%F%P: can not create BFD: %E\n"));
          return;
        }
 
@@ -1533,6 +1535,36 @@ gld${EMULATION_NAME}_open_dynamic_archive (const char *arch,
   return TRUE;
 }
 
+static bfd_boolean
+gld${EMULATION_NAME}_print_symbol (struct bfd_link_hash_entry *hash_entry,
+                                  void *ptr)
+{
+  asection *sec = (asection *) ptr;
+
+  if ((hash_entry->type == bfd_link_hash_defined
+       || hash_entry->type == bfd_link_hash_defweak)
+      && sec == hash_entry->u.def.section)
+    {
+      int i;
+      struct xcoff_link_hash_entry *h;
+
+      for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
+       print_space ();
+      minfo ("0x%V   ",
+            (hash_entry->u.def.value
+             + hash_entry->u.def.section->output_offset
+             + hash_entry->u.def.section->output_section->vma));
+
+      /* Flag symbol if it has been garbage collected.  */
+      h = (struct xcoff_link_hash_entry *) hash_entry;
+      if ((h != NULL) && !(h->flags & XCOFF_MARK))
+       minfo (" -->gc");
+      minfo ("             %pT\n", hash_entry->root.string);
+    }
+
+  return TRUE;
+}
+
 struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation = {
   gld${EMULATION_NAME}_before_parse,
   syslib_default,
@@ -1540,6 +1572,7 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation = {
   after_parse_default,
   gld${EMULATION_NAME}_after_open,
   after_check_relocs_default,
+  before_place_orphans_default,
   after_allocation_default,
   gld${EMULATION_NAME}_set_output_arch,
   gld${EMULATION_NAME}_choose_target,
@@ -1560,6 +1593,10 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation = {
   NULL,                                /* recognized_file */
   NULL,                                /* find potential_libraries */
   NULL,                                /* new_vers_pattern */
-  NULL                         /* extra_map_file_text */
+  NULL,                                /* extra_map_file_text */
+  ${LDEMUL_EMIT_CTF_EARLY-NULL},
+  ${LDEMUL_ACQUIRE_STRINGS_FOR_CTF-NULL},
+  ${LDEMUL_NEW_DYNSYM_FOR_CTF-NULL},
+  gld${EMULATION_NAME}_print_symbol
 };
 EOF