2004-01-15 Michael Chastain <mec.gnu@mindspring.com>
[deliverable/binutils-gdb.git] / binutils / dlltool.c
index 3fecf16d68eb604a6be756c37f0d2322af39849a..9d258612cdd7a1dd91662bf3b882f4dd5a2c726d 100644 (file)
@@ -1,5 +1,5 @@
 /* dlltool.c -- tool to generate stuff for PE style DLLs
-   Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
+   Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
    Free Software Foundation, Inc.
 
    This file is part of GNU Binutils.
@@ -60,7 +60,7 @@
    Declares that <external-name> or the exported function whoes ordinal number
    is <integer> is to be imported from the file <module-name>.  If
    <internal-name> is specified then this is the name that the imported
-   function will be refered to in the body of the DLL.
+   function will be refereed to in the body of the DLL.
 
    DESCRIPTION <string>
    Puts <string> into output .exp file in the .rdata section
 #endif
 
 /* Forward references.  */
-static char *look_for_prog
-  PARAMS ((const char *, const char *, int));
-static char *deduce_name
-  PARAMS ((const char *));
+static char *look_for_prog (const char *, const char *, int);
+static char *deduce_name (const char *);
 
 #ifdef DLLTOOL_MCORE_ELF
-static void mcore_elf_cache_filename
-  PARAMS ((char *));
-static void mcore_elf_gen_out_file
-  PARAMS ((void));
+static void mcore_elf_cache_filename (char *);
+static void mcore_elf_gen_out_file (void);
 #endif
 
 #ifdef HAVE_SYS_WAIT_H
@@ -350,6 +346,8 @@ static iheadtype *import_list = NULL;
 static char *as_name = NULL;
 static char * as_flags = "";
 
+static char *tmp_prefix;
+
 static int no_idata4;
 static int no_idata5;
 static char *exp_name;
@@ -431,14 +429,21 @@ static char * mcore_elf_linker_flags = NULL;
 
 #define PATHMAX 250            /* What's the right name for this ?  */
 
