[MIPS] Add Loongson 2K1000 proccessor support.
[deliverable/binutils-gdb.git] / binutils / sysdump.c
index 3b219c764a6a7fa8be7c2dcc049884d011a5ff03..be026f8f17ca44ce5f0a134ee5e89076371266c9 100644 (file)
@@ -1,12 +1,11 @@
 /* Sysroff object format dumper.
 /* Sysroff object format dumper.
-   Copyright 1994, 1995, 1998, 1999, 2000, 2001, 2002, 2003, 2005
-   Free Software Foundation, Inc.
+   Copyright (C) 1994-2018 Free Software Foundation, Inc.
 
    This file is part of GNU Binutils.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
 
    This file is part of GNU Binutils.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -16,8 +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
 
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-   02111-1307, USA.  */
+   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+   02110-1301, USA.  */
 
 
 /* Written by Steve Chamberlain <sac@cygnus.com>.
 
 
 /* Written by Steve Chamberlain <sac@cygnus.com>.
  This program reads a SYSROFF object file and prints it in an
  almost human readable form to stdout.  */
 
  This program reads a SYSROFF object file and prints it in an
  almost human readable form to stdout.  */
 
+#include "sysdep.h"
 #include "bfd.h"
 #include "bfd.h"
-#include "bucomm.h"
 #include "safe-ctype.h"
 #include "safe-ctype.h"
-
-#include <stdio.h>
 #include "libiberty.h"
 #include "getopt.h"
 #include "libiberty.h"
 #include "getopt.h"
+#include "bucomm.h"
 #include "sysroff.h"
 
 static int dump = 1;
 #include "sysroff.h"
 
 static int dump = 1;
@@ -40,30 +38,9 @@ static int code;
 static int addrsize = 4;
 static FILE *file;
 
 static int addrsize = 4;
 static FILE *file;
 
-static void dh (unsigned char *, int);
-static void itheader (char *, int);
-static void p (void);
-static void tabout (void);
-static void pbarray (barray *);
-static int getone (int);
-static int opt (int);
-static void must (int);
-static void tab (int, char *);
-static void dump_symbol_info (void);
 static void derived_type (void);
 static void derived_type (void);
-static void module (void);
-static void show_usage (FILE *, int);
-
-extern char *getCHARS (unsigned char *, int *, int, int);
-extern int fillup (unsigned char *);
-extern barray getBARRAY (unsigned char *, int *, int, int);
-extern int getINT (unsigned char *, int *, int, int);
-extern int getBITS (unsigned char *, int *, int, int);
-extern void sysroff_swap_tr_in (void);
-extern void sysroff_print_tr_out (void);
-extern int main (int, char **);
-
-char *
+
+static char *
 getCHARS (unsigned char *ptr, int *idx, int size, int max)
 {
   int oc = *idx / 8;
 getCHARS (unsigned char *ptr, int *idx, int size, int max)
 {
   int oc = *idx / 8;
@@ -71,10 +48,13 @@ getCHARS (unsigned char *ptr, int *idx, int size, int max)
   int b = size;
 
   if (b >= max)
   int b = size;
 
   if (b >= max)
-    return "*undefined*";
+    return _("*undefined*");
 
   if (b == 0)
     {
 
   if (b == 0)
     {
+      /* PR 17512: file: 13caced2.  */
+      if (oc >= max)
+       return _("*corrupt*");
       /* Got to work out the length of the string from self.  */
       b = ptr[oc++];
       (*idx) += 8;
       /* Got to work out the length of the string from self.  */
       b = ptr[oc++];
       (*idx) += 8;
@@ -120,30 +100,37 @@ dh (unsigned char *ptr, int size)
     }
 }
 
     }
 }
 
