Use symbolic names of relocation entries for the various
[deliverable/binutils-gdb.git] / binutils / srconv.c
index fca3dfdefdaf66b5225e19837e02ebdac87c662c..bd1ea6521f8680fe183accf427f7578b371a9a62 100644 (file)
@@ -1,5 +1,5 @@
 /* srconv.c -- Sysroff conversion program
-   Copyright (C) 1994 Free Software Foundation, Inc.
+   Copyright (C) 1994, 95, 96, 1998 Free Software Foundation, Inc.
 
    This file is part of GNU Binutils.
 
@@ -15,7 +15,8 @@
 
    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., 59 Temple Place - Suite 330, Boston, MA
+   02111-1307, USA.  */
 
 /* Written by Steve Chamberlain (sac@cygnus.com)
 
 #define PROGRAM_VERSION "1.5"
 /*#define FOOP1 1 */
 
-static int sh;
-static int h8300;
+static int addrsize;
+static char *toolname;
+static char **rnames;
+
 static void wr_cs ();
 static void walk_tree_scope ();
 static void wr_globals ();
@@ -171,12 +174,7 @@ writeINT (n, ptr, idx, size, file)
   int byte = *idx / 8;
 
   if (size == -2)
-    {
-      if (sh)  
-       size = 4;
-      else if (h8300)
-       size = 2;
-    }
+    size = addrsize;
   else if (size == -1)
     size = 0;
 
@@ -319,14 +317,14 @@ wr_un (ptr, sfile, first, nsecs)
 
   un.spare1 = 0;
 
-  if (abfd->flags & EXEC_P)
+  if (bfd_get_file_flags (abfd) & EXEC_P)
     un.format = FORMAT_LM;
   else
     un.format = FORMAT_OM;
   un.spare1 = 0;
 
 
-#if 0
+#if 1
   un.nsections = ptr->nsections - 1;   /*  Don't count the abs section */
 #else
   /*NEW - only count sections with size */
@@ -349,10 +347,7 @@ wr_un (ptr, sfile, first, nsecs)
            un.nextrefs++;
        }
     }
-  if (sh)
-    un.tool = "C_SH";
-  else if (h8300)
-    un.tool = "C_H8/300H";
+  un.tool = toolname;
   un.tcd = DATE;
   un.linker = "L_GX00";
   un.lcd = DATE;
@@ -368,7 +363,7 @@ wr_hd (p)
   struct IT_hd hd;
 
   hd.spare1 = 0;
-  if (abfd->flags & EXEC_P)
+  if (bfd_get_file_flags (abfd) & EXEC_P)
     {
       hd.mt = MTYPE_ABS_LM;
     }
@@ -381,17 +376,38 @@ wr_hd (p)
   hd.nu = p->nsources;         /* Always one unit */
   hd.code = 0;                 /* Always ASCII */
   hd.ver = "0200";             /* Version 2.00 */
-  switch (abfd->arch_info->arch)
+  switch (bfd_get_arch (abfd))
     {
     case bfd_arch_h8300:
       hd.au = 8;
       hd.si = 0;
-      hd.afl = 2;
       hd.spcsz = 32;
       hd.segsz = 0;
       hd.segsh = 0;
-      hd.cpu = "H8300H";
-      h8300 = 1;
+      switch (bfd_get_mach (abfd))
+       {
+       case bfd_mach_h8300:
+         hd.cpu = "H8300";
+         hd.afl = 2;
+         addrsize = 2;
+         toolname = "C_H8/300";
+         break;
+       case bfd_mach_h8300h:
+         hd.cpu = "H8300H";
+         hd.afl = 4;
+         addrsize = 4;
+         toolname = "C_H8/300H";
+         break;
+       case bfd_mach_h8300s:
+         hd.cpu = "H8300S";
+         hd.afl = 4;
+         addrsize = 4;
+         toolname = "C_H8/300S";
+         break;
+       default:
+         abort();
+       }
+      rnames = rname_h8300;
       break;
     case bfd_arch_sh:
       hd.au = 8;
@@ -401,13 +417,15 @@ wr_hd (p)
       hd.segsz = 0;
       hd.segsh = 0;
       hd.cpu = "SH";
-      sh = 1;
+      addrsize = 4;
+      toolname = "C_SH";
+      rnames = rname_sh;
       break;
     default:
       abort ();
     }
 
-  if (!abfd->flags & EXEC_P)
+  if (! bfd_get_file_flags(abfd) & EXEC_P)
     {
       hd.ep = 0;
     }
@@ -422,8 +440,7 @@ wr_hd (p)
 
   hd.os = "";
   hd.sys = "";
-  hd.mn = strip_suffix (abfd->filename);
-
+  hd.mn = strip_suffix (bfd_get_filename (abfd));
 
   sysroff_swap_hd_out (file, &hd);
 }
