* MAINTAINERS: Added self as MN10300 co-maintainer.
[deliverable/binutils-gdb.git] / binutils / srconv.c
index 9066f1135fa7135cbba700d9df125a8a9b96a9b7..53614207a1bde21bde01f6f09cdcfd053e0e1937 100644 (file)
@@ -1,5 +1,6 @@
 /* srconv.c -- Sysroff conversion program
-   Copyright (C) 1994 Free Software Foundation, Inc.
+   Copyright 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002
+   Free Software Foundation, Inc.
 
    This file is part of GNU Binutils.
 
@@ -15,7 +16,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., 675 Mass Ave, Cambridge, MA 02139, USA.  */
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+   02111-1307, USA.  */
 
 /* Written by Steve Chamberlain (sac@cygnus.com)
 
@@ -25,7 +27,6 @@
    All debugging information is preserved */
 
 #include <bfd.h>
-#include "sysdep.h"
 #include "bucomm.h"
 #include "sysroff.h"
 #include "coffgrok.h"
 #include "coff/internal.h"
 #include "../bfd/libcoff.h"
 
-#define PROGRAM_VERSION "1.5"
 /*#define FOOP1 1 */
 
-static int sh;
-static int h8300;
-static void wr_cs ();
-static void walk_tree_scope ();
-static void wr_globals ();
-static int find_base ();
+static int addrsize;
+static char *toolname;
+static char **rnames;
+
+static int get_member_id PARAMS ((int));
+static int get_ordinary_id PARAMS ((int));
+static char *section_translate PARAMS ((char *));
+static char *strip_suffix PARAMS ((char *));
+static void checksum PARAMS ((FILE *, char *, int, int));
+static void writeINT PARAMS ((int, char *, int *, int, FILE *));
+static void writeBITS PARAMS ((int, char *, int *, int));
+static void writeBARRAY PARAMS ((barray, char *, int *, int, FILE *));
+static void writeCHARS PARAMS ((char *, char *, int *, int, FILE *));
+static void wr_tr PARAMS ((void));
+static void wr_un PARAMS ((struct coff_ofile *, struct coff_sfile *, int, int));
+static void wr_hd PARAMS ((struct coff_ofile *));
+static void wr_sh PARAMS ((struct coff_ofile *, struct coff_section *));
+static void wr_ob PARAMS ((struct coff_ofile *, struct coff_section *));
+static void wr_rl PARAMS ((struct coff_ofile *, struct coff_section *));
+static void wr_object_body PARAMS ((struct coff_ofile *));
+static void wr_dps_start
+  PARAMS ((struct coff_sfile *, struct coff_section *, struct coff_scope *,
+          int, int));
+static void wr_dps_end
+  PARAMS ((struct coff_section *, struct coff_scope *, int));
+static int *nints PARAMS ((int));
+static void walk_tree_type_1
+  PARAMS ((struct coff_sfile *, struct coff_symbol *, struct coff_type *,
+          int));
+static void walk_tree_type
+  PARAMS ((struct coff_sfile *, struct coff_symbol *, struct coff_type *,
+          int));
+static void walk_tree_symbol
+  PARAMS ((struct coff_sfile *, struct coff_section *,
+          struct coff_symbol *, int));
+static void walk_tree_scope
+  PARAMS ((struct coff_section *, struct coff_sfile *, struct coff_scope *,
+          int, int));
+static void walk_tree_sfile
+  PARAMS ((struct coff_section *, struct coff_sfile *));
+static void wr_program_structure
+  PARAMS ((struct coff_ofile *, struct coff_sfile *));
+static void wr_du PARAMS ((struct coff_ofile *, struct coff_sfile *, int));
+static void wr_dus PARAMS ((struct coff_ofile *, struct coff_sfile *));
+static int find_base PARAMS ((struct coff_sfile *, struct coff_section *));
+static void wr_dln PARAMS ((struct coff_ofile *, struct coff_sfile *, int));
+static void wr_globals
+  PARAMS ((struct coff_ofile *, struct coff_sfile *, int));
+static void wr_debug PARAMS ((struct coff_ofile *));
+static void wr_cs PARAMS ((void));
+static int wr_sc PARAMS ((struct coff_ofile *, struct coff_sfile *));
+static void wr_er PARAMS ((struct coff_ofile *, struct coff_sfile *, int));
+static void wr_ed PARAMS ((struct coff_ofile *, struct coff_sfile *, int));
+static void wr_unit_info PARAMS ((struct coff_ofile *));
+static void wr_module PARAMS ((struct coff_ofile *));
+static int align PARAMS ((int));
+static void prescan PARAMS ((struct coff_ofile *));
+static void show_usage PARAMS ((FILE *, int));
+extern int main PARAMS ((int, char **));
 
 static FILE *file;
 static bfd *abfd;
@@ -64,24 +117,13 @@ static int ids2[20000];
 static int base1 = 0x18;
 static int base2 = 0x2018;
 
-char *
-xcalloc (a, b)
-     int a;
-     int b;
-{
-  char *r = xmalloc (a * b);
-  memset (r, 0, a * b);
-  return r;
-}
-
 static int
 get_member_id (x)
      int x;
 {
   if (ids2[x])
-    {
-      return ids2[x];
-    }
+    return ids2[x];
+
   ids2[x] = base2++;
   return ids2[x];
 }
@@ -91,9 +133,8 @@ get_ordinary_id (x)
      int x;
 {
   if (ids1[x])
-    {
-      return ids1[x];
-    }
+    return ids1[x];
+
   ids1[x] = base1++;
   return ids1[x];
 }
@@ -110,11 +151,8 @@ section_translate (n)
   return n;
 }
 
-
-
 #define DATE "940201073000";   /* Just a time on my birthday */
 
-
 static
 char *
 strip_suffix (name)
@@ -122,6 +160,7 @@ strip_suffix (name)
 {
   int i;
   char *res;
+
   for (i = 0; name[i] != 0 && name[i] != '.'; i++)
     ;
   res = (char *) xmalloc (i + 1);
@@ -130,7 +169,6 @@ strip_suffix (name)
   return res;
 }
 
-
 /* IT LEN stuff CS */
 static void
 checksum (file, ptr, size, code)
@@ -143,6 +181,7 @@ checksum (file, ptr, size, code)
   int last;
   int sum = 0;
   int bytes = size / 8;