-int
+static int
 fillup (unsigned char *ptr)
 {
   int size;
   int sum;
   int i;
 
 fillup (unsigned char *ptr)
 {
   int size;
   int sum;
   int i;
 
-  size = getc (file) - 2;
-  fread (ptr, 1, size, file);
+  size = getc (file);
+  if (size == EOF
+      || size <= 2)
+    return 0;
+
+  size -= 2;
+  if (fread (ptr, size, 1, file) != 1)
+    return 0;
+
   sum = code + size + 2;
 
   for (i = 0; i < size; i++)
     sum += ptr[i];
 
   if ((sum & 0xff) != 0xff)
   sum = code + size + 2;
 
   for (i = 0; i < size; i++)
     sum += ptr[i];
 
   if ((sum & 0xff) != 0xff)
-    printf ("SUM IS %x\n", sum);
+    printf (_("SUM IS %x\n"), sum);
 
   if (dump)
     dh (ptr, size);
 
 
   if (dump)
     dh (ptr, size);
 
-  return size - 1;
+  return size;
 }
 
 }
 
-barray
+static barray
 getBARRAY (unsigned char *ptr, int *idx, int dsize ATTRIBUTE_UNUSED,
           int max ATTRIBUTE_UNUSED)
 {
 getBARRAY (unsigned char *ptr, int *idx, int dsize ATTRIBUTE_UNUSED,
           int max ATTRIBUTE_UNUSED)
 {
@@ -161,14 +148,19 @@ getBARRAY (unsigned char *ptr, int *idx, int dsize ATTRIBUTE_UNUSED,
   return res;
 }
 
   return res;
 }
 
-int
+static int
 getINT (unsigned char *ptr, int *idx, int size, int max)
 {
   int n = 0;
   int byte = *idx / 8;
 
   if (byte >= max)
 getINT (unsigned char *ptr, int *idx, int size, int max)
 {
   int n = 0;
   int byte = *idx / 8;
 
   if (byte >= max)
-    return 0;
+    {
+      /* PR 17512: file: id:000001,src:000002,op:flip1,pos:45.  */
+      /* Prevent infinite loops re-reading beyond the end of the buffer.  */
+      fatal (_("ICE: getINT: Out of buffer space"));
+      return 0;
+    }
 
   if (size == -2)
     size = addrsize;
 
   if (size == -2)
     size = addrsize;
@@ -190,14 +182,14 @@ getINT (unsigned char *ptr, int *idx, int size, int max)
       n = (ptr[byte + 0] << 24) + (ptr[byte + 1] << 16) + (ptr[byte + 2] << 8) + (ptr[byte + 3]);
       break;
     default:
       n = (ptr[byte + 0] << 24) + (ptr[byte + 1] << 16) + (ptr[byte + 2] << 8) + (ptr[byte + 3]);
       break;
     default:
-      abort ();
+      fatal (_("Unsupported read size: %d"), size);
     }
 
   *idx += size * 8;
   return n;
 }
 
     }
 
   *idx += size * 8;
   return n;
 }
 
-int
+static int
 getBITS (unsigned char *ptr, int *idx, int size, int max)
 {
   int byte = *idx / 8;
 getBITS (unsigned char *ptr, int *idx, int size, int max)
 {
   int byte = *idx / 8;
@@ -212,9 +204,9 @@ getBITS (unsigned char *ptr, int *idx, int size, int max)
 }
 
 static void
 }
 
 static void
-itheader (char *name, int code)
+itheader (char *name, int icode)
 {
 {
-  printf ("\n%s 0x%02x\n", name, code);
+  printf ("\n%s 0x%02x\n", name, icode);
 }
 
 static int indent;
 }
 
 static int indent;
@@ -262,7 +254,7 @@ pbarray (barray *y)
 
 #define IT_tr_CODE     0x7f
 
 
 #define IT_tr_CODE     0x7f
 
-void
+static void
 sysroff_swap_tr_in (void)
 {
   unsigned char raw[255];
 sysroff_swap_tr_in (void)
 {
   unsigned char raw[255];
@@ -271,7 +263,7 @@ sysroff_swap_tr_in (void)
   fillup (raw);
 }
 
   fillup (raw);
 }
 