-#define TMP_ASM                "dc.s"
-#define TMP_HEAD_S     "dh.s"
-#define TMP_HEAD_O     "dh.o"
-#define TMP_TAIL_S     "dt.s"
-#define TMP_TAIL_O     "dt.o"
-#define TMP_STUB       "ds"
-
-/* This bit of assemly does jmp * ....  */
+char *tmp_asm_buf;
+char *tmp_head_s_buf;
+char *tmp_head_o_buf;
+char *tmp_tail_s_buf;
+char *tmp_tail_o_buf;
+char *tmp_stub_buf;
+
+#define TMP_ASM                dlltmp (&tmp_asm_buf, "%sc.s")
+#define TMP_HEAD_S     dlltmp (&tmp_head_s_buf, "%sh.s")
+#define TMP_HEAD_O     dlltmp (&tmp_head_o_buf, "%sh.o")
+#define TMP_TAIL_S     dlltmp (&tmp_tail_s_buf, "%st.s")
+#define TMP_TAIL_O     dlltmp (&tmp_tail_o_buf, "%st.o")
+#define TMP_STUB       dlltmp (&tmp_stub_buf, "%ss")
+
+/* This bit of assembly does jmp * ....  */
 static const unsigned char i386_jtab[] =
 {
   0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x90, 0x90
@@ -656,91 +661,75 @@ struct string_list
 
 static struct string_list *excludes;
 
-static const char *rvaafter
-  PARAMS ((int));
-static const char *rvabefore
-  PARAMS ((int));
-static const char *asm_prefix
-  PARAMS ((int));
-static void process_def_file
-  PARAMS ((const char *));
-static void new_directive
-  PARAMS ((char *));
-static void append_import
-  PARAMS ((const char *, const char *, int));
-static void run
-  PARAMS ((const char *, char *));
-static void scan_drectve_symbols
-  PARAMS ((bfd *));
-static void scan_filtered_symbols
-  PARAMS ((bfd *, PTR, long, unsigned int));
-static void add_excludes
-  PARAMS ((const char *));
-static bfd_boolean match_exclude
-  PARAMS ((const char *));
-static void set_default_excludes
-  PARAMS ((void));
-static long filter_symbols
-  PARAMS ((bfd *, PTR, long, unsigned int));
-static void scan_all_symbols
-  PARAMS ((bfd *));
-static void scan_open_obj_file
-  PARAMS ((bfd *));
-static void scan_obj_file
-  PARAMS ((const char *));
-static void dump_def_info
-  PARAMS ((FILE *));
-static int sfunc
-  PARAMS ((const void *, const void *));
-static void flush_page
-  PARAMS ((FILE *, long *, int, int));
-static void gen_def_file
-  PARAMS ((void));
-static void generate_idata_ofile
-  PARAMS ((FILE *));
-static void assemble_file
-  PARAMS ((const char *, const char *));
-static void gen_exp_file
-  PARAMS ((void));
-static const char *xlate
-  PARAMS ((const char *));
+static const char *rvaafter (int);
+static const char *rvabefore (int);
+static const char *asm_prefix (int);
+static void process_def_file (const char *);
+static void new_directive (char *);
+static void append_import (const char *, const char *, int);
+static void run (const char *, char *);
+static void scan_drectve_symbols (bfd *);
+static void scan_filtered_symbols (bfd *, void *, long, unsigned int);
+static void add_excludes (const char *);
+static bfd_boolean match_exclude (const char *);
+static void set_default_excludes (void);
+static long filter_symbols (bfd *, void *, long, unsigned int);
+static void scan_all_symbols (bfd *);
+static void scan_open_obj_file (bfd *);
+static void scan_obj_file (const char *);
+static void dump_def_info (FILE *);
+static int sfunc (const void *, const void *);
+static void flush_page (FILE *, long *, int, int);
+static void gen_def_file (void);
+static void generate_idata_ofile (FILE *);
+static void assemble_file (const char *, const char *);
+static void gen_exp_file (void);
+static const char *xlate (const char *);
 #if 0
-static void dump_iat
-  PARAMS ((FILE *, export_type *));
+static void dump_iat (FILE *, export_type *);
 #endif
-static char *make_label
-  PARAMS ((const char *, const char *));
-static char *make_imp_label
-  PARAMS ((const char *, const char *));
-static bfd *make_one_lib_file
-  PARAMS ((export_type *, int));
-static bfd *make_head
-  PARAMS ((void));
-static bfd *make_tail
-  PARAMS ((void));
-static void gen_lib_file
-  PARAMS ((void));
-static int pfunc
-  PARAMS ((const void *, const void *));
-static int nfunc
-  PARAMS ((const void *, const void *));
-static void remove_null_names
-  PARAMS ((export_type **));
-static void dtab
-  PARAMS ((export_type **));
-static void process_duplicates
-  PARAMS ((export_type **));
-static void fill_ordinals
-  PARAMS ((export_type **));
-static int alphafunc
-  PARAMS ((const void *, const void *));
-static void mangle_defs
-  PARAMS ((void));
-static void usage
-  PARAMS ((FILE *, int));
-static void inform
-  PARAMS ((const char *, ...));
+static char *make_label (const char *, const char *);
+static char *make_imp_label (const char *, const char *);
+static bfd *make_one_lib_file (export_type *, int);
+static bfd *make_head (void);
+static bfd *make_tail (void);
+static void gen_lib_file (void);
+static int pfunc (const void *, const void *);
+static int nfunc (const void *, const void *);
+static void remove_null_names (export_type **);
+static void dtab (export_type **);
+static void process_duplicates (export_type **);
+static void fill_ordinals (export_type **);
+static int alphafunc (const void *, const void *);
+static void mangle_defs (void);
+static void usage (FILE *, int);
+static void inform (const char *, ...);
 
+static char *
+prefix_encode (char *start, unsigned code)
+{
+  static char alpha[26] = "abcdefghijklmnopqrstuvwxyz";
+  static char buf[32];
+  char *p;
+  strcpy (buf, start);
+  p = strchr (buf, '\0');
+  do
+    *p++ = alpha[code % sizeof (alpha)];
+  while ((code /= sizeof (alpha)) != 0);
+  *p = '\0';
+  return buf;
+}
+
+static char *
+dlltmp (char **buf, const char *fmt)
+{
+  if (!*buf)
+    {
+      *buf = malloc (strlen (tmp_prefix) + 64);
+      sprintf (*buf, fmt, tmp_prefix);
+    }
+  return *buf;
+}
 
 static void
 inform VPARAMS ((const char * message, ...))
@@ -757,8 +746,7 @@ inform VPARAMS ((const char * message, ...))
 }
 
 static const char *
