rebuild
[deliverable/binutils-gdb.git] / binutils / nlmconv.c
index d421e39bd23f2cf1eefb34a211a9c8e330571ba2..f1c8b6c268aaa3c5491d353fb0bcb703c247f75f 100644 (file)
@@ -1,5 +1,5 @@
 /* nlmconv.c -- NLM conversion program
-   Copyright (C) 1993 Free Software Foundation, Inc.
+   Copyright (C) 1993, 94, 95, 96, 97, 98, 1999 Free Software Foundation, Inc.
 
 This file is part of GNU Binutils.
 
@@ -15,37 +15,42 @@ 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., 675 Mass Ave, Cambridge, MA 02139, USA.  */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 /* Written by Ian Lance Taylor <ian@cygnus.com>.
 
    This program can be used to convert any appropriate object file
    into a NetWare Loadable Module (an NLM).  It will accept a linker
    specification file which is identical to that accepted by the
-   NetWare linker, NLMLINK, except that the INPUT command, normally
-   used to give a list of object files to link together, is not used.
-   This program will convert only a single object file.  */
+   NetWare linker, NLMLINK.  */
+
+/* AIX requires this to be the first thing in the file.  */
+#ifndef __GNUC__
+# ifdef _AIX
+ #pragma alloca
+#endif
+#endif
+
+#include "bfd.h"
+#include "libiberty.h"
+#include "bucomm.h"
 
 #include <ansidecl.h>
-#include <stdio.h>
 #include <time.h>
 #include <ctype.h>
-#include <sys/types.h>
 #include <sys/stat.h>
 #include <sys/file.h>
 #include <assert.h>
 #include <getopt.h>
-#include "bfd.h"
-#include "libiberty.h"
-#include "sysdep.h"
-#include "bucomm.h"
+
 /* Internal BFD NLM header.  */
 #include "libnlm.h"
 #include "nlmconv.h"
 
-/* Needed for Alpha support.  */
+#ifdef NLMCONV_ALPHA
 #include "coff/sym.h"
 #include "coff/ecoff.h"
+#endif
 
 /* If strerror is just a macro, we want to use the one from libiberty
    since it will handle undefined values.  */
@@ -56,10 +61,6 @@ extern char *strerror ();
 extern struct tm *localtime ();
 #endif
 
-#ifndef getenv
-extern char *getenv ();
-#endif
-
 #ifndef SEEK_SET
 #define SEEK_SET 0
 #endif
@@ -75,9 +76,6 @@ extern char *getenv ();
 /* The name used to invoke the program.  */
 char *program_name;
 
-/* The version number.  */
-extern char *program_version;
-
 /* Local variables.  */
 
 /* Whether to print out debugging information (currently just controls
@@ -132,27 +130,30 @@ static void copy_sections PARAMS ((bfd *, asection *, PTR));
 static void mangle_relocs PARAMS ((bfd *, asection *, arelent ***,
                                   long *, char *,
                                   bfd_size_type));
+static void default_mangle_relocs PARAMS ((bfd *, asection *, arelent ***,
+                                          long *, char *,
+                                          bfd_size_type));
+static char *link_inputs PARAMS ((struct string_list *, char *));
+
+#ifdef NLMCONV_I386
 static void i386_mangle_relocs PARAMS ((bfd *, asection *, arelent ***,
                                        long *, char *,
                                        bfd_size_type));
+#endif
+
+#ifdef NLMCONV_ALPHA
 static void alpha_mangle_relocs PARAMS ((bfd *, asection *, arelent ***,
                                         long *, char *,
                                         bfd_size_type));
-/* start-sanitize-powerpc-netware */
+#endif
+
+#ifdef NLMCONV_POWERPC
 static void powerpc_build_stubs PARAMS ((bfd *, bfd *, asymbol ***, long *));
 static void powerpc_resolve_stubs PARAMS ((bfd *, bfd *));
 static void powerpc_mangle_relocs PARAMS ((bfd *, asection *, arelent ***,
                                           long *, char *,
                                           bfd_size_type));
-/* end-sanitize-powerpc-netware */
-static void default_mangle_relocs PARAMS ((bfd *, asection *, arelent ***,
-                                          long *, char *,
-                                          bfd_size_type));
-static char *link_inputs PARAMS ((struct string_list *, char *));
-static const char *choose_temp_base_try PARAMS ((const char *,
-                                                const char *));
-static void choose_temp_base PARAMS ((void));
-static int pexecute PARAMS ((char *, char *[]));
+#endif
 \f
 /* The main routine.  */
 
@@ -185,21 +186,41 @@ main (argc, argv)
   char inlead, outlead;
   boolean gotstart, gotexit, gotcheck;
   struct stat st;
-  FILE *custom_data, *help_data, *message_data, *rpc_data, *shared_data;
-  size_t custom_size, help_size, message_size, module_size, rpc_size;
-  asection *custom_section, *help_section, *message_section, *module_section;
-  asection *rpc_section, *shared_section;
+  FILE *custom_data = NULL;
+  FILE *help_data = NULL;
+  FILE *message_data = NULL;
+  FILE *rpc_data = NULL;
+  FILE *shared_data = NULL;
+  size_t custom_size = 0;
+  size_t help_size = 0;
+  size_t message_size = 0;
+  size_t module_size = 0;
+  size_t rpc_size = 0;
+  asection *custom_section = NULL;
+  asection *help_section = NULL;
+  asection *message_section = NULL;
+  asection *module_section = NULL;
+  asection *rpc_section = NULL;
+  asection *shared_section = NULL;
   bfd *sharedbfd;
-  size_t shared_offset, shared_size;
+  size_t shared_offset = 0;
+  size_t shared_size = 0;
   Nlm_Internal_Fixed_Header sharedhdr;
   int len;
   char *modname;
   char **matching;
 
+#if defined (HAVE_SETLOCALE) && defined (HAVE_LC_MESSAGES)
+  setlocale (LC_MESSAGES, "");
+#endif
+  bindtextdomain (PACKAGE, LOCALEDIR);
+  textdomain (PACKAGE);
+
   program_name = argv[0];
   xmalloc_set_program_name (program_name);
 
   bfd_init ();
