* bsd-uthread.c (bsd_uthread_wait): Don't try to fetch thread IDs
[deliverable/binutils-gdb.git] / ld / emultempl / aix.em
index 50bfe64a25b54b15c9aec1f58ddb61650c5cf192..c2617f2ce412590730fb5db0f470d452d92c1746 100644 (file)
@@ -9,7 +9,8 @@ cat >e${EMULATION_NAME}.c <<EOF
 /* This file is is generated by a shell script.  DO NOT EDIT! */
 
 /* AIX emulation code for ${EMULATION_NAME}
-   Copyright 1991, 1993, 1995, 1996, 1997, 1998, 2000, 2001
+   Copyright 1991, 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+   2003, 2004, 2005, 2006, 2007
    Free Software Foundation, Inc.
    Written by Steve Chamberlain <sac@cygnus.com>
    AIX support by Ian Lance Taylor <ian@cygnus.com>
@@ -29,12 +30,12 @@ GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
 
 #define TARGET_IS_${EMULATION_NAME}
 
-#include "bfd.h"
 #include "sysdep.h"
+#include "bfd.h"
 #include "libiberty.h"
 #include "safe-ctype.h"
 #include "getopt.h"
@@ -49,32 +50,18 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 #include "ldfile.h"
 #include "ldemul.h"
 #include "ldctor.h"
-#include "ldgram.h"
+#include <ldgram.h>
 
 #include "coff/internal.h"
 #include "coff/xcoff.h"
 #include "libcoff.h"
 #include "libxcoff.h"
 
-static void gld${EMULATION_NAME}_before_parse PARAMS ((void));
-static int gld${EMULATION_NAME}_parse_args PARAMS ((int, char **));
-static void gld${EMULATION_NAME}_after_open PARAMS ((void));
-static char *gld${EMULATION_NAME}_choose_target PARAMS ((int, char **));
-static void gld${EMULATION_NAME}_before_allocation PARAMS ((void));
-static void gld${EMULATION_NAME}_read_file PARAMS ((const char *, boolean));
-static void gld${EMULATION_NAME}_free PARAMS ((PTR));
-static void gld${EMULATION_NAME}_find_relocs 
-PARAMS ((lang_statement_union_type *));
-static void gld${EMULATION_NAME}_find_exp_assignment PARAMS ((etree_type *));
-static char *gld${EMULATION_NAME}_get_script PARAMS ((int *isfile));
-static boolean gld${EMULATION_NAME}_unrecognized_file
-  PARAMS ((lang_input_statement_type *));
-static void gld${EMULATION_NAME}_create_output_section_statements 
-  PARAMS ((void));
-static void gld${EMULATION_NAME}_set_output_arch PARAMS ((void));
-
-static int is_syscall PARAMS ((char *, unsigned int *));
-static int change_symbol_mode PARAMS ((char *));
+static void gld${EMULATION_NAME}_read_file (const char *, bfd_boolean);
+static void gld${EMULATION_NAME}_free (void *);
+static void gld${EMULATION_NAME}_find_relocs (lang_statement_union_type *);
+static void gld${EMULATION_NAME}_find_exp_assignment (etree_type *);
+
 
 /* The file alignment required for each section.  */
 static unsigned long file_align;
@@ -135,7 +122,7 @@ static unsigned int syscall_mask = 0x77;
 /* fake file for -binitfini support */
 static lang_input_statement_type *initfini_file;
 
-/* Whether to do run time linking 
+/* Whether to do run time linking
    -brtl enables, -bnortl and -bnortllib disable. */
 static int rtld;
 
@@ -145,14 +132,15 @@ static char *command_line_blibpath = NULL;
 /* This routine is called before anything else is done.  */
 
 static void