-void
+static void
 sysroff_print_tr_out (void)
 {
   itheader ("tr", IT_tr_CODE);
 sysroff_print_tr_out (void)
 {
   itheader ("tr", IT_tr_CODE);
@@ -501,7 +493,7 @@ getone (int type)
       break;
 
     default:
       break;
 
     default:
-      printf ("GOT A %x\n", c);
+      printf (_("GOT A %x\n"), c);
       return 0;
       break;
     }
       return 0;
       break;
     }
@@ -519,7 +511,7 @@ static void
 must (int x)
 {
   if (!getone (x))
 must (int x)
 {
   if (!getone (x))
-    printf ("WANTED %x!!\n", x);
+    printf (_("WANTED %x!!\n"), x);
 }
 
 static void
 }
 
 static void
@@ -530,15 +522,14 @@ tab (int i, char *s)
   if (s)
     {
       p ();
   if (s)
     {
       p ();
-      printf (s);
-      printf ("\n");
+      puts (s);
     }
 }
 
 static void
 dump_symbol_info (void)
 {
     }
 }
 
 static void
 dump_symbol_info (void)
 {
-  tab (1, "SYMBOL INFO");
+  tab (1, _("SYMBOL INFO"));
 
   while (opt (IT_dsy_CODE))
     {
 
   while (opt (IT_dsy_CODE))
     {
@@ -556,7 +547,7 @@ dump_symbol_info (void)
 static void
 derived_type (void)
 {
 static void
 derived_type (void)
 {
-  tab (1, "DERIVED TYPE");
+  tab (1, _("DERIVED TYPE"));
 
   while (1)
     {
 
   while (1)
     {
@@ -613,11 +604,13 @@ module (void)
   int c = 0;
   int l = 0;
 
   int c = 0;
   int l = 0;
 
-  tab (1, "MODULE***\n");
+  tab (1, _("MODULE***\n"));
 
   do
     {
       c = getc (file);
 
   do
     {
       c = getc (file);
+      if (c == EOF)
+       break;
       ungetc (c, file);
 
       c &= 0x7f;
       ungetc (c, file);
 
       c &= 0x7f;
@@ -642,17 +635,17 @@ module (void)
 
 char *program_name;
 
 
 char *program_name;
 
-static void
-show_usage (FILE *file, int status)
+ATTRIBUTE_NORETURN static void
+show_usage (FILE *ffile, int status)
 {
 {
-  fprintf (file, _("Usage: %s [option(s)] in-file\n"), program_name);
-  fprintf (file, _("Print a human readable interpretation of a SYSROFF object file\n"));
-  fprintf (file, _(" The options are:\n\
+  fprintf (ffile, _("Usage: %s [option(s)] in-file\n"), program_name);
+  fprintf (ffile, _("Print a human readable interpretation of a SYSROFF object file\n"));
+  fprintf (ffile, _(" The options are:\n\
   -h --help        Display this information\n\
   -v --version     Print the program's version number\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);
+  if (REPORT_BUGS_TO[0] && status == 0)
+    fprintf (ffile, _("Report bugs to %s\n"), REPORT_BUGS_TO);
   exit (status);
 }
 
   exit (status);
 }
 
@@ -660,7 +653,7 @@ int
 main (int ac, char **av)
 {
   char *input_file = NULL;
 main (int ac, char **av)
 {
   char *input_file = NULL;
-  int opt;
+  int option;
   static struct option long_options[] =
   {
     {"help", no_argument, 0, 'h'},
   static struct option long_options[] =
   {
     {"help", no_argument, 0, 'h'},
@@ -679,10 +672,13 @@ main (int ac, char **av)
 
   program_name = av[0];
   xmalloc_set_program_name (program_name);
 
   program_name = av[0];
   xmalloc_set_program_name (program_name);
+  bfd_set_error_program_name (program_name);
+
+  expandargv (&ac, &av);
 
 
-  while ((opt = getopt_long (ac, av, "HhVv", long_options, (int *) NULL)) != EOF)
+  while ((option = getopt_long (ac, av, "HhVv", long_options, (int *) NULL)) != EOF)
     {
     {
-      switch (opt)
+      switch (option)
        {
        case 'H':
        case 'h':
        {
        case 'H':
        case 'h':
This page took 0.027421 seconds and 4 git commands to generate.