+  set_default_bfd_target ();
 
   while ((opt = getopt_long (argc, argv, "dhI:l:O:T:V", long_options,
                             (int *) NULL))
@@ -226,8 +247,7 @@ main (argc, argv)
          header_file = optarg;
          break;
        case 'V':
-         printf ("GNU %s version %s\n", program_name, program_version);
-         exit (0);
+         print_version ("nlmconv");
          /*NOTREACHED*/
        case 0:
          break;
@@ -252,7 +272,7 @@ main (argc, argv)
          if (strcmp (input_file, output_file) == 0)
            {
              fprintf (stderr,
-                      "%s: input and output files must be different\n",
+                      _("%s: input and output files must be different\n"),
                       program_name);
              exit (1);
            }
@@ -302,7 +322,7 @@ main (argc, argv)
       if (input_file != NULL)
        {
          fprintf (stderr,
-                  "%s: input file named both on command line and with INPUT\n",
+                  _("%s: input file named both on command line and with INPUT\n"),
                   program_name);
          exit (1);
        }
@@ -313,7 +333,7 @@ main (argc, argv)
     }
   else if (input_file == NULL)
     {
-      fprintf (stderr, "%s: no input file\n", program_name);
+      fprintf (stderr, _("%s: no input file\n"), program_name);
       show_usage (stderr, 1);
     }
 
@@ -335,7 +355,7 @@ main (argc, argv)
   if (output_format == NULL)
     output_format = select_output_format (bfd_get_arch (inbfd),
                                          bfd_get_mach (inbfd),
-                                         inbfd->xvec->byteorder_big_p);
+                                         bfd_big_endian (inbfd));
 
   assert (output_format != NULL);
 
@@ -343,7 +363,7 @@ main (argc, argv)
      Otherwise use the file named in the OUTPUT statement.  */
   if (output_file == NULL)
     {
-      fprintf (stderr, "%s: no name for output file\n",
+      fprintf (stderr, _("%s: no name for output file\n"),
               program_name);
       show_usage (stderr, 1);
     }
@@ -358,7 +378,7 @@ main (argc, argv)
 
   if (bfd_arch_get_compatible (inbfd, outbfd) == NULL)
     fprintf (stderr,
-            "%s: warning:input and output formats are not compatible\n",
+            _("%s: warning:input and output formats are not compatible\n"),
             program_name);
 
   /* Move the values read from the command file into outbfd.  */
@@ -388,7 +408,7 @@ main (argc, argv)
       if (bss_sec == NULL
          || ! bfd_set_section_flags (outbfd, bss_sec, SEC_ALLOC)
          || ! bfd_set_section_alignment (outbfd, bss_sec, 1))
-       bfd_fatal ("make .bss section");
+       bfd_fatal (_("make .bss section"));
     }
 
   /* We store the original section names in the .nlmsections section,
@@ -397,11 +417,11 @@ main (argc, argv)
      the NLM header area.  */
   secsec = bfd_make_section (outbfd, ".nlmsections");
   if (secsec == NULL)
-    bfd_fatal ("make .nlmsections section");
+    bfd_fatal (_("make .nlmsections section"));
   if (! bfd_set_section_flags (outbfd, secsec, SEC_HAS_CONTENTS))
-    bfd_fatal ("set .nlmsections flags");
-/* start-sanitize-powerpc-netware */
+    bfd_fatal (_("set .nlmsections flags"));
 
+#ifdef NLMCONV_POWERPC
   /* For PowerPC NetWare we need to build stubs for calls to undefined
      symbols.  Because each stub requires an entry in the TOC section
      which must be at the same location as other entries in the TOC
@@ -409,7 +429,7 @@ main (argc, argv)
      goes in setup_sections.  */
   if (bfd_get_arch (inbfd) == bfd_arch_powerpc)
     powerpc_build_stubs (inbfd, outbfd, &symbols, &symcount);
-/* end-sanitize-powerpc-netware */
+#endif
 
   /* Set up the sections.  */
   bfd_map_over_sections (inbfd, setup_sections, (PTR) outbfd);
@@ -427,14 +447,14 @@ main (argc, argv)
       add = ((vma + align - 1) &~ (align - 1)) - vma;
       vma += add;
       if (! bfd_set_section_vma (outbfd, bss_sec, vma))
-       bfd_fatal ("set .bss vma");
+       bfd_fatal (_("set .bss vma"));
       if (add != 0)
        {
          bfd_size_type data_size;
 
          data_size = bfd_get_section_size_before_reloc (data_sec);
          if (! bfd_set_section_size (outbfd, data_sec, data_size + add))
-           bfd_fatal ("set .data size");
+           bfd_fatal (_("set .data size"));
        }
     }
 
@@ -514,7 +534,7 @@ main (argc, argv)
         symbols will confuse it.  */
       if ((sym->flags & BSF_DEBUGGING) == 0
          && bfd_asymbol_name (sym)[0] == '_'
-         && bfd_get_section (sym) == &bfd_und_section)
+         && bfd_is_und_section (bfd_get_section (sym)))
        {
          if (strcmp (bfd_asymbol_name (sym), "_edata") == 0)
            {
@@ -526,7 +546,8 @@ main (argc, argv)
              sym->section = bss_sec;
              endsym = sym;
            }
-/* start-sanitize-powerpc-netware */
+
+#ifdef NLMCONV_POWERPC
          /* For PowerPC NetWare, we define __GOT0.  This is the start
             of the .got section.  */
          if (bfd_get_arch (inbfd) == bfd_arch_powerpc
@@ -539,7 +560,7 @@ main (argc, argv)
              sym->value = got_sec->output_offset;
              sym->section = got_sec->output_section;
            }
-/* end-sanitize-powerpc-netware */
+#endif
        }
 
       /* If this is a global symbol, check the export list.  */
@@ -591,7 +612,7 @@ main (argc, argv)
 
       /* If it's an undefined symbol, see if it's on the import list.
         Change the prefix if necessary.  */
-      if (bfd_get_section (sym) == &bfd_und_section)
+      if (bfd_is_und_section (bfd_get_section (sym)))
        {
          register struct string_list *l;
 
@@ -614,7 +635,7 @@ main (argc, argv)
            }
          if (l == NULL)
            fprintf (stderr,
-                    "%s: warning: symbol %s imported but not in import list\n",
+                    _("%s: warning: symbol %s imported but not in import list\n"),
                     program_name, bfd_asymbol_name (sym));
        }
        
@@ -634,7 +655,7 @@ main (argc, argv)
                  && text_sec != (asection *) NULL)
                val += bfd_section_size (outbfd, text_sec);
              if (! bfd_set_start_address (outbfd, val))