+
   last = !(code & 0xff00);
   if (size & 0x7)
     abort ();
@@ -150,17 +189,14 @@ checksum (file, ptr, size, code)
   ptr[1] = bytes + 1;
 
   for (j = 0; j < bytes; j++)
-    {
-      sum += ptr[j];
-    }
-  /* Glue on a checksum too */
+    sum += ptr[j];
+
+  /* Glue on a checksum too.  */
   ptr[bytes] = ~sum;
   fwrite (ptr, bytes + 1, 1, file);
 }
 
 
-
-
 static void
 writeINT (n, ptr, idx, size, file)
      int n;
@@ -172,17 +208,18 @@ writeINT (n, ptr, idx, size, file)
   int byte = *idx / 8;
 
   if (size == -2)
-    size = 4;
-  if (size == -1)
+    size = addrsize;
+  else if (size == -1)
     size = 0;
 
   if (byte > 240)
     {
-      /* Lets write out that record and do another one */
+      /* Lets write out that record and do another one */
       checksum (file, ptr, *idx, code | 0x1000);
       *idx = 16;
       byte = *idx / 8;
     }
+
   switch (size)
     {
     case 0:
@@ -206,7 +243,6 @@ writeINT (n, ptr, idx, size, file)
   *idx += size * 8;
 }
 
-
 static void
 writeBITS (val, ptr, idx, size)
      int val;
@@ -217,12 +253,13 @@ writeBITS (val, ptr, idx, size)
   int byte = *idx / 8;
   int bit = *idx % 8;
   int old;
+
   *idx += size;
 
   old = ptr[byte];
-  /* Turn off all about to change bits */
+  /* Turn off all about to change bits */
   old &= ~((~0 >> (8 - bit - size)) & ((1 << size) - 1));
-  /* Turn on the bits we want */
+  /* Turn on the bits we want */
   old |= (val & ((1 << size) - 1)) << (8 - bit - size);
   ptr[byte] = old;
 }
@@ -232,20 +269,16 @@ writeBARRAY (data, ptr, idx, size, file)
      barray data;
      char *ptr;
      int *idx;
-     int size;
+     int size ATTRIBUTE_UNUSED;
      FILE *file;
 {
   int i;
+
   writeINT (data.len, ptr, idx, 1, file);
   for (i = 0; i < data.len; i++)
-    {
-      writeINT (data.data[i], ptr, idx, 1, file);
-    }
-
-
-
-
+    writeINT (data.data[i], ptr, idx, 1, file);
 }
+
 static void
 writeCHARS (string, ptr, idx, size, file)
      char *string;
@@ -258,7 +291,7 @@ writeCHARS (string, ptr, idx, size, file)
 
   if (i > 240)
     {
-      /* Lets write out that record and do another one */
+      /* Lets write out that record and do another one */
       checksum (file, ptr, *idx, code | 0x1000);
       *idx = 16;
       i = *idx / 8;
@@ -266,12 +299,12 @@ writeCHARS (string, ptr, idx, size, file)
 
   if (size == 0)
     {
-      /* Variable length string */
+      /* Variable length string */
       size = strlen (string);
       ptr[i++] = size;
     }
 
-
+  /* BUG WAITING TO HAPPEN.  */
   memcpy (ptr + i, string, size);
   i += size;
   *idx = i * 8;
@@ -280,7 +313,6 @@ writeCHARS (string, ptr, idx, size, file)
 #define SYSROFF_SWAP_OUT
 #include "sysroff.c"
 
-
 static char *rname_sh[] =
 {
   "R0", "R1", "R2", "R3", "R4", "R5", "R6", "R7", "R8", "R9", "R10", "R11", "R12", "R13", "R14", "R15"
@@ -294,8 +326,15 @@ static char *rname_h8300[] =
 static void
 wr_tr ()
 {
-  struct IT_tr t;
-  sysroff_swap_tr_out (file, &t);
+  /* The TR block is not normal - it doesn't have any contents.  */
+
+  static char b[] =
+    {
+      0xff,                    /* IT */
+      0x03,                    /* RL */
+      0xfd,                    /* CS */
+    };
+  fwrite (b, 1, sizeof (b), file);
 }
 
 static void
@@ -303,31 +342,29 @@ wr_un (ptr, sfile, first, nsecs)
      struct coff_ofile *ptr;
      struct coff_sfile *sfile;
      int first;
-     int nsecs;
+     int nsecs ATTRIBUTE_UNUSED;
 {
   struct IT_un un;
-
   struct coff_symbol *s;
 
   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
-  un.nsections = ptr->nsections - 1;   /*  Don't count the abs section */
+#if 1
+  un.nsections = ptr->nsections - 1;   /*  Don't count the abs section.  */
 #else
-  /*NEW - only count sections with size */
+  /*NEW - only count sections with size */
   un.nsections = nsecs;
 #endif
 
   un.nextdefs = 0;
   un.nextrefs = 0;
-  /* Count all the undefined and defined variables with global scope */
+  /* Count all the undefined and defined variables with global scope */
 
   if (first)
     {
@@ -341,14 +378,7 @@ wr_un (ptr, sfile, first, nsecs)
            un.nextrefs++;
        }
     }
-  if (sh)
-    {
-      un.tool = "C_SH";
-    }
-  if (h8300)
-    {
-      un.tool = "C_H8/300H";
-    }
+  un.tool = toolname;
   un.tcd = DATE;
   un.linker = "L_GX00";
   un.lcd = DATE;
@@ -356,7 +386,6 @@ wr_un (ptr, sfile, first, nsecs)
   sysroff_swap_un_out (file, &un);
 }
 
-
 static void
 wr_hd (p)
      struct coff_ofile *p;
@@ -364,46 +393,67 @@ wr_hd (p)
   struct IT_hd hd;
 
   hd.spare1 = 0;
-  if (abfd->flags & EXEC_P)
-    {
-      hd.mt = MTYPE_ABS_LM;
-    }
+  if (bfd_get_file_flags (abfd) & EXEC_P)
+    hd.mt = MTYPE_ABS_LM;
   else
-    {
-      hd.mt = MTYPE_OMS_OR_LMS;
-    }
+    hd.mt = MTYPE_OMS_OR_LMS;
+
   hd.cd = DATE;
 
   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 = 32;
-      hd.afl = 2;
-      hd.spcsz = 0;
+      hd.si = 0;
+      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;
-      hd.si = 32;
-      hd.afl = 2;
-      hd.spcsz = 0;
+      hd.si = 0;
+      hd.afl = 4;
+      hd.spcsz = 32;
       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;
     }