-gld${EMULATION_NAME}_before_parse ()
+gld${EMULATION_NAME}_before_parse (void)
 {
+  ldfile_set_output_arch ("${OUTPUT_ARCH}", bfd_arch_`echo ${ARCH} | sed -e 's/:.*//'`);
 
-  config.has_shared = true;
+  config.has_shared = TRUE;
 
   /* The link_info.[init|fini]_functions are initialized in ld/lexsup.c.
      Override them here so we can use the link_info.init_function as a
-     state flag that lets the backend know that -binitfini has been done.  */ 
+     state flag that lets the backend know that -binitfini has been done.  */
 
   link_info.init_function = NULL;
   link_info.fini_function = NULL;
@@ -160,20 +148,7 @@ gld${EMULATION_NAME}_before_parse ()
 
 /* Handle AIX specific options.  */
 
-static int
-gld${EMULATION_NAME}_parse_args (argc, argv)
-     int argc;
-     char **argv;
-{
-  int prevoptind = optind;
-  int prevopterr = opterr;
-  int indx;
-  int longind;
-  int optc;
-  bfd_signed_vma val;
-  char *end;
-
-  enum 
+enum
   {
     OPTION_IGNORE = 300,
     OPTION_AUTOIMP,
@@ -198,16 +173,22 @@ gld${EMULATION_NAME}_parse_args (argc, argv)
     OPTION_NOLIBPATH,
   };
 
+static void
+gld${EMULATION_NAME}_add_options
+  (int ns, char **shortopts, int nl, struct option **longopts,
+   int nrl ATTRIBUTE_UNUSED, struct option **really_longopts ATTRIBUTE_UNUSED)
+{
+  static const char xtra_short[] = "D:H:KT:z";
+  static const struct option xtra_long[] = {
   /* -binitfini has special handling in the linker backend.  The native linker
      uses the arguemnts to generate a table of init and fini functions for
      the executable.  The important use for this option is to support aix 4.2+
      c++ constructors and destructors.  This is tied into gcc via collect2.c.
-     
+
      The function table is accessed by the runtime linker/loader by checking if
      the first symbol in the loader symbol table is __rtinit.  The gnu linker
      generates this symbol and makes it the first loader symbol.  */
 
-  static const struct option longopts[] = {
     {"basis", no_argument, NULL, OPTION_IGNORE},
     {"bautoimp", no_argument, NULL, OPTION_AUTOIMP},
     {"bcomprld", no_argument, NULL, OPTION_IGNORE},
@@ -268,6 +249,18 @@ gld${EMULATION_NAME}_parse_args (argc, argv)
      -bnotypchk, -bnox, -bquiet, -bR, -brename, -breorder, -btypchk,
      -bx, -bX, -bxref.  */
 
+  *shortopts = (char *) xrealloc (*shortopts, ns + sizeof (xtra_short));
+  memcpy (*shortopts + ns, &xtra_short, sizeof (xtra_short));
+  *longopts = xrealloc (*longopts,
+                       nl * sizeof (struct option) + sizeof (xtra_long));
+  memcpy (*longopts + nl, &xtra_long, sizeof (xtra_long));
+}
+
+static bfd_boolean
+gld${EMULATION_NAME}_parse_args (int argc, char **argv)
+{
+  int indx;
+
   /* If the current option starts with -b, change the first : to an =.
      The AIX linker uses : to separate the option from the argument;
      changing it to = lets us treat it as a getopt option.  */
@@ -275,7 +268,7 @@ gld${EMULATION_NAME}_parse_args (argc, argv)
   if (indx == 0)
     indx = 1;
 
-  if (indx < argc && strncmp (argv[indx], "-b", 2) == 0)
+  if (indx < argc && CONST_STRNEQ (argv[indx], "-b"))
     {
       char *s;
 
@@ -288,37 +281,34 @@ gld${EMULATION_NAME}_parse_args (argc, argv)
            }
        }
     }
+  return FALSE;
+}
 
-
-  /* We add s and u so to the short options list so that -s and -u on
-     the command line do not match -static and -unix.  */
-
-  opterr = 0;
-  optc = getopt_long_only (argc, argv, "-D:H:KT:zsu", longopts, &longind);
-  opterr = prevopterr;
+static bfd_boolean
+gld${EMULATION_NAME}_handle_option (int optc)
+{
+  bfd_signed_vma val;
+  const char *end;
 
   switch (optc)
     {
-    case 's':
-    case 'u':
     default:
-      optind = prevoptind;
-      return 0;
+      return FALSE;
 
     case 0:
       /* Long option which just sets a flag.  */
       break;
 
     case 'D':
-      val = strtoll (optarg, &end, 0);
+      val = bfd_scan_vma (optarg, &end, 0);
       if (*end != '\0')
        einfo ("%P: warning: ignoring invalid -D number %s\n", optarg);
       else if (val != -1)
-       lang_section_start (".data", exp_intop (val));
+       lang_section_start (".data", exp_intop (val), NULL);
       break;
 
     case 'H':
-      val = strtoul (optarg, &end, 0);
+      val = bfd_scan_vma (optarg, &end, 0);
       if (*end != '\0' || (val & (val - 1)) != 0)
        einfo ("%P: warning: ignoring invalid -H number %s\n", optarg);
       else
@@ -333,16 +323,13 @@ gld${EMULATION_NAME}_parse_args (argc, argv)
 
     case 'T':
       /* On AIX this is the same as GNU ld -Ttext.  When we see -T
-         number, we assume the AIX option is intended.  Otherwise, we
-         assume the usual GNU ld -T option is intended.  We can't just
-         ignore the AIX option, because gcc passes it to the linker.  */
-      val = strtoull (optarg, &end, 0);
+        number, we assume the AIX option is intended.  Otherwise, we
+        assume the usual GNU ld -T option is intended.  We can't just
+        ignore the AIX option, because gcc passes it to the linker.  */
+      val = bfd_scan_vma (optarg, &end, 0);
       if (*end != '\0')
-       {
-         optind = prevoptind;
-         return 0;
-       }
-      lang_section_start (".text", exp_intop (val));
+       return FALSE;
+      lang_section_start (".text", exp_intop (val), NULL);
       break;
 
     case OPTION_IGNORE:
@@ -384,21 +371,21 @@ gld${EMULATION_NAME}_parse_args (argc, argv)
          link_info.fini_function = f;
       }
       break;
-      
+
     case OPTION_AUTOIMP:
-      link_info.static_link = false;
+      link_info.static_link = FALSE;
       break;
 
     case OPTION_ERNOTOK:
-      force_make_executable = false;
+      force_make_executable = FALSE;
       break;
 
     case OPTION_EROK:
-      force_make_executable = true;
+      force_make_executable = TRUE;
       break;
 
     case OPTION_EXPORT:
-      gld${EMULATION_NAME}_read_file (optarg, false);
+      gld${EMULATION_NAME}_read_file (optarg, FALSE);
       break;
 
     case OPTION_IMPORT:
@@ -421,7 +408,7 @@ gld${EMULATION_NAME}_parse_args (argc, argv)
       break;
 
     case OPTION_MAXDATA:
-      val = strtoull (optarg, &end, 0);
+      val = bfd_scan_vma (optarg, &end, 0);
       if (*end != '\0')
        einfo ("%P: warning: ignoring invalid -bmaxdata number %s\n", optarg);
       else
@@ -429,9 +416,9 @@ gld${EMULATION_NAME}_parse_args (argc, argv)
       break;
 
     case OPTION_MAXSTACK:
-      val = strtoull (optarg, &end, 0);
+      val = bfd_scan_vma (optarg, &end, 0);
       if (*end != '\0')
-       einfo ("%P: warning: ignoring invalid -bmaxstack number %s\n", 
+       einfo ("%P: warning: ignoring invalid -bmaxstack number %s\n",
               optarg);
       else
        maxstack = val;
@@ -440,7 +427,7 @@ gld${EMULATION_NAME}_parse_args (argc, argv)
     case OPTION_MODTYPE:
       if (*optarg == 'S')
        {
-         link_info.shared = true;
+         link_info.shared = TRUE;
          ++optarg;
        }
       if (*optarg == '\0' || optarg[1] == '\0')
@@ -450,19 +437,19 @@ gld${EMULATION_NAME}_parse_args (argc, argv)
       break;
 
     case OPTION_NOAUTOIMP:
-      link_info.static_link = true;
+      link_info.static_link = TRUE;
       break;
 
     case OPTION_NOSTRCMPCT:
-      link_info.traditional_format = true;
+      link_info.traditional_format = TRUE;
       break;
 
     case OPTION_PD:
       /* This sets the page that the .data section is supposed to
-         start on.  The offset within the page should still be the
-         offset within the file, so we need to build an appropriate
-         expression.  */
-      val = strtoull (optarg, &end, 0);
+        start on.  The offset within the page should still be the
+        offset within the file, so we need to build an appropriate
+        expression.  */
+      val = bfd_scan_vma (optarg, &end, 0);
       if (*end != '\0')
        einfo ("%P: warning: ignoring invalid -pD number %s\n", optarg);
       else
@@ -477,15 +464,15 @@ gld${EMULATION_NAME}_parse_args (argc, argv)
          t = exp_binop ('&',
                         exp_binop ('+', t, exp_intop (31)),
                         exp_intop (~(bfd_vma) 31));
-         lang_section_start (".data", t);
+         lang_section_start (".data", t, NULL);
        }
       break;
 
     case OPTION_PT:
       /* This set the page that the .text section is supposed to start
-         on.  The offset within the page should still be the offset
-         within the file.  */
-      val = strtoull (optarg, &end, 0);
+        on.  The offset within the page should still be the offset
+        within the file.  */
+      val = bfd_scan_vma (optarg, &end, 0);
       if (*end != '\0')
        einfo ("%P: warning: ignoring invalid -pT number %s\n", optarg);
       else
@@ -498,16 +485,16 @@ gld${EMULATION_NAME}_parse_args (argc, argv)
          t = exp_binop ('&',
                         exp_binop ('+', t, exp_intop (31)),
                         exp_intop (~(bfd_vma) 31));
-         lang_section_start (".text", t);
+         lang_section_start (".text", t, NULL);
        }
       break;
 
     case OPTION_STRCMPCT:
-      link_info.traditional_format = false;
+      link_info.traditional_format = FALSE;
       break;
 
     case OPTION_UNIX:
-      unix_ld = true;
+      unix_ld = TRUE;
       break;
 
     case OPTION_32:
@@ -532,25 +519,24 @@ gld${EMULATION_NAME}_parse_args (argc, argv)
 
     }
 
-  return 1;
+  return TRUE;
 }
 
 /* This is called when an input file can not be recognized as a BFD
    object or an archive.  If the file starts with #!, we must treat it
    as an import file.  This is for AIX compatibility.  */
 