-               bfd_fatal ("set start address");
+               bfd_fatal (_("set start address"));
              gotstart = true;
            }
          if (strcmp (bfd_asymbol_name (sym), exit_procedure) == 0)
@@ -683,14 +704,14 @@ main (argc, argv)
   bfd_set_symtab (outbfd, outsyms, symcount + newsymcount);
     
   if (! gotstart)
-    fprintf (stderr, "%s: warning: START procedure %s not defined\n",
+    fprintf (stderr, _("%s: warning: START procedure %s not defined\n"),
             program_name, start_procedure);
   if (! gotexit)
-    fprintf (stderr, "%s: warning: EXIT procedure %s not defined\n",
+    fprintf (stderr, _("%s: warning: EXIT procedure %s not defined\n"),
             program_name, exit_procedure);
   if (check_procedure != NULL
       && ! gotcheck)
-    fprintf (stderr, "%s: warning: CHECK procedure %s not defined\n",
+    fprintf (stderr, _("%s: warning: CHECK procedure %s not defined\n"),
             program_name, check_procedure);
 
   /* Add additional sections required for the header information.  */
@@ -712,7 +733,7 @@ main (argc, argv)
              || ! bfd_set_section_size (outbfd, custom_section, custom_size)
              || ! bfd_set_section_flags (outbfd, custom_section,
                                          SEC_HAS_CONTENTS))
-           bfd_fatal ("custom section");
+           bfd_fatal (_("custom section"));
        }
     }
   if (help_file != NULL)
@@ -733,7 +754,7 @@ main (argc, argv)
              || ! bfd_set_section_size (outbfd, help_section, help_size)
              || ! bfd_set_section_flags (outbfd, help_section,
                                          SEC_HAS_CONTENTS))
-           bfd_fatal ("help section");
+           bfd_fatal (_("help section"));
          strncpy (nlm_extended_header (outbfd)->stamp, "MeSsAgEs", 8);
        }
     }
@@ -755,7 +776,7 @@ main (argc, argv)
              || ! bfd_set_section_size (outbfd, message_section, message_size)
              || ! bfd_set_section_flags (outbfd, message_section,
                                          SEC_HAS_CONTENTS))
-           bfd_fatal ("message section");
+           bfd_fatal (_("message section"));
          strncpy (nlm_extended_header (outbfd)->stamp, "MeSsAgEs", 8);
        }
     }
@@ -771,7 +792,7 @@ main (argc, argv)
          || ! bfd_set_section_size (outbfd, module_section, module_size)
          || ! bfd_set_section_flags (outbfd, module_section,
                                      SEC_HAS_CONTENTS))
-       bfd_fatal ("module section");
+       bfd_fatal (_("module section"));
     }
   if (rpc_file != NULL)
     {
@@ -791,7 +812,7 @@ main (argc, argv)
              || ! bfd_set_section_size (outbfd, rpc_section, rpc_size)
              || ! bfd_set_section_flags (outbfd, rpc_section,
                                          SEC_HAS_CONTENTS))
-           bfd_fatal ("rpc section");
+           bfd_fatal (_("rpc section"));
          strncpy (nlm_extended_header (outbfd)->stamp, "MeSsAgEs", 8);
        }
     }
@@ -828,19 +849,19 @@ main (argc, argv)
                {
                  /* There is no place to record this information.  */
                  fprintf (stderr,
-                          "%s:%s: warning: shared libraries can not have uninitialized data\n",
+                          _("%s:%s: warning: shared libraries can not have uninitialized data\n"),
                           program_name, sharelib_file);
                }
              shared_offset = st.st_size;
-             if (shared_offset > sharedhdr.codeImageOffset)
+             if (shared_offset > (size_t) sharedhdr.codeImageOffset)
                shared_offset = sharedhdr.codeImageOffset;
-             if (shared_offset > sharedhdr.dataImageOffset)
+             if (shared_offset > (size_t) sharedhdr.dataImageOffset)
                shared_offset = sharedhdr.dataImageOffset;
-             if (shared_offset > sharedhdr.relocationFixupOffset)
+             if (shared_offset > (size_t) sharedhdr.relocationFixupOffset)
                shared_offset = sharedhdr.relocationFixupOffset;
-             if (shared_offset > sharedhdr.externalReferencesOffset)
+             if (shared_offset > (size_t) sharedhdr.externalReferencesOffset)
                shared_offset = sharedhdr.externalReferencesOffset;
-             if (shared_offset > sharedhdr.publicsOffset)
+             if (shared_offset > (size_t) sharedhdr.publicsOffset)
                shared_offset = sharedhdr.publicsOffset;
              shared_size = st.st_size - shared_offset;
              shared_section = bfd_make_section (outbfd, ".nlmshared");
@@ -849,7 +870,7 @@ main (argc, argv)
                                             shared_size)
                  || ! bfd_set_section_flags (outbfd, shared_section,
                                              SEC_HAS_CONTENTS))
-               bfd_fatal ("shared section");
+               bfd_fatal (_("shared section"));
              strncpy (nlm_extended_header (outbfd)->stamp, "MeSsAgEs", 8);
            }
        }
@@ -857,7 +878,7 @@ main (argc, argv)
 
   /* Check whether a version was given.  */
   if (strncmp (version_hdr->stamp, "VeRsIoN#", 8) != 0)