@@ -418,8 +468,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);
 }
@@ -427,7 +476,7 @@ wr_hd (p)
 
 static void
 wr_sh (p, sec)
-     struct coff_ofile *p;
+     struct coff_ofile *p ATTRIBUTE_UNUSED;
      struct coff_section *sec;
 {
   struct IT_sh sh;
@@ -442,10 +491,10 @@ wr_sh (p, sec)
 
 static void
 wr_ob (p, section)
-     struct coff_ofile *p;
+     struct coff_ofile *p ATTRIBUTE_UNUSED;
      struct coff_section *section;
 {
-  int i;
+  bfd_size_type i;
   int first = 1;
   unsigned char stuff[200];
 
@@ -453,7 +502,8 @@ wr_ob (p, section)
   while (i < section->bfd_section->_raw_size)
     {
       struct IT_ob ob;
-      int todo = 200;          /* Copy in 200 byte lumps */
+      int todo = 200;          /* Copy in 200 byte lumps.  */
+
       ob.spare = 0;
       if (i + todo > section->bfd_section->_raw_size)
        todo = section->bfd_section->_raw_size - i;
@@ -461,7 +511,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;
@@ -473,46 +523,49 @@ wr_ob (p, section)
          ob.saf = 0;
        }
 
-      ob.cpf = 0;              /* Never compress */
+      ob.cpf = 0;              /* Never compress */
       ob.data.len = todo;
       bfd_get_section_contents (abfd, section->bfd_section, stuff, i, todo);
       ob.data.data = stuff;
       sysroff_swap_ob_out (file, &ob /*, i + todo < section->size */ );
       i += todo;
     }
-  /* Now fill the rest with blanks */
-  while (i < section->size)
+
+  /* Now fill the rest with blanks.  */
+  while (i < (bfd_size_type) section->size)
     {
       struct IT_ob ob;
-      int todo = 200;          /* Copy in 200 byte lumps */
+      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;
 
-      ob.cpf = 0;              /* Never compress */
+      ob.cpf = 0;              /* Never compress */
       ob.data.len = todo;
       memset (stuff, 0, todo);
       ob.data.data = stuff;
       sysroff_swap_ob_out (file, &ob);
       i += todo;
     }
-  /* Now fill the rest with blanks */
-
+  /* Now fill the rest with blanks.  */
 }
 
 static void
 wr_rl (ptr, sec)