-rvaafter (machine)
-     int machine;
+rvaafter (int machine)
 {
   switch (machine)
     {
@@ -782,8 +770,7 @@ rvaafter (machine)
 }
 
 static const char *
-rvabefore (machine)
-     int machine;
+rvabefore (int machine)
 {
   switch (machine)
     {
@@ -807,8 +794,7 @@ rvabefore (machine)
 }
 
 static const char *
-asm_prefix (machine)
-     int machine;
+asm_prefix (int machine)
 {
   switch (machine)
     {
@@ -832,17 +818,17 @@ asm_prefix (machine)
   return "";
 }
 
-#define ASM_BYTE       mtable[machine].how_byte
-#define ASM_SHORT      mtable[machine].how_short
+#define ASM_BYTE       mtable[machine].how_byte
+#define ASM_SHORT      mtable[machine].how_short
 #define ASM_LONG       mtable[machine].how_long
 #define ASM_TEXT       mtable[machine].how_asciz
-#define ASM_C          mtable[machine].how_comment
-#define ASM_JUMP       mtable[machine].how_jump
+#define ASM_C          mtable[machine].how_comment
+#define ASM_JUMP       mtable[machine].how_jump
 #define ASM_GLOBAL     mtable[machine].how_global
 #define ASM_SPACE      mtable[machine].how_space
 #define ASM_ALIGN_SHORT mtable[machine].how_align_short
-#define ASM_RVA_BEFORE         rvabefore(machine)
-#define ASM_RVA_AFTER          rvaafter(machine)
+#define ASM_RVA_BEFORE rvabefore(machine)
+#define ASM_RVA_AFTER  rvaafter(machine)
 #define ASM_PREFIX     asm_prefix(machine)
 #define ASM_ALIGN_LONG  mtable[machine].how_align_long
 #define HOW_BFD_READ_TARGET  0  /* always default*/
@@ -856,8 +842,7 @@ asm_prefix (machine)
 static char **oav;
 
 static void
-process_def_file (name)
-     const char *name;
+process_def_file (const char *name)
 {
   FILE *f = fopen (name, FOPEN_RT);
 
@@ -894,8 +879,7 @@ static int d_is_dll;
 static int d_is_exe;
 
 int
-yyerror (err)
-     const char * err ATTRIBUTE_UNUSED;
+yyerror (const char * err ATTRIBUTE_UNUSED)
 {
   /* xgettext:c-format */
   non_fatal (_("Syntax error in def file %s:%d"), def_file, linenumber);
@@ -904,13 +888,8 @@ yyerror (err)
 }
 
 void
-def_exports (name, internal_name, ordinal, noname, constant, data)
-     const char *name;
-     const char *internal_name;
-     int ordinal;
-     int noname;
-     int constant;
-     int data;
+def_exports (const char *name, const char *internal_name, int ordinal,
+            int noname, int constant, int data)
 {
   struct export *p = (struct export *) xmalloc (sizeof (*p));
 
@@ -932,9 +911,7 @@ def_exports (name, internal_name, ordinal, noname, constant, data)
 }
 
 void
-def_name (name, base)
-     const char *name;
-     int base;
+def_name (const char *name, int base)
 {
   /* xgettext:c-format */
   inform (_("NAME: %s base: %x"), name, base);
@@ -951,9 +928,7 @@ def_name (name, base)
 }
 
 void
-def_library (name, base)
-     const char *name;
-     int base;
+def_library (const char *name, int base)
 {
   /* xgettext:c-format */
   inform (_("LIBRARY: %s base: %x"), name, base);
@@ -969,8 +944,7 @@ def_library (name, base)
 }
 
 void
-def_description (desc)
-     const char *desc;
+def_description (const char *desc)
 {
   dlist_type *d = (dlist_type *) xmalloc (sizeof (dlist_type));
   d->text = xstrdup (desc);
@@ -979,8 +953,7 @@ def_description (desc)
 }
 
 static void
-new_directive (dir)
-     char *dir;
+new_directive (char *dir)
 {
   dlist_type *d = (dlist_type *) xmalloc (sizeof (dlist_type));
   d->text = xstrdup (dir);
@@ -989,9 +962,7 @@ new_directive (dir)
 }
 
 void
-def_heapsize (reserve, commit)
-     int reserve;
-     int commit;
+def_heapsize (int reserve, int commit)
 {
   char b[200];
   if (commit > 0)
@@ -1002,9 +973,7 @@ def_heapsize (reserve, commit)
 }
 
 void
-def_stacksize (reserve, commit)
-     int reserve;
-     int commit;
+def_stacksize (int reserve, int commit)
 {
   char b[200];
   if (commit > 0)
@@ -1018,10 +987,7 @@ def_stacksize (reserve, commit)
    import_list.  It is used by def_import.  */
 
 static void
-append_import (symbol_name, dll_name, func_ordinal)
-     const char *symbol_name;
-     const char *dll_name;
-     int func_ordinal;
+append_import (const char *symbol_name, const char *dll_name, int func_ordinal)
 {
   iheadtype **pq;
   iheadtype *q;
@@ -1085,12 +1051,8 @@ append_import (symbol_name, dll_name, func_ordinal)
              present (i.e., not NULL).  */
 
 void
-def_import (app_name, module, dllext, entry, ord_val)
-     const char *app_name;
-     const char *module;
-     const char *dllext;
-     const char *entry;
-     int ord_val;
+def_import (const char *app_name, const char *module, const char *dllext,
+           const char *entry, int ord_val)
 {
   const char *application_name;
   char *buf;
@@ -1116,17 +1078,13 @@ def_import (app_name, module, dllext, entry, ord_val)
 }
 
 void
-def_version (major, minor)
-     int major;
-     int minor;
+def_version (int major, int minor)
 {
   printf ("VERSION %d.%d\n", major, minor);
 }
 
 void
-def_section (name, attr)
-     const char *name;
-     int attr;
+def_section (const char *name, int attr)
 {
   char buf[200];
   char atts[5];
@@ -1146,16 +1104,14 @@ def_section (name, attr)
 }
 
 void
-def_code (attr)
-     int attr;
+def_code (int attr)
 {
 
   def_section ("CODE", attr);
 }
 
 void
-def_data (attr)
-     int attr;
+def_data (int attr)
 {
   def_section ("DATA", attr);
 }
@@ -1163,9 +1119,7 @@ def_data (attr)
 /**********************************************************************/
 
 static void
-run (what, args)
-     const char *what;
-     char *args;
+run (const char *what, char *args)
 {
   char *s;
   int pid, wait_status;
@@ -1236,8 +1190,7 @@ run (what, args)
    ABFD.  Pass each one to def_exports.  */
 
 static void
-scan_drectve_symbols (abfd)
-     bfd *abfd;
+scan_drectve_symbols (bfd *abfd)
 {
   asection * s;
   int        size;
@@ -1315,11 +1268,8 @@ scan_drectve_symbols (abfd)
    symbols to export.  */
 
 static void
-scan_filtered_symbols (abfd, minisyms, symcount, size)
-     bfd *abfd;
-     PTR minisyms;
-     long symcount;
-     unsigned int size;
+scan_filtered_symbols (bfd *abfd, void *minisyms, long symcount,
+                      unsigned int size)
 {
   asymbol *store;
   bfd_byte *from, *fromend;
@@ -1361,8 +1311,7 @@ scan_filtered_symbols (abfd, minisyms, symcount, size)
 /* Add a list of symbols to exclude.  */
 
 static void
-add_excludes (new_excludes)
-     const char *new_excludes;
+add_excludes (const char *new_excludes)
 {
   char *local_copy;
   char *exclude_string;
@@ -1395,8 +1344,7 @@ add_excludes (new_excludes)
 /* See if STRING is on the list of symbols to exclude.  */
 
 static bfd_boolean
-match_exclude (string)
-     const char *string;
+match_exclude (const char *string)
 {
   struct string_list *excl_item;
 
@@ -1417,11 +1365,7 @@ set_default_excludes (void)
 /* Choose which symbols to export.  */
 
 static long
-filter_symbols (abfd, minisyms, symcount, size)
-     bfd *abfd;
-     PTR minisyms;
-     long symcount;
-     unsigned int size;
+filter_symbols (bfd *abfd, void *minisyms, long symcount, unsigned int size)
 {
   bfd_byte *from, *fromend, *to;
   asymbol *store;
@@ -1439,7 +1383,7 @@ filter_symbols (abfd, minisyms, symcount, size)
       int keep = 0;
       asymbol *sym;
 
-      sym = bfd_minisymbol_to_symbol (abfd, FALSE, (const PTR) from, store);
+      sym = bfd_minisymbol_to_symbol (abfd, FALSE, (const void *) from, store);
       if (sym == NULL)
        bfd_fatal (bfd_get_filename (abfd));
 
@@ -1465,11 +1409,10 @@ filter_symbols (abfd, minisyms, symcount, size)
    export.  */
 
 static void
-scan_all_symbols (abfd)
-     bfd *abfd;
+scan_all_symbols (bfd *abfd)
 {
   long symcount;
-  PTR minisyms;
+  void *minisyms;
   unsigned int size;
 
   /* Ignore bfds with an import descriptor table.  We assume that any
@@ -1508,8 +1451,7 @@ scan_all_symbols (abfd)
 /* Look at the object file to decide which symbols to export.  */
 
 static void
-scan_open_obj_file (abfd)
-     bfd *abfd;
+scan_open_obj_file (bfd *abfd)
 {
   if (export_all_symbols)
     scan_all_symbols (abfd);
@@ -1523,8 +1465,7 @@ scan_open_obj_file (abfd)
 }
 
 static void
-scan_obj_file (filename)
-     const char *filename;
+scan_obj_file (const char *filename)
 {
   bfd * f = bfd_openr (filename, 0);
 
@@ -1567,8 +1508,7 @@ scan_obj_file (filename)
 /**********************************************************************/
 
 static void
-dump_def_info (f)
-     FILE *f;
+dump_def_info (FILE *f)
 {
   int i;
   export_type *exp;
@@ -1593,19 +1533,13 @@ dump_def_info (f)
 /* Generate the .exp file.  */
 
 static int
-sfunc (a, b)
-     const void *a;
-     const void *b;
+sfunc (const void *a, const void *b)
 {
   return *(const long *) a - *(const long *) b;
 }
 
 static void
-flush_page (f, need, page_addr, on_page)
-     FILE *f;
-     long *need;
-     int page_addr;
-     int on_page;
+flush_page (FILE *f, long *need, int page_addr, int on_page)
 {
   int i;
 
@@ -1635,7 +1569,7 @@ flush_page (f, need, page_addr, on_page)
 }
 
 static void
-gen_def_file ()
+gen_def_file (void)
 {
   int i;
   export_type *exp;
@@ -1653,23 +1587,28 @@ gen_def_file ()
       char *quote = strchr (exp->name, '.') ? "\"" : "";
       char *res = cplus_demangle (exp->internal_name, DMGL_ANSI | DMGL_PARAMS);
 
+      if (res)
+       {
+         fprintf (output_def,";\t%s\n", res);
+         free (res);
+       }
+
       if (strcmp (exp->name, exp->internal_name) == 0)
        {
 
-         fprintf (output_def, "\t%s%s%s @ %d%s%s ; %s\n",
+         fprintf (output_def, "\t%s%s%s @ %d%s%s\n",
                   quote,
                   exp->name,
                   quote,
                   exp->ordinal,
                   exp->noname ? " NONAME" : "",
-                  exp->data ? " DATA" : "",
-                  res ? res : "");
+                  exp->data ? " DATA" : "");
        }
       else
        {
          char *quote1 = strchr (exp->internal_name, '.') ? "\"" : "";
          /* char *alias =  */
-         fprintf (output_def, "\t%s%s%s = %s%s%s @ %d%s%s ; %s\n",
+         fprintf (output_def, "\t%s%s%s = %s%s%s @ %d%s%s\n",
                   quote,
                   exp->name,
                   quote,
@@ -1678,11 +1617,8 @@ gen_def_file ()
                   quote1,
                   exp->ordinal,
                   exp->noname ? " NONAME" : "",
-                  exp->data ? " DATA" : "",
-                  res ? res : "");
+                  exp->data ? " DATA" : "");
        }
-      if (res)
-       free (res);
     }
 
   inform (_("Added exports to output file"));
@@ -1693,8 +1629,7 @@ gen_def_file ()
    the file.  */
 
 static void
-generate_idata_ofile (filvar)
-     FILE *filvar;
+generate_idata_ofile (FILE *filvar)
 {
   iheadtype *headptr;
   ifunctype *funcptr;
@@ -1786,9 +1721,7 @@ generate_idata_ofile (filvar)
 
 /* Assemble the specified file.  */
 static void
-assemble_file (source, dest)
-     const char * source;
-     const char * dest;
+assemble_file (const char * source, const char * dest)
 {
   char * cmd;
 
@@ -1801,7 +1734,7 @@ assemble_file (source, dest)
 }
 
 static void
-gen_exp_file ()
+gen_exp_file (void)
 {
   FILE *f;
   int i;
@@ -2010,7 +1943,7 @@ gen_exp_file ()
          int dst = 0;
          int last = -1;
          qsort (copy, num_entries, sizeof (long), sfunc);
-         /* Delete duplcates */
+         /* Delete duplicates */
          for (src = 0; src < num_entries; src++)
            {
              if (last != copy[src])
@@ -2051,8 +1984,7 @@ gen_exp_file ()
 }
 
 static const char *
-xlate (name)
-     const char *name;
+xlate (const char *name)
 {
   int lead_at = (*name == '@');
 
@@ -2082,9 +2014,7 @@ xlate (name)
 #if 0
 
 static void
-dump_iat (f, exp)
-     FILE *f;
-     export_type *exp;
+dump_iat (FILE *f, export_type *exp)
 {
   if (exp->noname && !show_allnames )
     {
@@ -2214,9 +2144,7 @@ ID2:      .short  2
         bctr  */
 
 static char *
-make_label (prefix, name)
-     const char *prefix;
-     const char *name;
+make_label (const char *prefix, const char *name)
 {
   int len = strlen (ASM_PREFIX) + strlen (prefix) + strlen (name);
   char *copy = xmalloc (len +1 );
@@ -2228,9 +2156,7 @@ make_label (prefix, name)
 }
 
 static char *
-make_imp_label (prefix, name)
-     const char *prefix;
-     const char *name;
+make_imp_label (const char *prefix, const char *name)
 {
   int len;
   char *copy;
@@ -2254,9 +2180,7 @@ make_imp_label (prefix, name)
 }
 
 static bfd *
-make_one_lib_file (exp, i)
-     export_type *exp;
-     int i;
+make_one_lib_file (export_type *exp, int i)
 {
 #if 0
     {
@@ -2329,7 +2253,7 @@ make_one_lib_file (exp, i)
       asymbol *  ptrs[NSECS + 4 + EXTRA + 1];
       flagword   applicable;
 
-      char *     outname = xmalloc (10);
+      char *     outname = xmalloc (strlen (TMP_STUB) + 10);
       int        oidx = 0;
 
 
@@ -2440,7 +2364,7 @@ make_one_lib_file (exp, i)
       ptrs[oidx++] = iname_lab;
 
 #ifdef DLLTOOL_PPC
-      /* The symbol refering to the code (.text).  */
+      /* The symbol referring to the code (.text).  */
       {
        asymbol *function_name;
 
@@ -2721,7 +2645,7 @@ make_one_lib_file (exp, i)
 }
 
 static bfd *
-make_head ()
+make_head (void)
 {
   FILE *f = fopen (TMP_HEAD_S, FOPEN_WT);
 
@@ -2780,7 +2704,7 @@ make_head ()
 }
 
 static bfd *
-make_tail ()
+make_tail (void)
 {
   FILE *f = fopen (TMP_TAIL_S, FOPEN_WT);
 
@@ -2838,7 +2762,7 @@ make_tail ()
 }
 
 static void
-gen_lib_file ()
+gen_lib_file (void)
 {
   int i;
   export_type *exp;
@@ -2906,7 +2830,7 @@ gen_lib_file ()
     {
       char *name;
 
-      name = (char *) alloca (sizeof TMP_STUB + 10);
+      name = (char *) alloca (strlen (TMP_STUB) + 10);
       for (i = 0, exp = d_exports; exp; i++, exp = exp->next)
        {
          sprintf (name, "%s%05d.o", TMP_STUB, i);
@@ -2924,9 +2848,7 @@ gen_lib_file ()
 /* Run through the information gathered from the .o files and the
    .def file and work out the best stuff.  */
 static int
-pfunc (a, b)
-     const void *a;
-     const void *b;
+pfunc (const void *a, const void *b)
 {
   export_type *ap = *(export_type **) a;
   export_type *bp = *(export_type **) b;
@@ -2942,9 +2864,7 @@ pfunc (a, b)
 }
 
 static int
-nfunc (a, b)
-     const void *a;
-     const void *b;
+nfunc (const void *a, const void *b)
 {
   export_type *ap = *(export_type **) a;
   export_type *bp = *(export_type **) b;
@@ -2953,8 +2873,7 @@ nfunc (a, b)
 }
 
 static void
-remove_null_names (ptr)
-     export_type **ptr;
+remove_null_names (export_type **ptr)
 {
   int src;
   int dst;
@@ -2971,12 +2890,11 @@ remove_null_names (ptr)
 }
 
 static void
-dtab (ptr)
-     export_type ** ptr
+dtab (export_type **ptr
 #ifndef SACDEBUG
 ATTRIBUTE_UNUSED
 #endif
-     ;
+      )
 {
 #ifdef SACDEBUG
   int i;
@@ -2997,8 +2915,7 @@ ATTRIBUTE_UNUSED
 }
 
 static void
-process_duplicates (d_export_vec)
-     export_type **d_export_vec;
+process_duplicates (export_type **d_export_vec)
 {
   int more = 1;
   int i;
@@ -3056,8 +2973,7 @@ process_duplicates (d_export_vec)
 }
 
 static void
-fill_ordinals (d_export_vec)
-     export_type **d_export_vec;
+fill_ordinals (export_type **d_export_vec)
 {
   int lowest = -1;
   int i;
@@ -3131,9 +3047,7 @@ fill_ordinals (d_export_vec)
 }
 
 static int
-alphafunc (av,bv)
-     const void *av;
-     const void *bv;
+alphafunc (const void *av, const void *bv)
 {
   const export_type **a = (const export_type **) av;
   const export_type **b = (const export_type **) bv;
@@ -3142,7 +3056,7 @@ alphafunc (av,bv)
 }
 
 static void
-mangle_defs ()
+mangle_defs (void)
 {
   /* First work out the minimum ordinal chosen.  */
   export_type *exp;
@@ -3190,9 +3104,7 @@ mangle_defs ()
 /**********************************************************************/
 
 static void
-usage (file, status)
-     FILE *file;
-     int status;
+usage (FILE *file, int status)
 {
   /* xgetext:c-format */
   fprintf (file, _("Usage %s <option(s)> <object-file(s)>\n"), program_name);
@@ -3219,6 +3131,7 @@ usage (file, status)
   fprintf (file, _("   -f --as-flags <flags>     Pass <flags> to the assembler.\n"));
   fprintf (file, _("   -C --compat-implib        Create backward compatible import library.\n"));
   fprintf (file, _("   -n --no-delete            Keep temp files (repeat for extra preservation).\n"));
+  fprintf (file, _("   -t --temp-prefix <prefix> Use <prefix> to construct temp file names.\n"));
   fprintf (file, _("   -v --verbose              Be verbose.\n"));
   fprintf (file, _("   -V --version              Display the program version.\n"));
   fprintf (file, _("   -h --help                 Display this information.\n"));
@@ -3248,7 +3161,7 @@ static const struct option long_options[] =
   {"exclude-symbols", required_argument, NULL, OPTION_EXCLUDE_SYMS},
   {"no-default-excludes", no_argument, NULL, OPTION_NO_DEFAULT_EXCLUDES},
   {"output-lib", required_argument, NULL, 'l'},
-  {"def", required_argument, NULL, 'd'}, /* for compatiblity with older versions */
+  {"def", required_argument, NULL, 'd'}, /* for compatibility with older versions */
   {"input-def", required_argument, NULL, 'd'},
   {"add-underscore", no_argument, NULL, 'U'},
   {"kill-at", no_argument, NULL, 'k'},
@@ -3263,15 +3176,14 @@ static const struct option long_options[] =
   {"as-flags", required_argument, NULL, 'f'},
   {"mcore-elf", required_argument, NULL, 'M'},
   {"compat-implib", no_argument, NULL, 'C'},
+  {"temp-prefix", required_argument, NULL, 't'},
   {NULL,0,NULL,0}
 };
 
-int main PARAMS ((int, char **));
+int main (int, char **);
 
 int
-main (ac, av)
-     int ac;
-     char **av;
+main (int ac, char **av)
 {
   int c;
   int i;
@@ -3320,6 +3232,9 @@ main (ac, av)
        case 'S':
          as_name = optarg;
          break;
+       case 't':
+         tmp_prefix = optarg;
+         break;
        case 'f':
          as_flags = optarg;
          break;
@@ -3398,6 +3313,9 @@ main (ac, av)
        }
     }
 
+  if (!tmp_prefix)
+    tmp_prefix = prefix_encode ("d", getpid ());
+
   for (i = 0; mtable[i].type; i++)
     if (strcmp (mtable[i].type, mname) == 0)
       break;
@@ -3476,10 +3394,7 @@ main (ac, av)
    appropriate.  */
 
 static char *
-look_for_prog (prog_name, prefix, end_prefix)
-     const char *prog_name;
-     const char *prefix;
-     int end_prefix;
+look_for_prog (const char *prog_name, const char *prefix, int end_prefix)
 {
   struct stat s;
   char *cmd;
@@ -3545,8 +3460,7 @@ look_for_prog (prog_name, prefix, end_prefix)
    Returns a dynamically allocated string.  */
 
 static char *
-deduce_name (prog_name)
-     const char *prog_name;
+deduce_name (const char *prog_name)
 {
   char *cmd;
   char *dash, *slash, *cp;
@@ -3634,21 +3548,21 @@ mcore_elf_gen_out_file (void)
   ptr = & fnames;
 
   ds = dyn_string_new (100);
-  dyn_string_append (ds, "-r ");
+  dyn_string_append_cstr (ds, "-r ");
 
   if (mcore_elf_linker_flags != NULL)
-    dyn_string_append (ds, mcore_elf_linker_flags);
+    dyn_string_append_cstr (ds, mcore_elf_linker_flags);
 
   while (ptr->next != NULL)
     {
-      dyn_string_append (ds, ptr->filename);
-      dyn_string_append (ds, " ");
+      dyn_string_append_cstr (ds, ptr->filename);
+      dyn_string_append_cstr (ds, " ");
 
       ptr = ptr->next;
     }
 
-  dyn_string_append (ds, "-o ");
-  dyn_string_append (ds, MCORE_ELF_TMP_OBJ);
+  dyn_string_append_cstr (ds, "-o ");
+  dyn_string_append_cstr (ds, MCORE_ELF_TMP_OBJ);
 
   if (mcore_elf_linker == NULL)
     mcore_elf_linker = deduce_name ("ld");
@@ -3661,25 +3575,25 @@ mcore_elf_gen_out_file (void)
      Do this by recursively invoking dlltool...  */
   ds = dyn_string_new (100);
 
-  dyn_string_append (ds, "-S ");
-  dyn_string_append (ds, as_name);
+  dyn_string_append_cstr (ds, "-S ");
+  dyn_string_append_cstr (ds, as_name);
 
-  dyn_string_append (ds, " -e ");
-  dyn_string_append (ds, MCORE_ELF_TMP_EXP);
-  dyn_string_append (ds, " -l ");
-  dyn_string_append (ds, MCORE_ELF_TMP_LIB);
-  dyn_string_append (ds, " " );
-  dyn_string_append (ds, MCORE_ELF_TMP_OBJ);
+  dyn_string_append_cstr (ds, " -e ");
+  dyn_string_append_cstr (ds, MCORE_ELF_TMP_EXP);
+  dyn_string_append_cstr (ds, " -l ");
+  dyn_string_append_cstr (ds, MCORE_ELF_TMP_LIB);
+  dyn_string_append_cstr (ds, " " );
+  dyn_string_append_cstr (ds, MCORE_ELF_TMP_OBJ);
 
   if (verbose)
-    dyn_string_append (ds, " -v");
+    dyn_string_append_cstr (ds, " -v");
 
   if (dontdeltemps)
     {
-      dyn_string_append (ds, " -n");
+      dyn_string_append_cstr (ds, " -n");
 
       if (dontdeltemps > 1)
-       dyn_string_append (ds, " -n");
+       dyn_string_append_cstr (ds, " -n");
     }
 
   /* XXX - FIME: ought to check/copy other command line options as well.  */
@@ -3690,17 +3604,17 @@ mcore_elf_gen_out_file (void)
   /* Step four. Feed the .exp and object files to ld -shared to create the dll.  */
   ds = dyn_string_new (100);
 
-  dyn_string_append (ds, "-shared ");
+  dyn_string_append_cstr (ds, "-shared ");
 
   if (mcore_elf_linker_flags)
-    dyn_string_append (ds, mcore_elf_linker_flags);
-
-  dyn_string_append (ds, " ");
-  dyn_string_append (ds, MCORE_ELF_TMP_EXP);
-  dyn_string_append (ds, " ");
-  dyn_string_append (ds, MCORE_ELF_TMP_OBJ);
-  dyn_string_append (ds, " -o ");
-  dyn_string_append (ds, mcore_elf_out_file);
+    dyn_string_append_cstr (ds, mcore_elf_linker_flags);
+
+  dyn_string_append_cstr (ds, " ");
+  dyn_string_append_cstr (ds, MCORE_ELF_TMP_EXP);
+  dyn_string_append_cstr (ds, " ");
+  dyn_string_append_cstr (ds, MCORE_ELF_TMP_OBJ);
+  dyn_string_append_cstr (ds, " -o ");
+  dyn_string_append_cstr (ds, mcore_elf_out_file);
 
   run (mcore_elf_linker, ds->s);
 
This page took 0.036037 seconds and 4 git commands to generate.