X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=binutils%2Fsysdump.c;h=be026f8f17ca44ce5f0a134ee5e89076371266c9;hb=f6efe3f842e72e23ec6d8a57d683ce90d2e89785;hp=1dc01e0ede701719b86ae61573a457927e8d2a1c;hpb=9f66665ac58ef8ccb2644ceaf7d2f7fefab9f7e6;p=deliverable%2Fbinutils-gdb.git diff --git a/binutils/sysdump.c b/binutils/sysdump.c index 1dc01e0ede..be026f8f17 100644 --- a/binutils/sysdump.c +++ b/binutils/sysdump.c @@ -1,12 +1,11 @@ /* Sysroff object format dumper. - Copyright 1994, 1995, 1998, 1999, 2000, 2001, 2002 - 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 - 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, @@ -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 - 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 . @@ -25,13 +24,12 @@ 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 "bucomm.h" #include "safe-ctype.h" - -#include -#include -#include +#include "libiberty.h" +#include "getopt.h" +#include "bucomm.h" #include "sysroff.h" static int dump = 1; @@ -40,45 +38,23 @@ static int code; static int addrsize = 4; static FILE *file; -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)); - -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) - unsigned char *ptr; - int *idx; - int size; - int max; +static void derived_type (void); + +static char * +getCHARS (unsigned char *ptr, int *idx, int size, int max) { int oc = *idx / 8; char *r; int b = size; if (b >= max) - return "*undefined*"; + return _("*undefined*"); 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; @@ -93,9 +69,7 @@ getCHARS (ptr, idx, size, max) } static void -dh (ptr, size) - unsigned char *ptr; - int size; +dh (unsigned char *ptr, int size) { int i; int j; @@ -126,36 +100,39 @@ dh (ptr, size) } } -int -fillup (ptr) - char *ptr; +static int +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) - printf ("SUM IS %x\n", sum); + printf (_("SUM IS %x\n"), sum); if (dump) dh (ptr, size); - return size - 1; + return size; } -barray -getBARRAY (ptr, idx, dsize, max) - unsigned char *ptr; - int *idx; - int dsize ATTRIBUTE_UNUSED; - int max ATTRIBUTE_UNUSED; +static barray +getBARRAY (unsigned char *ptr, int *idx, int dsize ATTRIBUTE_UNUSED, + int max ATTRIBUTE_UNUSED) { barray res; int i; @@ -171,18 +148,19 @@ getBARRAY (ptr, idx, dsize, max) return res; } -int -getINT (ptr, idx, size, max) - unsigned char *ptr; - int *idx; - int size; - int max; +static int +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; @@ -204,18 +182,15 @@ getINT (ptr, idx, size, max) 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; } -int -getBITS (ptr, idx, size, max) - char *ptr; - int *idx; - int size, max; +static int +getBITS (unsigned char *ptr, int *idx, int size, int max) { int byte = *idx / 8; int bit = *idx % 8; @@ -229,17 +204,15 @@ getBITS (ptr, idx, size, max) } static void -itheader (name, code) - 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 void -p () +p (void) { int i; @@ -250,14 +223,13 @@ p () } static void -tabout () +tabout (void) { p (); } static void -pbarray (y) - barray *y; +pbarray (barray *y) { int x; @@ -282,24 +254,23 @@ pbarray (y) #define IT_tr_CODE 0x7f -void -sysroff_swap_tr_in() +static void +sysroff_swap_tr_in (void) { - char raw[255]; + unsigned char raw[255]; memset (raw, 0, 255); fillup (raw); } -void -sysroff_print_tr_out() +static void +sysroff_print_tr_out (void) { itheader ("tr", IT_tr_CODE); } static int -getone (type) - int type; +getone (int type) { int c = getc (file); @@ -522,7 +493,7 @@ getone (type) break; default: - printf ("GOT A %x\n", c); + printf (_("GOT A %x\n"), c); return 0; break; } @@ -531,81 +502,34 @@ getone (type) } static int -opt (x) - int x; +opt (int x) { return getone (x); } -#if 0 - -/* This is no longer used. */ - -static void -unit_info_list () -{ - while (opt (IT_un_CODE)) - { - getone (IT_us_CODE); - - while (getone (IT_sc_CODE)) - getone (IT_ss_CODE); - - while (getone (IT_er_CODE)) - ; - - while (getone (IT_ed_CODE)) - ; - } -} - -#endif - -#if 0 - -/* This is no longer used. */ - -static void -object_body_list () -{ - while (getone (IT_sh_CODE)) - { - while (getone (IT_ob_CODE)) - ; - while (getone (IT_rl_CODE)) - ; - } -} - -#endif - static void -must (x) - int x; +must (int x) { if (!getone (x)) - printf ("WANTED %x!!\n", x); + printf (_("WANTED %x!!\n"), x); } static void -tab (i, s) - int i; - char *s; +tab (int i, char *s) { indent += i; if (s) { p (); - printf (s); - printf ("\n"); + puts (s); } } static void -dump_symbol_info () +dump_symbol_info (void) { - tab (1, "SYMBOL INFO"); + tab (1, _("SYMBOL INFO")); while (opt (IT_dsy_CODE)) { @@ -621,9 +545,9 @@ dump_symbol_info () } static void -derived_type () +derived_type (void) { - tab (1, "DERIVED TYPE"); + tab (1, _("DERIVED TYPE")); while (1) { @@ -674,73 +598,25 @@ derived_type () tab (-1, ""); } -#if 0 - -/* This is no longer used. */ - -static void -program_structure () -{ - tab (1, "PROGRAM STRUCTURE"); - while (opt (IT_dps_CODE)) - { - must (IT_dso_CODE); - opt (IT_dss_CODE); - dump_symbol_info (); - must (IT_dps_CODE); - } - tab (-1, ""); -} - -#endif - -#if 0 - -/* This is no longer used. */ - -static void -debug_list () -{ - tab (1, "DEBUG LIST"); - - must (IT_du_CODE); - opt (IT_dus_CODE); - program_structure (); - must (IT_dln_CODE); - - tab (-1, ""); -} - -#endif - static void -module () +module (void) { int c = 0; int l = 0; - tab (1, "MODULE***\n"); + tab (1, _("MODULE***\n")); do { c = getc (file); + if (c == EOF) + break; ungetc (c, file); c &= 0x7f; } while (getone (c) && c != IT_tr_CODE); -#if 0 - must (IT_cs_CODE); - must (IT_hd_CODE); - opt (IT_hs_CODE); - - unit_info_list (); - object_body_list (); - debug_list (); - - must (IT_tr_CODE); -#endif tab (-1, ""); c = getc (file); @@ -759,29 +635,25 @@ module () char *program_name; -static void -show_usage (file, status) - 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")); - 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); } int -main (ac, av) - int ac; - char **av; +main (int ac, char **av) { char *input_file = NULL; - int opt; + int option; static struct option long_options[] = { {"help", no_argument, 0, 'h'}, @@ -800,10 +672,13 @@ main (ac, av) 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':