-static boolean
-gld${EMULATION_NAME}_unrecognized_file (entry)
-     lang_input_statement_type *entry;
+static bfd_boolean
+gld${EMULATION_NAME}_unrecognized_file (lang_input_statement_type *entry)
 {
   FILE *e;
-  boolean ret;
+  bfd_boolean ret;
 
   e = fopen (entry->filename, FOPEN_RT);
   if (e == NULL)
-    return false;
+    return FALSE;
 
-  ret = false;
+  ret = FALSE;
 
   if (getc (e) == '#' && getc (e) == '!')
     {
@@ -565,8 +551,8 @@ gld${EMULATION_NAME}_unrecognized_file (entry)
        flpp = &(*flpp)->next;
       *flpp = n;
 
-      ret = true;
-      entry->loaded = true;
+      ret = TRUE;
+      entry->loaded = TRUE;
     }
 
   fclose (e);
@@ -577,21 +563,21 @@ gld${EMULATION_NAME}_unrecognized_file (entry)
 /* This is called after the input files have been opened.  */
 
 static void
-gld${EMULATION_NAME}_after_open ()
+gld${EMULATION_NAME}_after_open (void)
 {
-  boolean r;
+  bfd_boolean r;
   struct set_info *p;
 
   /* Call ldctor_build_sets, after pretending that this is a
-     relocateable link.  We do this because AIX requires relocation
+     relocatable link.  We do this because AIX requires relocation
      entries for all references to symbols, even in a final
      executable.  Of course, we only want to do this if we are
      producing an XCOFF output file.  */
-  r = link_info.relocateable;
+  r = link_info.relocatable;
   if (strstr (bfd_get_target (output_bfd), "xcoff") != NULL)
-    link_info.relocateable = true;
+    link_info.relocatable = TRUE;
   ldctor_build_sets ();
-  link_info.relocateable = r;
+  link_info.relocatable = r;
 
   /* For each set, record the size, so that the XCOFF backend can
      output the correct csect length.  */
@@ -600,8 +586,8 @@ gld${EMULATION_NAME}_after_open ()
       bfd_size_type size;
 
       /* If the symbol is defined, we may have been invoked from
-         collect, and the sets may already have been built, so we do
-         not do anything.  */
+        collect, and the sets may already have been built, so we do
+        not do anything.  */
       if (p->h->type == bfd_link_hash_defined
          || p->h->type == bfd_link_hash_defweak)
        continue;
@@ -622,7 +608,7 @@ gld${EMULATION_NAME}_after_open ()
    sections, but before any sizes or addresses have been set.  */
 
 static void
-gld${EMULATION_NAME}_before_allocation ()
+gld${EMULATION_NAME}_before_allocation (void)
 {
   struct filelist *fl;
   struct export_symbol_list *el;
@@ -632,12 +618,12 @@ gld${EMULATION_NAME}_before_allocation ()
 
   /* Handle the import and export files, if any.  */
   for (fl = import_files; fl != NULL; fl = fl->next)
-    gld${EMULATION_NAME}_read_file (fl->name, true);
+    gld${EMULATION_NAME}_read_file (fl->name, TRUE);
   for (el = export_symbols; el != NULL; el = el->next)
     {
       struct bfd_link_hash_entry *h;
 
-      h = bfd_link_hash_lookup (link_info.hash, el->name, false, false, false);
+      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");
       if (!bfd_xcoff_export_symbol (output_bfd, &link_info, h))
@@ -651,9 +637,9 @@ gld${EMULATION_NAME}_before_allocation ()
   lang_for_each_statement (gld${EMULATION_NAME}_find_relocs);
 
   /* Precedence of LIBPATH
-     -blibpath:  native support always first
-     -rpath:     gnu extension
-     -L          build from command line -L's */
+     -blibpath:         native support always first
+     -rpath:    gnu extension
+     -L                 build from command line -L's */
   if (command_line_blibpath != NULL)
     libpath = command_line_blibpath;
   else if (command_line.rpath != NULL)
@@ -665,27 +651,61 @@ gld${EMULATION_NAME}_before_allocation ()
       size_t len;
       search_dirs_type *search;
 
-      len = strlen (search_head->name);
-      libpath = xmalloc (len + 1);
-      strcpy (libpath, search_head->name);
-      for (search = search_head->next; search != NULL; search = search->next)
+      /* PR ld/4023: Strip sysroot prefix from any paths
+        being inserted into the output binary's DT_RPATH.  */
+      if (ld_sysroot != NULL
+         && * ld_sysroot != 0)
        {
-         size_t nlen;
+         const char * name = search_head->name;
+         size_t ld_sysroot_len = strlen (ld_sysroot);
+
+         if (strncmp (name, ld_sysroot, ld_sysroot_len) == 0)
+           name += ld_sysroot_len;
+
+         len = strlen (name);
+         libpath = xmalloc (len + 1);
+         strcpy (libpath, name);
 
-         nlen = strlen (search->name);
-         libpath = xrealloc (libpath, len + nlen + 2);
-         libpath[len] = ':';
-         strcpy (libpath + len + 1, search->name);
-         len += nlen + 1;
+         for (search = search_head->next; search != NULL; search = search->next)
+           {
+             size_t nlen;
+
+             name = search->name;
+             if (strncmp (name, ld_sysroot, ld_sysroot_len) == 0)
+               name += ld_sysroot_len;
+
+             nlen = strlen (name);
+             libpath = xrealloc (libpath, len + nlen + 2);
+             libpath[len] = ':';
+             strcpy (libpath + len + 1, name);
+             len += nlen + 1;
+           }
+       }
+      else
+       {
+         len = strlen (search_head->name);
+         libpath = xmalloc (len + 1);
+         strcpy (libpath, search_head->name);
+
+         for (search = search_head->next; search != NULL; search = search->next)
+           {
+             size_t nlen;
+
+             nlen = strlen (search->name);
+             libpath = xrealloc (libpath, len + nlen + 2);
+             libpath[len] = ':';
+             strcpy (libpath + len + 1, search->name);
+             len += nlen + 1;
+           }
        }
     }
 
   /* Let the XCOFF backend set up the .loader section.  */
-  if (!bfd_xcoff_size_dynamic_sections 
-      (output_bfd, &link_info, libpath,        entry_symbol, file_align,
-       maxstack, maxdata, gc && !unix_ld ? true : false,
-       modtype,        textro ? true : false, unix_ld, special_sections, 
-       rtld ? true : false))
+  if (!bfd_xcoff_size_dynamic_sections
+      (output_bfd, &link_info, libpath,        entry_symbol.name, file_align,
+       maxstack, maxdata, gc && !unix_ld ? TRUE : FALSE,
+       modtype,        textro ? TRUE : FALSE, unix_ld, special_sections,
+       rtld ? TRUE : FALSE))
     einfo ("%P%F: failed to set dynamic section sizes: %E\n");
 
   /* Look through the special sections, and put them in the right
@@ -697,23 +717,23 @@ gld${EMULATION_NAME}_before_allocation ()
       lang_statement_union_type **pls;
       lang_input_section_type *is;
       const char *oname;
-      boolean start;
+      bfd_boolean start;
 
       sec = special_sections[i];
       if (sec == NULL)
        continue;
 
       /* Remove this section from the list of the output section.
-         This assumes we know what the script looks like.  */
+        This assumes we know what the script looks like.  */
       is = NULL;
       os = lang_output_section_find (sec->output_section->name);
-      if (os == NULL) 
+      if (os == NULL)
        einfo ("%P%F: can't find output section %s\n",
               sec->output_section->name);
 
       for (pls = &os->children.head; *pls != NULL; pls = &(*pls)->header.next)
        {
-         if ((*pls)->header.type == lang_input_section_enum 
+         if ((*pls)->header.type == lang_input_section_enum
              && (*pls)->input_section.section == sec)
            {
              is = (lang_input_section_type *) * pls;
@@ -729,7 +749,7 @@ gld${EMULATION_NAME}_before_allocation ()
                   *pwls != NULL; pwls = &(*pwls)->header.next)
                {
 
-                 if ((*pwls)->header.type == lang_input_section_enum 
+                 if ((*pwls)->header.type == lang_input_section_enum
                      && (*pwls)->input_section.section == sec)
                    {
                      is = (lang_input_section_type *) * pwls;
@@ -757,32 +777,32 @@ gld${EMULATION_NAME}_before_allocation ()
        case XCOFF_SPECIAL_SECTION_TEXT:
          /* _text */
          oname = ".text";
-         start = true;
+         start = TRUE;
          break;
 
        case XCOFF_SPECIAL_SECTION_ETEXT:
          /* _etext */
          oname = ".text";
-         start = false;
+         start = FALSE;
          break;
 
        case XCOFF_SPECIAL_SECTION_DATA:
          /* _data */
          oname = ".data";
-         start = true;
+         start = TRUE;
          break;
 
        case XCOFF_SPECIAL_SECTION_EDATA:
          /* _edata */
          oname = ".data";
-         start = false;
+         start = FALSE;
          break;
 
        case XCOFF_SPECIAL_SECTION_END:
        case XCOFF_SPECIAL_SECTION_END2:
          /* _end and end */
          oname = ".bss";
-         start = false;
+         start = FALSE;
          break;
        }
 
@@ -801,17 +821,17 @@ gld${EMULATION_NAME}_before_allocation ()
                                 &is->header.next);
        }
     }
+
+  before_allocation_default ();
 }
 
 static char *
-gld${EMULATION_NAME}_choose_target (argc, argv)
-     int argc;
-     char **argv;
+gld${EMULATION_NAME}_choose_target (int argc, char **argv)
 {
   int i, j, jmax;
   static char *from_outside;
   static char *from_inside;
-  static char *argv_to_target[][2] = { 
+  static char *argv_to_target[][2] = {
     {NULL,   "${OUTPUT_FORMAT}"},
     {"-b32", "${OUTPUT_FORMAT_32BIT}"},
     {"-b64", "${OUTPUT_FORMAT_64BIT}"},
@@ -827,7 +847,7 @@ gld${EMULATION_NAME}_choose_target (argc, argv)
   from_inside = argv_to_target[0][1];
   for (i = 1; i < argc; i++)
     {
-      for (j = 1; j < jmax; j++) 
+      for (j = 1; j < jmax; j++)
        {
          if (0 == strcmp (argv[i], argv_to_target[j][0]))
            from_inside = argv_to_target[j][1];
@@ -837,12 +857,11 @@ gld${EMULATION_NAME}_choose_target (argc, argv)
   return from_inside;
 }
 
-/* Returns 
+/* Returns
    1 : state changed
    0 : no change */
-static int 
-change_symbol_mode (input)
-     char *input;
+static int
+change_symbol_mode (char *input)
 {
   char *symbol_mode_string[] = {
     "# 32",                    /* 0x01 */
@@ -871,18 +890,16 @@ change_symbol_mode (input)
   return 0;
 }
 
-/* Returns 
+/* Returns
    1 : yes
    0 : ignore
    -1 : error, try something else */
-static int 
-is_syscall (input, flag)
-     char *input;
-     unsigned int *flag;
+static int
+is_syscall (char *input, unsigned int *flag)
 {
   unsigned int bit;
   char *string;
-  
+
   struct sc {
     char *syscall_string;
     unsigned int flag;
@@ -900,20 +917,20 @@ is_syscall (input, flag)
 
   *flag = 0;
 
-  for (bit = 0;; bit++) 
+  for (bit = 0;; bit++)
     {
       string = s[bit].syscall_string;
-      if (string == NULL) 
+      if (string == NULL)
        return -1;
 
-      if (0 == strcmp (input, string)) 
+      if (0 == strcmp (input, string))
        {
-         if (1 << bit & syscall_mask) 
+         if (1 << bit & syscall_mask)
            {
              *flag = s[bit].flag;
              return 1;
-           } 
-         else 
+           }
+         else
            {
              return 0;
            }
@@ -925,18 +942,16 @@ is_syscall (input, flag)
 
 /* Read an import or export file.  For an import file, this is called
    by the before_allocation emulation routine.  For an export file,
-   this is called by the parse_args emulation routine.  */
+   this is called by the handle_option emulation routine.  */
 
 static void
-gld${EMULATION_NAME}_read_file (filename, import)
-     const char *filename;
-     boolean import;
+gld${EMULATION_NAME}_read_file (const char *filename, bfd_boolean import)
 {
   struct obstack *o;
   FILE *f;
   int lineno;
   int c;
-  boolean keep;
+  bfd_boolean keep;
   const char *imppath;
   const char *impfile;
   const char *impmember;
@@ -951,7 +966,7 @@ gld${EMULATION_NAME}_read_file (filename, import)
       einfo ("%F%s: %E\n", filename);
     }
 
-  keep = false;
+  keep = FALSE;
 
   imppath = NULL;
   impfile = NULL;
@@ -1017,7 +1032,7 @@ gld${EMULATION_NAME}_read_file (filename, import)
              char *file;
 
              (void) obstack_finish (o);
-             keep = true;
+             keep = TRUE;
              imppath = s;
              file = NULL;
              while (!ISSPACE (*s) && *s != '(' && *s != '\0')
@@ -1103,19 +1118,19 @@ gld${EMULATION_NAME}_read_file (filename, import)
              if (s != se)
                {
                  int status;
-                 char *end;
+                 const char *end;
 
                  status = is_syscall (s, &syscall_flag);
-             
-                 if (0 > status) 
+
+                 if (0 > status)
                    {
                      /* not a system call, check for address */
-                     address = strtoul (s, &end, 0);
+                     address = bfd_scan_vma (s, &end, 0);
                      if (*end != '\0')
                        {
                          einfo ("%s:%d: warning: syntax error in import/export file\n",
                                 filename, lineno);
-                         
+
                        }
                    }
                }
@@ -1134,8 +1149,8 @@ gld${EMULATION_NAME}_read_file (filename, import)
            }
          else
            {
-             h = bfd_link_hash_lookup (link_info.hash, symname, false, false,
-                                       true);
+             h = bfd_link_hash_lookup (link_info.hash, symname, FALSE, FALSE,
+                                       TRUE);
              if (h == NULL || h->type == bfd_link_hash_new)
                {
                  /* We can just ignore attempts to import an unreferenced
@@ -1171,8 +1186,7 @@ gld${EMULATION_NAME}_read_file (filename, import)
 /* This routine saves us from worrying about declaring free.  */
 
 static void
-gld${EMULATION_NAME}_free (p)
-     PTR p;
+gld${EMULATION_NAME}_free (void *p)
 {
   free (p);
 }
@@ -1182,8 +1196,7 @@ gld${EMULATION_NAME}_free (p)
    to symbols.  */
 
 static void
-gld${EMULATION_NAME}_find_relocs (s)
-     lang_statement_union_type *s;
+gld${EMULATION_NAME}_find_relocs (lang_statement_union_type *s)
 {
   if (s->header.type == lang_reloc_statement_enum)
     {
@@ -1203,8 +1216,7 @@ gld${EMULATION_NAME}_find_relocs (s)
 /* Look through an expression for an assignment statement.  */
 
 static void
-gld${EMULATION_NAME}_find_exp_assignment (exp)
-     etree_type *exp;
+gld${EMULATION_NAME}_find_exp_assignment (etree_type *exp)
 {
   struct bfd_link_hash_entry *h;
 
@@ -1212,7 +1224,7 @@ gld${EMULATION_NAME}_find_exp_assignment (exp)
     {
     case etree_provide:
       h = bfd_link_hash_lookup (link_info.hash, exp->assign.dst,
-                               false, false, false);
+                               FALSE, FALSE, FALSE);
       if (h == NULL)
        break;
       /* Fall through.  */
@@ -1248,8 +1260,7 @@ gld${EMULATION_NAME}_find_exp_assignment (exp)
 }
 
 static char *
-gld${EMULATION_NAME}_get_script (isfile)
-     int *isfile;
+gld${EMULATION_NAME}_get_script (int *isfile)
 EOF
 
 if test -n "$COMPILE_IN"
@@ -1263,19 +1274,19 @@ cat >>e${EMULATION_NAME}.c <<EOF
 {
   *isfile = 0;
 
-  if (link_info.relocateable == true && config.build_constructors == true)
+  if (link_info.relocatable && config.build_constructors)
     return
 EOF
-sed $sc ldscripts/${EMULATION_NAME}.xu                     >> e${EMULATION_NAME}.c
-echo '  ; else if (link_info.relocateable == true) return' >> e${EMULATION_NAME}.c
-sed $sc ldscripts/${EMULATION_NAME}.xr                     >> e${EMULATION_NAME}.c
-echo '  ; else if (!config.text_read_only) return'         >> e${EMULATION_NAME}.c
-sed $sc ldscripts/${EMULATION_NAME}.xbn                    >> e${EMULATION_NAME}.c
-echo '  ; else if (!config.magic_demand_paged) return'     >> e${EMULATION_NAME}.c
-sed $sc ldscripts/${EMULATION_NAME}.xn                     >> e${EMULATION_NAME}.c
-echo '  ; else return'                                     >> e${EMULATION_NAME}.c
-sed $sc ldscripts/${EMULATION_NAME}.x                      >> e${EMULATION_NAME}.c
-echo '; }'                                                 >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xu                >> e${EMULATION_NAME}.c
+echo '  ; else if (link_info.relocatable) return'     >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xr                >> e${EMULATION_NAME}.c
+echo '  ; else if (!config.text_read_only) return'     >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xbn                       >> e${EMULATION_NAME}.c
+echo '  ; else if (!config.magic_demand_paged) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xn                >> e${EMULATION_NAME}.c
+echo '  ; else return'                                >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.x                 >> e${EMULATION_NAME}.c
+echo '; }'                                            >> e${EMULATION_NAME}.c
 
 else
 # Scripts read from the filesystem.
@@ -1284,9 +1295,9 @@ cat >>e${EMULATION_NAME}.c <<EOF
 {
   *isfile = 1;
 
-  if (link_info.relocateable == true && config.build_constructors == true)
+  if (link_info.relocatable && config.build_constructors)
     return "ldscripts/${EMULATION_NAME}.xu";
-  else if (link_info.relocateable == true)
+  else if (link_info.relocatable)
     return "ldscripts/${EMULATION_NAME}.xr";
   else if (!config.text_read_only)
     return "ldscripts/${EMULATION_NAME}.xbn";
@@ -1301,19 +1312,19 @@ fi
 
 cat >>e${EMULATION_NAME}.c <<EOF
 
-static void 
-gld${EMULATION_NAME}_create_output_section_statements ()
+static void
+gld${EMULATION_NAME}_create_output_section_statements (void)
 {
   /* __rtinit */
-  if ((bfd_get_flavour (output_bfd) == bfd_target_xcoff_flavour) 
-      && (link_info.init_function != NULL  
+  if ((bfd_get_flavour (output_bfd) == bfd_target_xcoff_flavour)
+      && (link_info.init_function != NULL
          || link_info.fini_function != NULL
-         || rtld == true))
+         || rtld))
     {
       initfini_file = lang_add_input_file ("initfini",
                                           lang_input_file_is_file_enum,
                                           NULL);
-      
+
       initfini_file->the_bfd = bfd_create ("initfini", output_bfd);
       if (initfini_file->the_bfd == NULL
          || ! bfd_set_arch_mach (initfini_file->the_bfd,
@@ -1323,25 +1334,25 @@ gld${EMULATION_NAME}_create_output_section_statements ()
          einfo ("%X%P: can not create BFD %E\n");
          return;
        }
-      
+
       /* Call backend to fill in the rest */
-      if (false == bfd_xcoff_link_generate_rtinit (initfini_file->the_bfd, 
-                                                  link_info.init_function, 
-                                                  link_info.fini_function,
-                                                  rtld))
+      if (! bfd_xcoff_link_generate_rtinit (initfini_file->the_bfd,
+                                           link_info.init_function,
+                                           link_info.fini_function,
+                                           rtld))
        {
          einfo ("%X%P: can not create BFD %E\n");
          return;
        }
 
       /* __rtld defined in /lib/librtl.a */
-      if (true == rtld) 
+      if (rtld)
        lang_add_input_file ("rtl", lang_input_file_is_l_enum, NULL);
     }
 }
 
 static void
-gld${EMULATION_NAME}_set_output_arch ()
+gld${EMULATION_NAME}_set_output_arch (void)
 {
   bfd_set_arch_mach (output_bfd,
                     bfd_xcoff_architecture (output_bfd),
@@ -1365,15 +1376,18 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation = {
   gld${EMULATION_NAME}_get_script,
   "${EMULATION_NAME}",
   "${OUTPUT_FORMAT}",
-  0,                           /* finish */
+  finish_default,
   gld${EMULATION_NAME}_create_output_section_statements,
   0,                           /* open_dynamic_archive */
   0,                           /* place_orphan */
   0,                           /* set_symbols */
   gld${EMULATION_NAME}_parse_args,
+  gld${EMULATION_NAME}_add_options,
+  gld${EMULATION_NAME}_handle_option,
   gld${EMULATION_NAME}_unrecognized_file,
   NULL,                                /* list_options */
   NULL,                                /* recognized_file */
   NULL,                                /* find potential_libraries */
+  NULL                         /* new_vers_pattern */
 };
 EOF
This page took 0.03681 seconds and 4 git commands to generate.