-     struct coff_ofile *ptr;
+     struct coff_ofile *ptr ATTRIBUTE_UNUSED;
      struct coff_section *sec;
 {
   int nr = sec->nrelocs;
   int i;
+
   for (i = 0; i < nr; i++)
     {
       struct coff_reloc *r = sec->relocs + i;
       struct coff_symbol *ref;
       struct IT_rl rl;
+
       rl.apol = 0;
       rl.boundary = 0;
       rl.segment = 1;
@@ -520,18 +573,19 @@ wr_rl (ptr, sec)
       rl.check = 0;
       rl.addr = r->offset;
       rl.bitloc = 0;
-      rl.flen = 32;            /* SH Specific */
-      /* What sort of reloc ? Look in the section to find out */
+      rl.flen = 32;            /* SH Specific.  */
+
+      /* What sort of reloc ? Look in the section to find out.  */
       ref = r->symbol;
       if (ref->visible->type == coff_vis_ext_ref)
        {
-         rl.bcount = 4;        /* Always 4 for us */
+         rl.bcount = 4;        /* Always 4 for us */
          rl.op = OP_EXT_REF;
          rl.symn = ref->er_number;
        }
       else if (ref->visible->type == coff_vis_common)
        {
-         rl.bcount = 11;       /* Always 11 for us */
+         rl.bcount = 11;       /* Always 11 for us */
          rl.op = OP_SEC_REF;
          rl.secn = ref->where->section->number;
          rl.copcode_is_3 = 3;
@@ -539,10 +593,9 @@ wr_rl (ptr, sec)
          rl.addend = ref->where->offset - ref->where->section->address;
          rl.aopcode_is_0x20 = 0x20;
        }
-
       else
        {
-         rl.bcount = 11;       /* Always 11 for us */
+         rl.bcount = 11;       /* Always 11 for us */
          rl.op = OP_SEC_REF;
          rl.secn = ref->where->section->number;
          rl.copcode_is_3 = 3;
@@ -550,12 +603,12 @@ wr_rl (ptr, sec)
          rl.addend = -ref->where->section->address;
          rl.aopcode_is_0x20 = 0x20;
        }
+
       rl.end = 0xff;
-      if (rl.op == OP_SEC_REF
+
+      if (   rl.op == OP_SEC_REF
          || rl.op == OP_EXT_REF)
-       {
-         sysroff_swap_rl_out (file, &rl);
-       }
+       sysroff_swap_rl_out (file, &rl);
     }
 }
 
@@ -564,6 +617,7 @@ wr_object_body (p)
      struct coff_ofile *p;
 {
   int i;
+
   for (i = 1; i < p->nsections; i++)
     {
       wr_sh (p, p->sections + i);
@@ -575,27 +629,29 @@ wr_object_body (p)
 static void
 wr_dps_start (sfile, section, scope, type, nest)
      struct coff_sfile *sfile;
-     struct coff_section *section;
+     struct coff_section *section ATTRIBUTE_UNUSED;
      struct coff_scope *scope;
      int type;
      int nest;
 {
   struct IT_dps dps;
+
   dps.end = 0;
   dps.opt = 0;
   dps.type = type;
+
   if (scope->sec)
     {
       dps.san = scope->sec->number;
       dps.address = scope->offset - find_base (sfile, scope->sec);
       dps.block_size = scope->size;
+
       if (debug)
        {
          printf ("DPS %s %d %x\n",
                  sfile->name,
                  nest,
                  dps.address);
-
        }
     }
   else
@@ -612,11 +668,12 @@ wr_dps_start (sfile, section, scope, type, nest)
 
 static void
 wr_dps_end (section, scope, type)
-     struct coff_section *section;
-     struct coff_scope *scope;
+     struct coff_section *section ATTRIBUTE_UNUSED;
+     struct coff_scope *scope ATTRIBUTE_UNUSED;
      int type;
 {
   struct IT_dps dps;
+
   dps.end = 1;
   dps.type = type;
   sysroff_swap_dps_out (file, &dps);
@@ -629,7 +686,6 @@ nints (x)
   return (int *) (xcalloc (sizeof (int), x));
 }
 
-static void walk_tree_symbol ();
 static void
 walk_tree_type_1 (sfile, symbol, type, nest)
      struct coff_sfile *sfile;
@@ -652,11 +708,13 @@ walk_tree_type_1 (sfile, symbol, type, nest)
            dbt.sign = BTYPE_UNSPEC;
            dbt.fptype = FPTYPE_NOTSPEC;
            break;
+
          case T_CHAR:
            dbt.btype = BTYPE_CHAR;
            dbt.sign = BTYPE_UNSPEC;
            dbt.fptype = FPTYPE_NOTSPEC;
            break;
+
          case T_SHORT:
          case T_INT:
          case T_LONG:
@@ -664,23 +722,28 @@ walk_tree_type_1 (sfile, symbol, type, nest)
            dbt.sign = SIGN_SIGNED;
            dbt.fptype = FPTYPE_NOTSPEC;
            break;
+
          case T_FLOAT:
            dbt.btype = BTYPE_FLOAT;
            dbt.fptype = FPTYPE_SINGLE;
            break;
+
          case T_DOUBLE:
            dbt.btype = BTYPE_FLOAT;
            dbt.fptype = FPTYPE_DOUBLE;
            break;
+
          case T_LNGDBL:
            dbt.btype = BTYPE_FLOAT;
            dbt.fptype = FPTYPE_EXTENDED;
            break;
+
          case T_UCHAR:
            dbt.btype = BTYPE_CHAR;
            dbt.sign = SIGN_UNSIGNED;
            dbt.fptype = FPTYPE_NOTSPEC;
            break;
+
          case T_USHORT:
          case T_UINT:
          case T_ULONG:
@@ -689,14 +752,17 @@ walk_tree_type_1 (sfile, symbol, type, nest)
            dbt.fptype = FPTYPE_NOTSPEC;
            break;
          }
+
        dbt.bitsize = type->size;
        dbt.neg = 0x1001;
        sysroff_swap_dbt_out (file, &dbt);
        break;
       }
+
     case coff_pointer_type:
       {
        struct IT_dpt dpt;
+
        walk_tree_type_1 (sfile, symbol, type->u.pointer.points_to, nest + 1);
        dpt.neg = 0x1001;
        sysroff_swap_dpt_out (file, &dpt);
@@ -707,6 +773,7 @@ walk_tree_type_1 (sfile, symbol, type, nest)
       {
        struct IT_dfp dfp;
        struct coff_symbol *param;
+
        dfp.end = 0;
        dfp.spare = 0;
        dfp.nparams = type->u.function.parameters->nvars;
@@ -719,9 +786,8 @@ walk_tree_type_1 (sfile, symbol, type, nest)
        for (param = type->u.function.parameters->vars_head;
             param;
             param = param->next)
-         {
-           walk_tree_symbol (sfile, 0, param, nest);
-         }
+         walk_tree_symbol (sfile, 0, param, nest);
+
        dfp.end = 1;
        sysroff_swap_dfp_out (file, &dfp);
        break;
@@ -732,6 +798,7 @@ walk_tree_type_1 (sfile, symbol, type, nest)
        struct IT_dbt dbt;
        struct IT_dds dds;
        struct coff_symbol *member;
+
        dds.spare = 0;
        dbt.btype = BTYPE_STRUCT;
        dbt.bitsize = type->size;
@@ -743,43 +810,43 @@ walk_tree_type_1 (sfile, symbol, type, nest)
        dds.end = 0;
        dds.neg = 0x1001;
        sysroff_swap_dds_out (file, &dds);
+
        for (member = type->u.astructdef.elements->vars_head;
             member;
             member = member->next)
-         {
-           walk_tree_symbol (sfile, 0, member, nest + 1);
-         }
+         walk_tree_symbol (sfile, 0, member, nest + 1);
 
        dds.end = 1;
        sysroff_swap_dds_out (file, &dds);
 
       }
       break;
+
     case coff_structref_type:
       {
        struct IT_dbt dbt;
+
        dbt.btype = BTYPE_TAG;
        dbt.bitsize = type->size;
        dbt.sign = SIGN_UNSPEC;
        dbt.fptype = FPTYPE_NOTSPEC;
+
        if (type->u.astructref.ref)
-         {
-           dbt.sid = get_member_id (type->u.astructref.ref->number);
-         }
+         dbt.sid = get_member_id (type->u.astructref.ref->number);
        else
-         {
-           dbt.sid = 0;
-         }
+         dbt.sid = 0;
 
        dbt.neg = 0x1001;
        sysroff_swap_dbt_out (file, &dbt);
       }
       break;
+
     case coff_array_type:
       {
        struct IT_dar dar;
        int j;
-       int dims = 1;           /* Only output one dimension at a time */
+       int dims = 1;           /* Only output one dimension at a time.  */
+
        dar.dims = dims;
        dar.variable = nints (dims);
        dar.subtype = nints (dims);
@@ -792,6 +859,7 @@ walk_tree_type_1 (sfile, symbol, type, nest)
        dar.minspare = nints (dims);
        dar.neg = 0x1001;
        dar.length = type->size / type->u.array.dim;
+
        for (j = 0; j < dims; j++)
          {
            dar.variable[j] = VARIABLE_FIXED;
@@ -806,11 +874,13 @@ walk_tree_type_1 (sfile, symbol, type, nest)
        sysroff_swap_dar_out (file, &dar);
       }
       break;
+
     case coff_enumdef_type:
       {
        struct IT_dbt dbt;
        struct IT_den den;
        struct coff_symbol *member;
+
        dbt.btype = BTYPE_ENUM;
        dbt.bitsize = type->size;
        dbt.sign = SIGN_UNSPEC;
@@ -823,22 +893,21 @@ walk_tree_type_1 (sfile, symbol, type, nest)
        den.neg = 0x1001;
        den.spare = 0;
        sysroff_swap_den_out (file, &den);
+
        for (member = type->u.aenumdef.elements->vars_head;
             member;
             member = member->next)
-         {
-           walk_tree_symbol (sfile, 0, member, nest + 1);
-         }
+         walk_tree_symbol (sfile, 0, member, nest + 1);
 
        den.end = 1;
        sysroff_swap_den_out (file, &den);
       }
       break;
 
-      break;
     case coff_enumref_type:
       {
        struct IT_dbt dbt;
+
        dbt.btype = BTYPE_TAG;
        dbt.bitsize = type->size;
        dbt.sign = SIGN_UNSPEC;
@@ -848,6 +917,7 @@ walk_tree_type_1 (sfile, symbol, type, nest)
        sysroff_swap_dbt_out (file, &dbt);
       }
       break;
+
     default:
       abort ();
     }
@@ -893,17 +963,15 @@ walk_tree_type_1 (sfile, symbol, type, nest)
 
 static void
 walk_tree_type (sfile, symbol, type, nest)
-
-     struct
-     coff_sfile *sfile;
+     struct coff_sfile *sfile;
      struct coff_symbol *symbol;
      struct coff_type *type;
      int nest;
 {
   if (symbol->type->type == coff_function_type)
     {
-
       struct IT_dty dty;
+
       dty.end = 0;
       dty.neg = 0x1001;
 
@@ -929,11 +997,11 @@ walk_tree_type (sfile, symbol, type, nest)
                  BLOCK_TYPE_BLOCK);
       wr_dps_end (symbol->where->section,
                  symbol->type->u.function.code, BLOCK_TYPE_FUNCTION);
-
     }
   else
     {
       struct IT_dty dty;
+
       dty.end = 0;
       dty.neg = 0x1001;
       sysroff_swap_dty_out (file, &dty);
@@ -941,21 +1009,18 @@ walk_tree_type (sfile, symbol, type, nest)
       dty.end = 1;
       sysroff_swap_dty_out (file, &dty);
     }
-
 }
 
-
-
 static void
 walk_tree_symbol (sfile, section, symbol, nest)
      struct coff_sfile *sfile;
-     struct coff_section *section;
+     struct coff_section *section ATTRIBUTE_UNUSED;
      struct coff_symbol *symbol;
      int nest;
 {
   struct IT_dsy dsy;
 
-  dsy.spare2 = 0;
+  memset (&dsy, 0, sizeof(dsy));
   dsy.nesting = nest;
 
   switch (symbol->type->type)
@@ -964,6 +1029,7 @@ walk_tree_symbol (sfile, section, symbol, nest)
       dsy.type = STYPE_FUNC;
       dsy.assign = 1;
       break;
+
     case coff_structref_type:
     case coff_pointer_type:
     case coff_array_type:
@@ -972,18 +1038,22 @@ walk_tree_symbol (sfile, section, symbol, nest)
       dsy.type = STYPE_VAR;
       dsy.assign = 1;
       break;
+
     case coff_enumdef_type:
       dsy.type = STYPE_TAG;
       dsy.assign = 0;
       dsy.magic = 2;
       break;
+
     case coff_structdef_type:
       dsy.type = STYPE_TAG;
       dsy.assign = 0;
       dsy.magic = symbol->type->u.astructdef.isstruct ? 0 : 1;
       break;
+
     case coff_secdef_type:
       return;
+
     default:
       abort ();
     }
@@ -993,12 +1063,13 @@ walk_tree_symbol (sfile, section, symbol, nest)
       dsy.assign = 0;
       dsy.type = STYPE_MEMBER;
     }
+
   if (symbol->where->where == coff_where_member_of_enum)
     {
       dsy.type = STYPE_ENUM;
       dsy.assign = 0;
-      dsy.vallen = 4;
-      dsy.value = symbol->where->offset;
+      dsy.evallen = 4;
+      dsy.evalue = symbol->where->offset;
     }
 
   if (symbol->type->type == coff_structdef_type
@@ -1012,7 +1083,6 @@ walk_tree_symbol (sfile, section, symbol, nest)
       dsy.snumber = get_ordinary_id (symbol->number);
     }
 
-
   dsy.sname = symbol->name[0] == '_' ? symbol->name + 1 : symbol->name;
 
   switch (symbol->visible->type)
@@ -1021,30 +1091,37 @@ walk_tree_symbol (sfile, section, symbol, nest)
     case coff_vis_ext_def:
       dsy.ainfo = AINFO_STATIC_EXT_DEF;
       break;
+
     case coff_vis_ext_ref:
       dsy.ainfo = AINFO_STATIC_EXT_REF;
       break;
+
     case coff_vis_int_def:
       dsy.ainfo = AINFO_STATIC_INT;
       break;
+
     case coff_vis_auto:
     case coff_vis_autoparam:
       dsy.ainfo = AINFO_AUTO;
       break;
+
     case coff_vis_register:
     case coff_vis_regparam:
       dsy.ainfo = AINFO_REG;
       break;
       break;
+
     case coff_vis_tag:
     case coff_vis_member_of_struct:
     case coff_vis_member_of_enum:
       break;
+
     default:
       abort ();
     }
 
   dsy.dlength = symbol->type->size;