-    fprintf (stderr, "%s: warning: No version number given\n",
+    fprintf (stderr, _("%s: warning: No version number given\n"),
             program_name);
 
   /* At least for now, always create an extended header, because that
@@ -881,12 +902,12 @@ main (argc, argv)
       nlm_version_header (outbfd)->year = ptm->tm_year + 1900;
       strncpy (version_hdr->stamp, "VeRsIoN#", 8);
     }
-/* start-sanitize-powerpc-netware */
 
+#ifdef NLMCONV_POWERPC
   /* Resolve the stubs we build for PowerPC NetWare.  */
   if (bfd_get_arch (inbfd) == bfd_arch_powerpc)
     powerpc_resolve_stubs (inbfd, outbfd);
-/* end-sanitize-powerpc-netware */
+#endif
 
   /* Copy over the sections.  */
   bfd_map_over_sections (inbfd, copy_sections, (PTR) outbfd);
@@ -898,13 +919,13 @@ main (argc, argv)
 
       data = xmalloc (custom_size);
       if (fread (data, 1, custom_size, custom_data) != custom_size)
-       fprintf (stderr, "%s:%s: read: %s\n", program_name, custom_file,
+       fprintf (stderr, _("%s:%s: read: %s\n"), program_name, custom_file,
                 strerror (errno));
       else
        {
          if (! bfd_set_section_contents (outbfd, custom_section, data,
                                          (file_ptr) 0, custom_size))
-           bfd_fatal ("custom section");
+           bfd_fatal (_("custom section"));
          nlm_fixed_header (outbfd)->customDataOffset =
            custom_section->filepos;
          nlm_fixed_header (outbfd)->customDataSize = custom_size;
@@ -922,7 +943,7 @@ main (argc, argv)
     }
   if (map_file != NULL)
     fprintf (stderr,
-            "%s: warning: MAP and FULLMAP are not supported; try ld -M\n",
+            _("%s: warning: MAP and FULLMAP are not supported; try ld -M\n"),
             program_name);
   if (help_file != NULL)
     {
@@ -930,13 +951,13 @@ main (argc, argv)
 
       data = xmalloc (help_size);
       if (fread (data, 1, help_size, help_data) != help_size)
-       fprintf (stderr, "%s:%s: read: %s\n", program_name, help_file,
+       fprintf (stderr, _("%s:%s: read: %s\n"), program_name, help_file,
                 strerror (errno));
       else
        {
          if (! bfd_set_section_contents (outbfd, help_section, data,
                                          (file_ptr) 0, help_size))
-           bfd_fatal ("help section");
+           bfd_fatal (_("help section"));
          nlm_extended_header (outbfd)->helpFileOffset =
            help_section->filepos;
          nlm_extended_header (outbfd)->helpFileLength = help_size;
@@ -949,13 +970,13 @@ main (argc, argv)
 
       data = xmalloc (message_size);
       if (fread (data, 1, message_size, message_data) != message_size)
-       fprintf (stderr, "%s:%s: read: %s\n", program_name, message_file,
+       fprintf (stderr, _("%s:%s: read: %s\n"), program_name, message_file,
                 strerror (errno));
       else
        {
          if (! bfd_set_section_contents (outbfd, message_section, data,
                                          (file_ptr) 0, message_size))
-           bfd_fatal ("message section");
+           bfd_fatal (_("message section"));
          nlm_extended_header (outbfd)->messageFileOffset =
            message_section->filepos;
          nlm_extended_header (outbfd)->messageFileLength = message_size;
@@ -988,7 +1009,7 @@ main (argc, argv)
        }
       if (! bfd_set_section_contents (outbfd, module_section, data,
                                      (file_ptr) 0, module_size))
-       bfd_fatal ("module section");
+       bfd_fatal (_("module section"));
       nlm_fixed_header (outbfd)->moduleDependencyOffset =
        module_section->filepos;
       nlm_fixed_header (outbfd)->numberOfModuleDependencies = c;
@@ -999,13 +1020,13 @@ main (argc, argv)
 
       data = xmalloc (rpc_size);
       if (fread (data, 1, rpc_size, rpc_data) != rpc_size)
-       fprintf (stderr, "%s:%s: read: %s\n", program_name, rpc_file,
+       fprintf (stderr, _("%s:%s: read: %s\n"), program_name, rpc_file,
                 strerror (errno));
       else
        {
          if (! bfd_set_section_contents (outbfd, rpc_section, data,
                                          (file_ptr) 0, rpc_size))
-           bfd_fatal ("rpc section");
+           bfd_fatal (_("rpc section"));
          nlm_extended_header (outbfd)->RPCDataOffset =
            rpc_section->filepos;
          nlm_extended_header (outbfd)->RPCDataLength = rpc_size;
@@ -1019,13 +1040,13 @@ main (argc, argv)
       data = xmalloc (shared_size);
       if (fseek (shared_data, shared_offset, SEEK_SET) != 0
          || fread (data, 1, shared_size, shared_data) != shared_size)
-       fprintf (stderr, "%s:%s: read: %s\n", program_name, sharelib_file,
+       fprintf (stderr, _("%s:%s: read: %s\n"), program_name, sharelib_file,
                 strerror (errno));
       else
        {
          if (! bfd_set_section_contents (outbfd, shared_section, data,
                                          (file_ptr) 0, shared_size))
-           bfd_fatal ("shared section");
+           bfd_fatal (_("shared section"));
        }
       nlm_extended_header (outbfd)->sharedCodeOffset =
        sharedhdr.codeImageOffset - shared_offset + shared_section->filepos;
@@ -1072,7 +1093,7 @@ main (argc, argv)
   for (modname = nlm_fixed_header (outbfd)->moduleName;
        *modname != '\0';
        modname++)
-    if (islower (*modname))
+    if (islower ((unsigned char) *modname))
       *modname = toupper (*modname);
 
   strncpy (nlm_variable_header (outbfd)->oldThreadName, " LONG",
@@ -1097,7 +1118,7 @@ main (argc, argv)
 static void
 show_help ()
 {
-  printf ("%s: Convert an object file into a NetWare Loadable Module\n",
+  printf (_("%s: Convert an object file into a NetWare Loadable Module\n"),
          program_name);
   show_usage (stdout, 0);
 }
@@ -1109,13 +1130,15 @@ show_usage (file, status)
      FILE *file;
      int status;
 {
-  fprintf (file, "\
+  fprintf (file, _("\
 Usage: %s [-dhV] [-I bfdname] [-O bfdname] [-T header-file] [-l linker]\n\
        [--input-target=bfdname] [--output-target=bfdname]\n\
        [--header-file=file] [--linker=linker] [--debug]\n\
        [--help] [--version]\n\
-       [in-file [out-file]]\n",
+       [in-file [out-file]]\n"),
           program_name);
+  if (status == 0)
+    fprintf (file, _("Report bugs to bug-gnu-utils@gnu.org\n"));
   exit (status);
 }
 \f
@@ -1130,18 +1153,24 @@ select_output_format (arch, mach, bigendian)
 {
   switch (arch)
     {
+#ifdef NLMCONV_I386
     case bfd_arch_i386:
       return "nlm32-i386";
+#endif
+#ifdef NLMCONV_SPARC
     case bfd_arch_sparc:
       return "nlm32-sparc";
+#endif
+#ifdef NLMCONV_ALPHA
     case bfd_arch_alpha:
       return "nlm32-alpha";
-/* start-sanitize-powerpc-netware */
+#endif
+#ifdef NLMCONV_POWERPC
     case bfd_arch_powerpc:
       return "nlm32-powerpc";
-/* end-sanitize-powerpc-netware */
+#endif
     default:
-      fprintf (stderr, "%s: no default NLM format for %s\n",
+      fprintf (stderr, _("%s: support not compiled in for %s\n"),
               program_name, bfd_printable_arch_mach (arch, mach));
       exit (1);
       /* Avoid warning.  */
@@ -1169,13 +1198,6 @@ setup_sections (inbfd, insec, data_ptr)
   bfd_size_type add;
   bfd_size_type secsecsize;
 
-  /* FIXME: We don't want to copy the .reginfo section of an ECOFF
-     file.  However, I don't have a good way to describe this section.
-     We do want to copy the section when using objcopy.  */
-  if (bfd_get_flavour (inbfd) == bfd_target_ecoff_flavour
-      && strcmp (bfd_section_name (inbfd, insec), ".reginfo") == 0)
-    return;
-
   f = bfd_get_section_flags (inbfd, insec);
   if (f & SEC_CODE)
     outname = NLM_CODE_NAME;
@@ -1191,7 +1213,7 @@ setup_sections (inbfd, insec, data_ptr)
     {
       outsec = bfd_make_section (outbfd, outname);
       if (outsec == NULL)
-       bfd_fatal ("make section");
+       bfd_fatal (_("make section"));
     }
 
   insec->output_section = outsec;
@@ -1205,16 +1227,17 @@ setup_sections (inbfd, insec, data_ptr)
                              (bfd_section_size (outbfd, outsec)
                               + bfd_section_size (inbfd, insec)
                               + add)))
-    bfd_fatal ("set section size");
+    bfd_fatal (_("set section size"));
 
   if ((bfd_section_alignment (inbfd, insec)
        > bfd_section_alignment (outbfd, outsec))
       && ! bfd_set_section_alignment (outbfd, outsec,
                                      bfd_section_alignment (inbfd, insec)))
-    bfd_fatal ("set section alignment");
+    bfd_fatal (_("set section alignment"));
 
-  if (! bfd_set_section_flags (outbfd, outsec, f))
-    bfd_fatal ("set section flags");
+  if (! bfd_set_section_flags (outbfd, outsec,
+                              f | bfd_get_section_flags (outbfd, outsec)))
+    bfd_fatal (_("set section flags"));
 
   bfd_set_reloc (outbfd, outsec, (arelent **) NULL, 0);
 
@@ -1225,7 +1248,7 @@ setup_sections (inbfd, insec, data_ptr)
   secsecsize = (secsecsize + 3) &~ 3;
   secsecsize += 8;
   if (! bfd_set_section_size (outbfd, secsec, secsecsize))
-    bfd_fatal ("set .nlmsections size");
+    bfd_fatal (_("set .nlmsections size"));
 }
 
 /* Copy the section contents.  */
@@ -1248,13 +1271,6 @@ copy_sections (inbfd, insec, data_ptr)
 
   inname = bfd_section_name (inbfd, insec);
 
-  /* FIXME: We don't want to copy the .reginfo section of an ECOFF
-     file.  However, I don't have a good way to describe this section.
-     We do want to copy the section when using objcopy.  */
-  if (bfd_get_flavour (inbfd) == bfd_target_ecoff_flavour
-      && strcmp (inname, ".reginfo") == 0)
-    return;
-
   outsec = insec->output_section;
   assert (outsec != NULL);
 
@@ -1296,11 +1312,11 @@ copy_sections (inbfd, insec, data_ptr)
          arelent **combined;
 
          total_count = reloc_count + outsec->reloc_count;
-         combined = (arelent **) xmalloc (total_count * sizeof (arelent));
+         combined = (arelent **) xmalloc (total_count * sizeof (arelent *));
          memcpy (combined, outsec->orelocation,
-                 outsec->reloc_count * sizeof (arelent));
+                 outsec->reloc_count * sizeof (arelent *));
          memcpy (combined + outsec->reloc_count, relocs,
-                 (size_t) (reloc_count * sizeof (arelent)));
+                 (size_t) (reloc_count * sizeof (arelent *)));
          free (outsec->orelocation);
          reloc_count = total_count;
          relocs = combined;
@@ -1320,7 +1336,7 @@ copy_sections (inbfd, insec, data_ptr)
   /* Add this section to .nlmsections.  */
   if (! bfd_set_section_contents (outbfd, secsec, (PTR) inname, secsecoff,
                                  strlen (inname) + 1))
-    bfd_fatal ("set .nlmsection contents");
+    bfd_fatal (_("set .nlmsection contents"));
   secsecoff += strlen (inname) + 1;
 
   add = ((secsecoff + 3) &~ 3) - secsecoff;
@@ -1328,7 +1344,7 @@ copy_sections (inbfd, insec, data_ptr)
     {
       bfd_h_put_32 (outbfd, (bfd_vma) 0, buf);
       if (! bfd_set_section_contents (outbfd, secsec, buf, secsecoff, add))
-       bfd_fatal ("set .nlmsection contents");
+       bfd_fatal (_("set .nlmsection contents"));
       secsecoff += add;
     }
 
@@ -1337,12 +1353,12 @@ copy_sections (inbfd, insec, data_ptr)
   else
     bfd_h_put_32 (outbfd, (bfd_vma) 0, buf);
   if (! bfd_set_section_contents (outbfd, secsec, buf, secsecoff, 4))
-    bfd_fatal ("set .nlmsection contents");
+    bfd_fatal (_("set .nlmsection contents"));
   secsecoff += 4;
 
   bfd_h_put_32 (outbfd, (bfd_vma) size, buf);
   if (! bfd_set_section_contents (outbfd, secsec, buf, secsecoff, 4))
-    bfd_fatal ("set .nlmsection contents");
+    bfd_fatal (_("set .nlmsection contents"));
   secsecoff += 4;
 }
 
@@ -1361,20 +1377,24 @@ mangle_relocs (outbfd, insec, relocs_ptr, reloc_count_ptr, contents,
 {
   switch (bfd_get_arch (outbfd))
     {
+#ifdef NLMCONV_I386
     case bfd_arch_i386:
       i386_mangle_relocs (outbfd, insec, relocs_ptr, reloc_count_ptr,
                          contents, contents_size);
       break;
+#endif
+#ifdef NLMCONV_ALPHA
     case bfd_arch_alpha:
       alpha_mangle_relocs (outbfd, insec, relocs_ptr, reloc_count_ptr,
                           contents, contents_size);
       break;
-/* start-sanitize-powerpc-netware */
+#endif
+#ifdef NLMCONV_POWERPC
     case bfd_arch_powerpc:
       powerpc_mangle_relocs (outbfd, insec, relocs_ptr, reloc_count_ptr,
                             contents, contents_size);
       break;
-/* end-sanitize-powerpc-netware */
+#endif
     default:
       default_mangle_relocs (outbfd, insec, relocs_ptr, reloc_count_ptr,
                             contents, contents_size);
@@ -1408,6 +1428,8 @@ default_mangle_relocs (outbfd, insec, relocs_ptr, reloc_count_ptr, contents,
        (*relocs)->address += insec->output_offset;
     }
 }
+\f
+#ifdef NLMCONV_I386
 
 /* NetWare on the i386 supports a restricted set of relocs, which are
    different from those used on other i386 targets.  This routine
@@ -1529,7 +1551,7 @@ i386_mangle_relocs (outbfd, insec, relocs_ptr, reloc_count_ptr, contents,
 
          /* Adjust the reloc for the changes we just made.  */
          rel->addend = 0;
-         if (bfd_get_section (sym) != &bfd_und_section)
+         if (! bfd_is_und_section (bfd_get_section (sym)))
            rel->sym_ptr_ptr = bfd_get_section (sym)->symbol_ptr_ptr;
        }
 
@@ -1564,6 +1586,10 @@ i386_mangle_relocs (outbfd, insec, relocs_ptr, reloc_count_ptr, contents,
     }
 }
 
+#endif /* NLMCONV_I386 */
+\f
+#ifdef NLMCONV_ALPHA
+
 /* On the Alpha the first reloc for every section must be a special
    relocs which hold the GP address.  Also, the first reloc in the
    file must be a special reloc which holds the address of the .lita
@@ -1625,7 +1651,7 @@ alpha_mangle_relocs (outbfd, insec, relocs_ptr, reloc_count_ptr, contents,
        }
 
       *relocs = (arelent *) xmalloc (sizeof (arelent));
-      (*relocs)->sym_ptr_ptr = bfd_abs_section.symbol_ptr_ptr;
+      (*relocs)->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
       (*relocs)->address = nlm_alpha_backend_data (outbfd)->lita_address;
       (*relocs)->addend = nlm_alpha_backend_data (outbfd)->lita_size + 1;
       (*relocs)->howto = &nlm32_alpha_nw_howto;
@@ -1633,25 +1659,13 @@ alpha_mangle_relocs (outbfd, insec, relocs_ptr, reloc_count_ptr, contents,
       ++(*reloc_count_ptr);
     }
 
-  /* Get the GP value from bfd.  It is in the .reginfo section.  */
+  /* Get the GP value from bfd.  */
   if (nlm_alpha_backend_data (outbfd)->gp == 0)
-    {
-      bfd *inbfd;
-      asection *reginfo_sec;
-      struct ecoff_reginfo sreginfo;
-
-      inbfd = insec->owner;
-      assert (bfd_get_flavour (inbfd) == bfd_target_ecoff_flavour);
-      reginfo_sec = bfd_get_section_by_name (inbfd, REGINFO);
-      if (reginfo_sec != (asection *) NULL
-         && bfd_get_section_contents (inbfd, reginfo_sec,
-                                      (PTR) &sreginfo, (file_ptr) 0,
-                                      sizeof sreginfo) != false)
-       nlm_alpha_backend_data (outbfd)->gp = sreginfo.gp_value;
-    }
+    nlm_alpha_backend_data (outbfd)->gp =
+      bfd_ecoff_get_gp_value (insec->owner);
 
   *relocs = (arelent *) xmalloc (sizeof (arelent));
-  (*relocs)->sym_ptr_ptr = bfd_abs_section.symbol_ptr_ptr;
+  (*relocs)->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
   (*relocs)->address = nlm_alpha_backend_data (outbfd)->gp;
   (*relocs)->addend = 0;
   (*relocs)->howto = &nlm32_alpha_nw_howto;
@@ -1668,11 +1682,14 @@ alpha_mangle_relocs (outbfd, insec, relocs_ptr, reloc_count_ptr, contents,
     {
       register bfd_size_type i;
 
-      for (i = 0; i < old_reloc_count; i++, relocs++)
+      for (i = 0; i < (bfd_size_type) old_reloc_count; i++, relocs++)
        (*relocs)->address += insec->output_offset;
     }
 }
-/* start-sanitize-powerpc-netware */
+
+#endif /* NLMCONV_ALPHA */
+\f
+#ifdef NLMCONV_POWERPC
 
 /* We keep a linked list of stubs which we must build.  Because BFD
    requires us to know the sizes of all sections before we can set the
@@ -1792,7 +1809,7 @@ powerpc_build_stubs (inbfd, outbfd, symbols_ptr, symcount_ptr)
       /* We must make a stub for every undefined symbol whose name
         starts with '.'.  */
       if (bfd_asymbol_name (sym)[0] != '.'
-         || bfd_get_section (sym) != &bfd_und_section)
+         || ! bfd_is_und_section (bfd_get_section (sym)))
        continue;
 
       /* Make a new undefined symbol with the same name but without
@@ -1844,25 +1861,8 @@ powerpc_build_stubs (inbfd, outbfd, symbols_ptr, symcount_ptr)
                                     (got_base
                                      + (stubcount
                                         * POWERPC_STUB_TOC_ENTRY_SIZE))))
-       bfd_fatal ("stub section sizes");
+       bfd_fatal (_("stub section sizes"));
     }
-
-  /* PowerPC NetWare requires a custom header.  We create it here.
-     The first word is the header version number, currently 1.  The
-     second word is the timestamp of the input file.  */
-  memcpy (nlm_custom_header (outbfd)->stamp, "CuStHeAd", 8);
-  nlm_custom_header (outbfd)->dataLength = 8;
-  nlm_custom_header (outbfd)->data = xmalloc (8);
-  bfd_h_put_32 (outbfd, (bfd_vma) 1,
-               (bfd_byte *) nlm_custom_header (outbfd)->data);
-  {
-    struct stat s;
-
-    if (stat (bfd_get_filename (inbfd), &s) < 0)
-      s.st_mtime = 0;
-    bfd_h_put_32 (outbfd, (bfd_vma) s.st_mtime,
-                 (bfd_byte *) nlm_custom_header (outbfd)->data + 4);
-  }
 }
 
 /* Resolve all the stubs for PowerPC NetWare.  We fill in the contents
@@ -1910,7 +1910,7 @@ powerpc_resolve_stubs (inbfd, outbfd)
                                      buf,
                                      l->start->value,
                                      POWERPC_STUB_SIZE))
-       bfd_fatal ("writing stub");
+       bfd_fatal (_("writing stub"));
 
       /* Create a new reloc for the TOC entry.  */
       reloc = (arelent *) xmalloc (sizeof (arelent));
@@ -1942,7 +1942,7 @@ powerpc_mangle_relocs (outbfd, insec, relocs_ptr, reloc_count_ptr, contents,
      char *contents;
      bfd_size_type contents_size;
 {
-  const reloc_howto_type *toc_howto;
+  reloc_howto_type *toc_howto;
   long reloc_count;
   register arelent **relocs;
   register long i;
@@ -1956,8 +1956,8 @@ powerpc_mangle_relocs (outbfd, insec, relocs_ptr, reloc_count_ptr, contents,
      going to write out whatever we return in the contents field.  */
   if (strcmp (bfd_get_section_name (insec->owner, insec), ".got") == 0)
     memset (contents + powerpc_initial_got_size, 0,
-           (bfd_get_section_size_after_reloc (insec)
-            - powerpc_initial_got_size));
+           (size_t) (bfd_get_section_size_after_reloc (insec)
+                     - powerpc_initial_got_size));
 
   reloc_count = *reloc_count_ptr;
   relocs = *relocs_ptr;
@@ -1965,11 +1965,30 @@ powerpc_mangle_relocs (outbfd, insec, relocs_ptr, reloc_count_ptr, contents,
     {
       arelent *rel;
       asymbol *sym;
-      bfd_vma symvalue;
+      bfd_vma sym_value;
 
       rel = *relocs++;
       sym = *rel->sym_ptr_ptr;
 
+      /* Convert any relocs against the .bss section into relocs
+         against the .data section.  */
+      if (strcmp (bfd_get_section_name (outbfd, bfd_get_section (sym)),
+                 NLM_UNINITIALIZED_DATA_NAME) == 0)
+       {
+         asection *datasec;
+
+         datasec = bfd_get_section_by_name (outbfd,
+                                            NLM_INITIALIZED_DATA_NAME);
+         if (datasec != NULL)
+           {
+             rel->addend += (bfd_get_section_vma (outbfd,
+                                                  bfd_get_section (sym))
+                             + sym->value);
+             rel->sym_ptr_ptr = datasec->symbol_ptr_ptr;
+             sym = *rel->sym_ptr_ptr;
+           }
+       }
+
       /* We must be able to resolve all PC relative relocs at this
         point.  If we get a branch to an undefined symbol we build a
         stub, since NetWare will resolve undefined symbols into a
@@ -1981,7 +2000,7 @@ powerpc_mangle_relocs (outbfd, insec, relocs_ptr, reloc_count_ptr, contents,
             between two sections both of which were placed in the
             same output section.  This should not happen.  */
          if (bfd_get_section (sym) != insec->output_section)
-           fprintf (stderr, "%s: unresolved PC relative reloc against %s\n",
+           fprintf (stderr, _("%s: unresolved PC relative reloc against %s\n"),
                     program_name, bfd_asymbol_name (sym));
          else
            {
@@ -2022,14 +2041,14 @@ powerpc_mangle_relocs (outbfd, insec, relocs_ptr, reloc_count_ptr, contents,
         symbol value.  The symbol will be start of the TOC section
         (which is named .got).  We do want to include the addend.  */
       if (rel->howto == toc_howto)
-       symvalue = 0;
+       sym_value = 0;
       else
-       symvalue = sym->value;
+       sym_value = sym->value;
 
       /* If this is a relocation against a symbol with a value, or
         there is a reloc addend, we need to update the addend in the
         object file.  */
-      if (symvalue + rel->addend != 0)
+      if (sym_value + rel->addend != 0)
        {
          bfd_vma val;
 
@@ -2040,13 +2059,13 @@ powerpc_mangle_relocs (outbfd, insec, relocs_ptr, reloc_count_ptr, contents,
                                (bfd_byte *) contents + rel->address);
              val = ((val &~ rel->howto->dst_mask)
                     | (((val & rel->howto->src_mask)
-                        + symvalue
+                        + sym_value
                         + rel->addend)
                        & rel->howto->dst_mask));
              if ((bfd_signed_vma) val < - 0x8000
                  || (bfd_signed_vma) val >= 0x8000)
                fprintf (stderr,
-                        "%s: overflow when adjusting relocation against %s\n",
+                        _("%s: overflow when adjusting relocation against %s\n"),
                         program_name, bfd_asymbol_name (sym));
              bfd_put_16 (outbfd, val, (bfd_byte *) contents + rel->address);
              break;
@@ -2056,7 +2075,7 @@ powerpc_mangle_relocs (outbfd, insec, relocs_ptr, reloc_count_ptr, contents,
                                (bfd_byte *) contents + rel->address);
              val = ((val &~ rel->howto->dst_mask)
                     | (((val & rel->howto->src_mask)
-                        + symvalue
+                        + sym_value
                         + rel->addend)
                        & rel->howto->dst_mask));
              bfd_put_32 (outbfd, val, (bfd_byte *) contents + rel->address);
@@ -2066,7 +2085,8 @@ powerpc_mangle_relocs (outbfd, insec, relocs_ptr, reloc_count_ptr, contents,
              abort ();
            }
 
-         rel->sym_ptr_ptr = bfd_get_section (sym)->symbol_ptr_ptr;
+         if (! bfd_is_und_section (bfd_get_section (sym)))
+           rel->sym_ptr_ptr = bfd_get_section (sym)->symbol_ptr_ptr;
          rel->addend = 0;
        }
 
@@ -2084,7 +2104,8 @@ powerpc_mangle_relocs (outbfd, insec, relocs_ptr, reloc_count_ptr, contents,
       rel->address += insec->output_offset;
     }
 }
-/* end-sanitize-powerpc-netware */
+
+#endif /* NLMCONV_POWERPC */
 \f
 /* Name of linker.  */
 #ifndef LD_NAME
@@ -2109,12 +2130,14 @@ link_inputs (inputs, ld)
   size_t i;
   int pid;
   int status;
+  char *errfmt;
+  char *errarg;
 
   c = 0;
   for (q = inputs; q != NULL; q = q->next)
     ++c;
 
-  argv = (char **) alloca (c + 5);
+  argv = (char **) alloca ((c + 5) * sizeof(char *));
 
 #ifndef __MSDOS__
   if (ld == NULL)
@@ -2140,13 +2163,13 @@ link_inputs (inputs, ld)
   if (ld == NULL)
     ld = (char *) LD_NAME;
 
-  choose_temp_base ();
+  temp_filename = choose_temp_base ();
 
   unlink_on_exit = xmalloc (strlen (temp_filename) + 3);
   sprintf (unlink_on_exit, "%s.O", temp_filename);
 
   argv[0] = ld;
-  argv[1] = (char *) "-r";
+  argv[1] = (char *) "-Ur";
   argv[2] = (char *) "-o";
   argv[3] = unlink_on_exit;
   i = 4;
@@ -2161,180 +2184,29 @@ link_inputs (inputs, ld)
       fprintf (stderr, "\n");
     }
 
-  pid = pexecute (ld, argv);
-
-  if (waitpid (pid, &status, 0) < 0)
+  pid = pexecute (ld, argv, program_name, (char *) NULL, &errfmt, &errarg,
+                 PEXECUTE_SEARCH | PEXECUTE_ONE);
+  if (pid == -1)
     {
-      perror ("waitpid");
+      fprintf (stderr, _("%s: execution of %s failed: "), program_name, ld);
+      fprintf (stderr, errfmt, errarg);
       unlink (unlink_on_exit);
       exit (1);
     }
 
-  if (status != 0)
+  if (pwait (pid, &status, 0) < 0)
     {
-      fprintf (stderr, "%s: Execution of %s failed\n", program_name, ld);
+      perror ("pwait");
       unlink (unlink_on_exit);
       exit (1);
     }
 
-  return unlink_on_exit;
-}
-
-/* Choose a temporary file name.  Stolen from gcc.c.  */
-
-static const char *
-choose_temp_base_try (try, base)
-     const char *try;
-     const char *base;
-{
-  const char *rv;
-
-  if (base)
-    rv = base;
-  else if (try == NULL)
-    rv = NULL;
-  else if (access (try, R_OK | W_OK) != 0)
-    rv = NULL;
-  else
-    rv = try;
-  return rv;
-}
-
-static void
-choose_temp_base ()
-{
-  const char *base = NULL;
-  int len;
-
-  base = choose_temp_base_try (getenv ("TMPDIR"), base);
-  base = choose_temp_base_try (getenv ("TMP"), base);
-  base = choose_temp_base_try (getenv ("TEMP"), base);
-
-#ifdef P_tmpdir
-  base = choose_temp_base_try (P_tmpdir, base);
-#endif
-
-  base = choose_temp_base_try ("/usr/tmp", base);
-  base = choose_temp_base_try ("/tmp", base);
-
-  /* If all else fails, use the current directory! */  
-  if (base == NULL)
-    base = "./";
-
-  len = strlen (base);
-  temp_filename = xmalloc (len + sizeof("/ccXXXXXX") + 1);
-  strcpy (temp_filename, base);
-  if (len > 0 && temp_filename[len-1] != '/')
-    temp_filename[len++] = '/';
-  strcpy (temp_filename + len, "ccXXXXXX");
-
-  mktemp (temp_filename);
-  if (*temp_filename == '\0')
-    abort ();
-}
-
-/* Execute a job.  Stolen from gcc.c.  */
-
-#ifndef OS2
-#ifdef __MSDOS__
-
-static int
-pexecute (program, argv)
-     char *program;
-     char *argv[];
-{
-  char *scmd, *rf;
-  FILE *argfile;
-  int i;
-
-  scmd = (char *)malloc (strlen (program) + strlen (temp_filename) + 10);
-  rf = scmd + strlen(program) + 2 + el;
-  sprintf (scmd, "%s.exe @%s.gp", program, temp_filename);
-  argfile = fopen (rf, "w");
-  if (argfile == 0)
-    pfatal_with_name (rf);
-
-  for (i=1; argv[i]; i++)
-    {
-      char *cp;
-      for (cp = argv[i]; *cp; cp++)
-       {
-         if (*cp == '"' || *cp == '\'' || *cp == '\\' || isspace (*cp))
-           fputc ('\\', argfile);
-         fputc (*cp, argfile);
-       }
-      fputc ('\n', argfile);
-    }
-  fclose (argfile);
-
-  i = system (scmd);
-
-  remove (rf);
-  
-  if (i == -1)
-    {
-      perror (program);
-      return MIN_FATAL_STATUS << 8;
-    }
-
-  return i << 8;
-}
-
-#else /* not __MSDOS__ */
-
-static int
-pexecute (program, argv)
-     char *program;
-     char *argv[];
-{
-  int pid;
-  int retries, sleep_interval;
-
-  /* Fork a subprocess; wait and retry if it fails.  */
-  sleep_interval = 1;
-  for (retries = 0; retries < 4; retries++)
-    {
-      pid = vfork ();
-      if (pid >= 0)
-       break;
-      sleep (sleep_interval);
-      sleep_interval *= 2;
-    }
-
-  switch (pid)
+  if (status != 0)
     {
-    case -1:
-#ifdef vfork
-      perror ("fork");
-#else
-      perror ("vfork");
-#endif
-      exit (1);
-      /* NOTREACHED */
-      return 0;
-
-    case 0: /* child */
-      /* Exec the program.  */
-      execvp (program, argv);
-      perror (program);
+      fprintf (stderr, _("%s: Execution of %s failed\n"), program_name, ld);
+      unlink (unlink_on_exit);
       exit (1);
-      /* NOTREACHED */
-      return 0;
-
-    default:
-      /* Return child's process number.  */
-      return pid;
     }
-}
 
-#endif /* not __MSDOS__ */
-#else /* not OS2 */
-
-static int
-pexecute (program, argv)
-     char *program;
-     char *argv[];
-{
-  return spawnvp (1, program, argv);
+  return unlink_on_exit;
 }
-#endif /* not OS2 */
This page took 0.07517 seconds and 4 git commands to generate.