/* Sysroff object format dumper.
- Copyright (C) 1994 Free Software Foundation, Inc.
+ Copyright 1994, 1995, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
-This file is part of GNU Binutils.
+ 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
-(at your option) any later version.
+ 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
+ (at your option) any later version.
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+ 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. */
/* 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. */
+#include "bfd.h"
+#include "bucomm.h"
+#include "safe-ctype.h"
+
#include <stdio.h>
-#include <ctype.h>
#include <libiberty.h>
#include <getopt.h>
#include "sysroff.h"
-#include <stdlib.h>
-#include "sysdep.h"
-#define PROGRAM_VERSION "1.0"
-static int h8300;
-static int sh;
+
static int dump = 1;
static int segmented_p;
static int code;
+static int addrsize = 4;
static FILE *file;
-static char *
-xcalloc (a, b)
- int a;
- int b;
-{
- char *r = xmalloc (a, b);
- memset (r, 0, a * b);
- return r;
-}
+static void dh PARAMS ((unsigned char *, int));
+static void itheader PARAMS ((char *, int));
+static void p PARAMS ((void));
+static void tabout PARAMS ((void));
+static void pbarray PARAMS ((barray *));
+static int getone PARAMS ((int));
+static int opt PARAMS ((int));
+static void must PARAMS ((int));
+static void tab PARAMS ((int, char *));
+static void dump_symbol_info PARAMS ((void));
+static void derived_type PARAMS ((void));
+static void module PARAMS ((void));
+static void show_usage PARAMS ((FILE *, int));
+static void show_help PARAMS ((void));
+
+extern char *getCHARS PARAMS ((unsigned char *, int *, int, int));
+extern int fillup PARAMS ((char *));
+extern barray getBARRAY PARAMS ((unsigned char *, int *, int, int));
+extern int getINT PARAMS ((unsigned char *, int *, int, int));
+extern int getBITS PARAMS ((char *, int *, int, int));
+extern void sysroff_swap_tr_in PARAMS ((void));
+extern void sysroff_print_tr_out PARAMS ((void));
+extern int main PARAMS ((int, char **));
char *
getCHARS (ptr, idx, size, max)
{
int i;
int j;
- int span = 20;
+ int span = 16;
printf ("\n************************************************************\n");
for (i = 0; i < size; i += span)
{
- for (j = 0; j < span && j + i < size; j++)
+ for (j = 0; j < span; j++)
{
- printf ("%02x ", ptr[i + j]);
+ if (j + i < size)
+ printf ("%02x ", ptr[i + j]);
+ else
+ printf (" ");
}
- printf ("\n");
- }
- for (i = 0; i < size; i += span)
- {
for (j = 0; j < span && j + i < size; j++)
{
int c = ptr[i + j];
if (c < 32 || c > 127)
c = '.';
- printf (" %c ", c);
+ printf ("%c", c);
}
printf ("\n");
}
}
if (dump)
dh (ptr, size);
- return size;
+
+ return size - 1;
}
barray
getBARRAY (ptr, idx, dsize, max)
unsigned char *ptr;
int *idx;
- int dsize;
- int max;
+ int dsize ATTRIBUTE_UNUSED;
+ int max ATTRIBUTE_UNUSED;
{
barray res;
int i;
return 0;
}
if (size == -2)
- size = 4;
+ size = addrsize;
if (size == -1)
size = 0;
switch (size)
}
int
-getBITS (ptr, idx, size)
+getBITS (ptr, idx, size, max)
char *ptr;
int *idx;
- int size;
+ int size, max;
{
int byte = *idx / 8;
int bit = *idx % 8;
+ if (byte >= max)
+ return 0;
+
*idx += size;
return (ptr[byte] >> (8 - bit - size)) & ((1 << size) - 1);
printf ("%d (", y->len);
for (x = 0; x < y->len; x++)
{
- printf ("(%02x %c)", y->data[x], isprint (y->data[x]) ? y->data[x] : '.');
+ printf ("(%02x %c)", y->data[x],
+ ISPRINT (y->data[x]) ? y->data[x] : '.');
}
printf (")\n");
}
{
struct IT_hd dummy;
sysroff_swap_hd_in (&dummy);
+ addrsize = dummy.afl;
sysroff_print_hd_out (&dummy);
}
break;
return getone (x);
}
+#if 0
+
+/* This is no longer used. */
+
static void
unit_info_list ()
{
}
}
+#endif
+
+#if 0
+
+/* This is no longer used. */
+
static void
object_body_list ()
{
}
}
+#endif
+
static void
must (x)
int x;
}
}
-static void derived_type ();
-
static void
-symbol_info ()
+dump_symbol_info ()
{
tab (1, "SYMBOL INFO");
while (opt (IT_dsy_CODE))
{
if (opt (IT_dpp_CODE))
{
- symbol_info ();
+ dump_symbol_info ();
must (IT_dpp_CODE);
}
else if (opt (IT_dfp_CODE))
{
- symbol_info ();
+ dump_symbol_info ();
must (IT_dfp_CODE);
}
else if (opt (IT_den_CODE))
{
- symbol_info ();
+ dump_symbol_info ();
must (IT_den_CODE);
}
else if (opt (IT_den_CODE))
{
- symbol_info ();
+ dump_symbol_info ();
must (IT_den_CODE);
}
else if (opt (IT_dds_CODE))
{
- symbol_info ();
+ dump_symbol_info ();
must (IT_dds_CODE);
}
else if (opt (IT_dar_CODE))
tab (-1, "");
}
+#if 0
+
+/* This is no longer used. */
+
static void
program_structure ()
{
{
must (IT_dso_CODE);
opt (IT_dss_CODE);
- symbol_info ();
+ dump_symbol_info ();
must (IT_dps_CODE);
}
tab (-1, "");
}
+#endif
+
+#if 0
+
+/* This is no longer used. */
+
static void
debug_list ()
{
tab (-1, "");
}
+#endif
+
static void
module ()
{
FILE *file;
int status;
{
- fprintf (file, "Usage: %s [-hV] in-file\n", program_name);
+ fprintf (file, _("Usage: %s [-hV] in-file\n"), program_name);
exit (status);
}
static void
show_help ()
{
- printf ("%s: Print a human readable interpretation of a SYSROFF object file\n",
+ printf (_("%s: Print a human readable interpretation of a SYSROFF object file\n"),
program_name);
show_usage (stdout, 0);
}
{NULL, no_argument, 0, 0}
};
+#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);
show_help ();
/*NOTREACHED*/
case 'V':
- printf ("GNU %s version %s\n", program_name, PROGRAM_VERSION);
+ print_version ("sysdump");
exit (0);
/*NOTREACHED*/
case 0:
if (!input_file)
{
- fprintf (stderr, "%s: no input file specified\n",
- program_name);
- exit (1);
+ fatal (_("no input file specified"));
}
file = fopen (input_file, FOPEN_RB);
if (!file)
{
- fprintf (stderr, "%s: cannot open input file %s\n",
- program_name, input_file);
- exit (1);
+ fatal (_("cannot open input file %s"), input_file);
}
module ();