+
   switch (symbol->where->where)
     {
     case coff_where_memory:
@@ -1054,16 +1131,17 @@ walk_tree_symbol (sfile, section, symbol, nest)
       dsy.section = 0;
 #endif
       break;
+
     case coff_where_member_of_struct:
     case coff_where_member_of_enum:
     case coff_where_stack:
     case coff_where_register:
     case coff_where_unknown:
     case coff_where_strtag:
-
     case coff_where_entag:
     case coff_where_typedef:
       break;
+
     default:
       abort ();
     }
@@ -1073,12 +1151,12 @@ walk_tree_symbol (sfile, section, symbol, nest)
     case coff_where_memory:
       dsy.address = symbol->where->offset - find_base (sfile, symbol->where->section);
       break;
+
     case coff_where_stack:
       dsy.address = symbol->where->offset;
       break;
-    case coff_where_member_of_struct:
-
 
+    case coff_where_member_of_struct:
       if (symbol->where->bitsize)
        {
          int bits = (symbol->where->offset * 8 + symbol->where->bitoffset);
@@ -1095,37 +1173,33 @@ walk_tree_symbol (sfile, section, symbol, nest)
          dsy.field_off = symbol->where->offset;
        }
       break;
+
     case coff_where_member_of_enum:
       /*      dsy.bitunit = 0;
          dsy.field_len  = symbol->type->size;
          dsy.field_off = symbol->where->offset; */
       break;
+
     case coff_where_register:
     case coff_where_unknown:
     case coff_where_strtag:
-
     case coff_where_entag:
     case coff_where_typedef:
       break;
+
     default:
       abort ();
     }
 
   if (symbol->where->where == coff_where_register)
-    {
-      if (sh)
-       dsy.reg = rname_sh[symbol->where->offset];
-      if (h8300)
-       dsy.reg = rname_h8300[symbol->where->offset];
-    }
+    dsy.reg = rnames[symbol->where->offset];
 
   switch (symbol->visible->type)
     {
     case coff_vis_common:
-      /* We do this 'cause common C symbols are treated as extdefs */
+      /* We do this 'cause common C symbols are treated as extdefs */
     case coff_vis_ext_def:
     case coff_vis_ext_ref:
-
       dsy.ename = symbol->name;
       break;
 
@@ -1135,29 +1209,26 @@ walk_tree_symbol (sfile, section, symbol, nest)
       break;
 
     case coff_vis_int_def:
-
     case coff_vis_auto:
     case coff_vis_register:
     case coff_vis_tag:
     case coff_vis_member_of_struct:
     case coff_vis_member_of_enum:
       break;
+
     default:
       abort ();
     }
 
   dsy.sfn = 0;
   dsy.sln = 2;
-
   dsy.neg = 0x1001;
 
-
   sysroff_swap_dsy_out (file, &dsy);
 
   walk_tree_type (sfile, symbol, symbol->type, nest);
 }
 
-
 static void
 walk_tree_scope (section, sfile, scope, nest, type)
      struct coff_section *section;
@@ -1178,25 +1249,21 @@ walk_tree_scope (section, sfile, scope, nest, type)
        wr_globals (tree, sfile, nest + 1);
 
       for (vars = scope->vars_head; vars; vars = vars->next)
-       {
-         walk_tree_symbol (sfile, section, vars, nest);
-       }
+       walk_tree_symbol (sfile, section, vars, nest);
 
       for (child = scope->list_head; child; child = child->next)
-       {
-         walk_tree_scope (section, sfile, child, nest + 1, BLOCK_TYPE_BLOCK);
-       }
+       walk_tree_scope (section, sfile, child, nest + 1, BLOCK_TYPE_BLOCK);
 
       wr_dps_end (section, scope, type);
     }
 }
+
 static void
 walk_tree_sfile (section, sfile)
      struct coff_section *section;
      struct coff_sfile *sfile;
 {
   walk_tree_scope (section, sfile, sfile->scope, 0, BLOCK_TYPE_COMPUNIT);
-
 }
 
 static void
@@ -1204,9 +1271,7 @@ wr_program_structure (p, sfile)
      struct coff_ofile *p;
      struct coff_sfile *sfile;
 {
-
   walk_tree_sfile (p->sections + 4, sfile);
-
 }
 
 static void
@@ -1226,9 +1291,11 @@ 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);
@@ -1242,7 +1309,7 @@ wr_du (p, sfile, n)
     }
 
   /* Look through all the symbols and try and work out the extents in this
-     source file */
+     source file */
 #if 0
   for (symbol = sfile->scope->vars_head;
        symbol;
@@ -1262,16 +1329,15 @@ wr_du (p, sfile, n)
        }
     }
 
-
   for (i = 0; i < du.sections; i++)
     {
       if (highest[i] == 0)
-       {
-         lowest[i] = highest[i] = incit;
-       }
+       lowest[i] = highest[i] = incit;
+
       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",
@@ -1281,14 +1347,16 @@ wr_du (p, sfile, n)
        }
       used++;
     }
-
 #endif
+
   lim = du.sections;
   for (j = 0; j < lim; j++)
     {
       int src = j;
       int dst = j;
+
       du.san[dst] = dst;
+
       if (sfile->section[src].init)
        {
          du.length[dst]
@@ -1301,6 +1369,7 @@ wr_du (p, sfile, n)
          du.length[dst] = 0;
          du.address[dst] = 0;
        }
+
       if (debug)
        {
          if (sfile->section[src].parent)
@@ -1311,6 +1380,7 @@ wr_du (p, sfile, n)
                      du.address[dst] + du.length[dst] - 1);
            }
        }
+
       du.sections = dst + 1;
     }
 
@@ -1322,10 +1392,9 @@ wr_du (p, sfile, n)
 
 static void
 wr_dus (p, sfile)
-     struct coff_ofile *p;
+     struct coff_ofile *p ATTRIBUTE_UNUSED;
      struct coff_sfile *sfile;
 {
-
   struct IT_dus dus;
 
   dus.efn = 0x1001;
@@ -1334,7 +1403,7 @@ wr_dus (p, sfile)
   dus.fname = (char **) xcalloc (sizeof (char *), dus.ns);
   dus.spare = nints (dus.ns);
   dus.ndir = 0;
-  /* Find the filenames */
+  /* Find the filenames */
 #if 0
   i = 0;
 
@@ -1357,7 +1426,7 @@ wr_dus (p, sfile)
 }
 
 /* Find the offset of the .text section for this sfile in the
-   .text section for the output file */
+   .text section for the output file */
 
 static int
 find_base (sfile, section)
@@ -1366,11 +1435,12 @@ find_base (sfile, section)
 {
   return sfile->section[section->number].low;
 }
+
 static void
 wr_dln (p, sfile, n)
-     struct coff_ofile *p;
+     struct coff_ofile *p ATTRIBUTE_UNUSED;
      struct coff_sfile *sfile;
-     int n;
+     int n ATTRIBUTE_UNUSED;
 
 {
 #if 0
@@ -1505,14 +1575,16 @@ wr_dln (p, sfile, n)
 #endif
 }
 
-/* Write the global symbols out to the debug info */
+/* Write the global symbols out to the debug info.  */
+
 static void
 wr_globals (p, sfile, n)
      struct coff_ofile *p;
      struct coff_sfile *sfile;
-     int n;
+     int n ATTRIBUTE_UNUSED;
 {
   struct coff_symbol *sy;
+
   for (sy = p->symbol_list_head;
        sy;
        sy = sy->next_in_ofile_list)
@@ -1521,10 +1593,9 @@ wr_globals (p, sfile, n)
          || sy->visible->type == coff_vis_ext_ref)
        {
          /* Only write out symbols if they belong to
-            the current source file */
+            the current source file */
          if (sy->sfile == sfile)
            walk_tree_symbol (sfile, 0, sy, 0);
-
        }
     }
 }