@@ -449,7 +466,7 @@ wr_ob (p, section)
      struct coff_ofile *p;
      struct coff_section *section;
 {
-  int i;
+  bfd_size_type i;
   int first = 1;
   unsigned char stuff[200];
 
@@ -465,7 +482,7 @@ wr_ob (p, section)
       if (first)
        {
          ob.saf = 1;
-         if (abfd->flags & EXEC_P)
+         if (bfd_get_file_flags (abfd) & EXEC_P)
            ob.address = section->address;
          else
            ob.address = 0;
@@ -485,12 +502,12 @@ wr_ob (p, section)
       i += todo;
     }
   /* Now fill the rest with blanks */
-  while (i < section->size)
+  while (i < (bfd_size_type) section->size)
     {
       struct IT_ob ob;
       int todo = 200;          /* Copy in 200 byte lumps */
       ob.spare = 0;
-      if (i + todo > section->size)
+      if (i + todo > (bfd_size_type) section->size)
        todo = section->size - i;
       ob.saf = 0;
 
@@ -959,7 +976,7 @@ walk_tree_symbol (sfile, section, symbol, nest)
 {
   struct IT_dsy dsy;
 
-  dsy.spare2 = 0;
+  memset(&dsy, 0, sizeof(dsy));
   dsy.nesting = nest;
 
   switch (symbol->type->type)
@@ -1116,12 +1133,7 @@ walk_tree_symbol (sfile, section, symbol, nest)
     }
 
   if (symbol->where->where == coff_where_register)
-    {
-      if (sh)
-       dsy.reg = rname_sh[symbol->where->offset];
-      else if (h8300)
-       dsy.reg = rname_h8300[symbol->where->offset];
-    }
+    dsy.reg = rnames[symbol->where->offset];
 
   switch (symbol->visible->type)
     {
@@ -1230,9 +1242,10 @@ wr_du (p, sfile, n)
   int j;
   unsigned int *lowest = (unsigned *) nints (p->nsections);
   unsigned int *highest = (unsigned *) nints (p->nsections);
-  du.spare = 0;
-  du.format = abfd->flags & EXEC_P ? 0 : 1;
+  du.format = bfd_get_file_flags (abfd) & EXEC_P ? 0 : 1;
   du.optimized = 0;
+  du.stackfrmt = 0;
+  du.spare = 0;
   du.unit = n;
   du.sections = p->nsections - 1;
   du.san = (int *) xcalloc (sizeof (int), du.sections);
@@ -1275,7 +1288,7 @@ wr_du (p, sfile, n)
        }
       du.san[used] = i;
       du.length[used] = highest[i] - lowest[i];
-      du.address[used] = abfd->flags & EXEC_P ? lowest[i] : 0;
+      du.address[used] = bfd_get_file_flags (abfd) & EXEC_P ? lowest[i] : 0;
       if (debug)
        {
          printf (" section %6s 0x%08x..0x%08x\n",
@@ -1664,14 +1677,14 @@ int scount = 0;
        {
          /* Don't have a symbol set aside for this section, which means that nothing
             in this file does anything for the section. */
-         sc.format = !(abfd->flags & EXEC_P);
+         sc.format = !(bfd_get_file_flags (abfd) & EXEC_P);
          sc.addr = 0;
          sc.length = 0;
          name = info[i].sec->name;
        }
       else
        {
-         if (abfd->flags & EXEC_P)
+         if (bfd_get_file_flags (abfd) & EXEC_P)
            {
              sc.format = 0;
              sc.addr = symbol->where->offset;
@@ -1713,11 +1726,15 @@ int scount = 0;
        {
          sc.contents = CONTENTS_CODE;
        }
+#if 0
       /* NEW */
       if (sc.length) {
+#endif
        sysroff_swap_sc_out (file, &sc);
        scount++;
+#if 0
       }
+#endif
     }
 return scount;
 }
@@ -1869,14 +1886,14 @@ show_usage (file, status)
      FILE *file;
      int status;
 {
-  fprintf (file, "Usage: %s [-dhVq] in-file [out-file]\n", program_name);
+  fprintf (file, _("Usage: %s [-dhVq] in-file [out-file]\n"), program_name);
   exit (status);
 }
 
 static void
 show_help ()
 {
-  printf ("%s: Convert a COFF object file into a SYSROFF object file\n",
+  printf (_("%s: Convert a COFF object file into a SYSROFF object file\n"),
          program_name);
   show_usage (stdout, 0);
 }
@@ -1900,8 +1917,12 @@ main (ac, av)
   };
   char **matching;
   char *input_file;
-
   char *output_file;
+
+  setlocale (LC_MESSAGES, "");
+  bindtextdomain (PACKAGE, LOCALEDIR);
+  textdomain (PACKAGE);
+
   program_name = av[0];
   xmalloc_set_program_name (program_name);
 
@@ -1924,7 +1945,7 @@ main (ac, av)
          show_help ();
          /*NOTREACHED */
        case 'V':
-         printf ("GNU %s version %s\n", program_name, PROGRAM_VERSION);
+         printf (_("GNU %s version %s\n"), program_name, PROGRAM_VERSION);
          exit (0);
          /*NOTREACHED */
        case 0:
@@ -1950,7 +1971,7 @@ main (ac, av)
          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);
            }
@@ -1961,7 +1982,7 @@ main (ac, av)
 
   if (!input_file)
     {
-      fprintf (stderr, "%s: no input file specified\n",
+      fprintf (stderr, _("%s: no input file specified\n"),
               program_name);
       exit (1);
     }
@@ -2008,7 +2029,7 @@ main (ac, av)
 
   if (!file)
     {
-      fprintf (stderr, "%s: unable to open output file %s\n",
+      fprintf (stderr, _("%s: unable to open output file %s\n"),
               program_name, output_file);
       exit (1);
     }
This page took 0.027702 seconds and 4 git commands to generate.