@@ -1535,15 +1606,14 @@ wr_debug (p)
 {
   struct coff_sfile *sfile;
   int n = 0;
+
   for (sfile = p->source_head;
        sfile;
        sfile = sfile->next)
-
     {
       if (debug)
-       {
-         printf ("%s\n", sfile->name);
-       }
+       printf ("%s\n", sfile->name);
+
       wr_du (p, sfile, n);
       wr_dus (p, sfile);
       wr_program_structure (p, sfile);
@@ -1551,21 +1621,54 @@ wr_debug (p)
       n++;
     }
 }
+
 static void
 wr_cs ()
 {
   /* It seems that the CS struct is not normal - the size is wrong
-     heres one I prepared earlier.. */
+     heres one I prepared earlier.  */
   static char b[] =
-  {0x80, 0x21, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x80, 0x80,
-   0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x00,
-   0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0xde};
+    {
+    0x80,                      /* IT */
+    0x21,                      /* RL */
+    0x00,                      /* number of chars in variable length part */
+    0x80,                      /* hd */ 
+    0x00,                      /* hs */ 
+    0x80,                      /* un */ 
+    0x00,                      /* us */ 
+    0x80,                      /* sc */ 
+    0x00,                      /* ss */ 
+    0x80,                      /* er */ 
+    0x80,                      /* ed */ 
+    0x80,                      /* sh */ 
+    0x80,                      /* ob */ 
+    0x80,                      /* rl */ 
+    0x80,                      /* du */
+    0x80,                      /* dps */
+    0x80,                      /* dsy */
+    0x80,                      /* dty */
+    0x80,                      /* dln */
+    0x80,                      /* dso */
+    0x80,                      /* dus */
+    0x00,                      /* dss */
+    0x80,                      /* dbt */
+    0x00,                      /* dpp */
+    0x80,                      /* dfp */
+    0x80,                      /* den */
+    0x80,                      /* dds */
+    0x80,                      /* dar */
+    0x80,                      /* dpt */
+    0x00,                      /* dul */
+    0x00,                      /* dse */
+    0x00,                      /* dot */
+    0xDE                       /* CS */
+  };
   fwrite (b, 1, sizeof (b), file);
 }
 
 /* Write out the SC records for a unit.  Create an SC
    for all the sections which appear in the output file, even
-   if there isn't an equivalent one on the input */
+   if there isn't an equivalent one on the input */
 
 static int
 wr_sc (ptr, sfile)
@@ -1573,23 +1676,19 @@ wr_sc (ptr, sfile)
      struct coff_sfile *sfile;
 {
   int i;
-int scount = 0;
-  /* First work out the total number of sections */
-
+  int scount = 0;
+  /* First work out the total number of sections.  */
   int total_sec = ptr->nsections;
-
   struct myinfo
     {
       struct coff_section *sec;
       struct coff_symbol *symbol;
     };
   struct coff_symbol *symbol;
-
   struct myinfo *info
     = (struct myinfo *) calloc (total_sec, sizeof (struct myinfo));
 
 
-
   for (i = 0; i < total_sec; i++)
     {
       info[i].sec = ptr->sections + i;
@@ -1615,27 +1714,28 @@ int scount = 0;
     }
 
   /* Now output all the section info, and fake up some stuff for sections
-     we don't have */
-
+     we don't have.  */
   for (i = 1; i < total_sec; i++)
     {
       struct IT_sc sc;
       char *name;
+
       symbol = info[i].symbol;
       sc.spare = 0;
       sc.spare1 = 0;
+
       if (!symbol)
        {
-         /* 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);
+         /* Don't have a symbol set aside for this section, which means
+            that nothing in this file does anything for the section.  */
+         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;
@@ -1650,7 +1750,6 @@ int scount = 0;
        }
 
       sc.align = 4;
-
       sc.concat = CONCAT_SIMPLE;
       sc.read = 3;
       sc.write = 3;
@@ -1659,8 +1758,9 @@ int scount = 0;
       sc.mode = 3;
       sc.spare = 0;
       sc.segadd = 0;
-      sc.spare1 = 0;           /* If not zero, then it doesn't work */
+      sc.spare1 = 0;           /* If not zero, then it doesn't work */
       sc.name = section_translate (name);
+
       if (strlen (sc.name) == 1)
        {
          switch (sc.name[0])
@@ -1669,6 +1769,7 @@ int scount = 0;
            case 'B':
              sc.contents = CONTENTS_DATA;
              break;
+
            default:
              sc.contents = CONTENTS_CODE;
            }
@@ -1677,23 +1778,31 @@ int scount = 0;
        {
          sc.contents = CONTENTS_CODE;
        }
+#if 0
       /* NEW */
-      if (sc.length) {
-       sysroff_swap_sc_out (file, &sc);
-       scount++;
-      }
+      if (sc.length)
+       {
+#endif
+         sysroff_swap_sc_out (file, &sc);
+         scount++;
+#if 0
+       }
+#endif
     }
-return scount;
+  return scount;
 }
 
+/* Write out the ER records for a unit.  */
+
 static void
 wr_er (ptr, sfile, first)
      struct coff_ofile *ptr;
-     struct coff_sfile *sfile;
+     struct coff_sfile *sfile ATTRIBUTE_UNUSED;
      int first;
 {
   int idx = 0;
   struct coff_symbol *sym;
+
   if (first)
     {
       for (sym = ptr->symbol_list_head; sym; sym = sym->next_in_ofile_list)
@@ -1701,24 +1810,27 @@ wr_er (ptr, sfile, first)
          if (sym->visible->type == coff_vis_ext_ref)
            {
              struct IT_er er;
+
              er.spare = 0;
              er.type = ER_NOTSPEC;
              er.name = sym->name;
              sysroff_swap_er_out (file, &er);
              sym->er_number = idx++;
-
            }
        }
     }
 }
 
+/* Write out the ED records for a unit.  */
+
 static void
 wr_ed (ptr, sfile, first)
      struct coff_ofile *ptr;
-     struct coff_sfile *sfile;
+     struct coff_sfile *sfile ATTRIBUTE_UNUSED;
      int first;
 {
   struct coff_symbol *s;
+
   if (first)
     {
       for (s = ptr->symbol_list_head; s; s = s->next_in_ofile_list)
@@ -1730,6 +1842,7 @@ wr_ed (ptr, sfile, first)
 
              ed.section = s->where->section->number;
              ed.spare = 0;
+
              if (s->where->section->data)
                {
                  ed.type = ED_TYPE_DATA;
@@ -1743,6 +1856,7 @@ wr_ed (ptr, sfile, first)
                  ed.type = ED_TYPE_NOTSPEC;
                  ed.type = ED_TYPE_DATA;
                }
+
              ed.address = s->where->offset - s->where->section->address;
              ed.name = s->name;
              sysroff_swap_ed_out (file, &ed);
@@ -1757,6 +1871,7 @@ wr_unit_info (ptr)
 {
   struct coff_sfile *sfile;
   int first = 1;
+
   for (sfile = ptr->source_head;
        sfile;
        sfile = sfile->next)
@@ -1764,13 +1879,14 @@ wr_unit_info (ptr)
       long p1;
       long p2;
       int nsecs;
+
       p1 = ftell (file);
       wr_un (ptr, sfile, first, 0);
       nsecs = wr_sc (ptr, sfile);
       p2 = ftell (file);
-      fseek (file, p1, 0);
+      fseek (file, p1, SEEK_SET);
       wr_un (ptr, sfile, first, nsecs);
-      fseek (file, p2, 0);      
+      fseek (file, p2, SEEK_SET); 
       wr_er (ptr, sfile, first);
       wr_ed (ptr, sfile, first);
       first = 0;
@@ -1797,7 +1913,7 @@ align (x)
 }
 
 /* Find all the common variables and turn them into
-   ordinary defs - dunno why, but thats what hitachi does with 'em */
+   ordinary defs - dunno why, but thats what hitachi does with 'em */
 
 static void
 prescan (tree)
@@ -1805,8 +1921,10 @@ prescan (tree)
 {
   struct coff_symbol *s;
   struct coff_section *common_section;
-  /* Find the common section - always section 3 */
+
+  /* Find the common section - always section 3.  */
   common_section = tree->sections + 3;
+
   for (s = tree->symbol_list_head;
        s;
        s = s->next_in_ofile_list)
@@ -1831,20 +1949,20 @@ show_usage (file, status)
      FILE *file;
      int status;
 {
-  fprintf (file, "Usage: %s [-dhVq] in-file [out-file]\n", program_name);
+  fprintf (file, _("Usage: %s [option(s)] in-file [out-file]\n"), program_name);
+  fprintf (file, _("Convert a COFF object file into a SYSROFF object file\n"));
+  fprintf (file, _(" The options are:\n\
+  -q --quick       (Obsolete - ignoerd)\n\
+  -n --noprescan   Do not perform a scan to convert commons into defs\n\
+  -d --debug       Display information about what is being done\n\
+  -h --help        Display this information\n\
+  -v --version     Print the program's version number\n"));
+
+  if (status == 0)
+    fprintf (file, _("Report bugs to %s\n"), REPORT_BUGS_TO);
   exit (status);
 }
 
-static void
-show_help ()
-{
-  printf ("%s: Convert a COFF object file into a SYSROFF object file\n",
-         program_name);
-  show_usage (stdout, 0);
-}
-
-
-
 int
 main (ac, av)
      int ac;
@@ -1862,12 +1980,21 @@ main (ac, av)
   };
   char **matching;
   char *input_file;
-
   char *output_file;
+
+#if defined (HAVE_SETLOCALE) && defined (HAVE_LC_MESSAGES)
+  setlocale (LC_MESSAGES, "");
+#endif
+#if defined (HAVE_SETLOCALE)
+  setlocale (LC_CTYPE, "");
+#endif
+  bindtextdomain (PACKAGE, LOCALEDIR);
+  textdomain (PACKAGE);
+
   program_name = av[0];
   xmalloc_set_program_name (program_name);
 
-  while ((opt = getopt_long (ac, av, "dhVqn", long_options,
+  while ((opt = getopt_long (ac, av, "dHhVvqn", long_options,
                             (int *) NULL))
         != EOF)
     {
@@ -1882,11 +2009,13 @@ main (ac, av)
        case 'd':
          debug = 1;
          break;
+       case 'H':
        case 'h':
-         show_help ();
+         show_usage (stdout, 0);
          /*NOTREACHED */
+       case 'v':
        case 'V':
-         printf ("GNU %s version %s\n", program_name, PROGRAM_VERSION);
+         print_version ("srconv");
          exit (0);
          /*NOTREACHED */
        case 0:
@@ -1911,10 +2040,7 @@ main (ac, av)
            show_usage (stderr, 1);
          if (strcmp (input_file, output_file) == 0)
            {
-             fprintf (stderr,
-                      "%s: input and output files must be different\n",
-                      program_name);
-             exit (1);
+             fatal (_("input and output files must be different"));
            }
        }
     }
@@ -1923,9 +2049,7 @@ main (ac, av)
 
   if (!input_file)
     {
-      fprintf (stderr, "%s: no input file specified\n",
-              program_name);
-      exit (1);
+      fatal (_("no input file specified"));
     }
 
   if (!output_file)
@@ -1934,8 +2058,10 @@ main (ac, av)
          it doesn't end in .o, then stick a .obj on anyway */
 
       int len = strlen (input_file);
+
       output_file = xmalloc (len + 5);
       strcpy (output_file, input_file);
+
       if (len > 3
          && output_file[len - 2] == '.'
          && output_file[len - 1] == 'o')
@@ -1958,6 +2084,7 @@ main (ac, av)
   if (!bfd_check_format_matches (abfd, bfd_object, &matching))
     {
       bfd_nonfatal (input_file);
+
       if (bfd_get_error () == bfd_error_file_ambiguously_recognized)
        {
          list_matching_formats (matching);
@@ -1966,20 +2093,19 @@ main (ac, av)
       exit (1);
     }
 
-  file = fopen (output_file, "wb");
+  file = fopen (output_file, FOPEN_WB);
 
   if (!file)
-    {
-      fprintf (stderr, "%s: unable to open output file %s\n",
-              program_name, output_file);
-      exit (1);
-    }
+    fatal (_("unable to open output file %s"), output_file);
 
   if (debug)
     printf ("ids %d %d\n", base1, base2);
+
   tree = coff_grok (abfd);
+
   if (!noprescan)
     prescan (tree);
+
   wr_module (tree);
   return 0;
 }
This page took 0.042855 seconds and 4 git commands to generate.