X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=sim%2Fppc%2Fpsim.c;h=3e322e3820f83830d5076cf46fe7e69ee48804b8;hb=05e682e3be7e3d9d63ec358dcf8943fd200545cb;hp=c20effb6f597ae4ed40f749becd49e7d3e97d1fc;hpb=345d88d96ee2f82d2ec0d1c69cd14506b707b945;p=deliverable%2Fbinutils-gdb.git diff --git a/sim/ppc/psim.c b/sim/ppc/psim.c index c20effb6f5..3e322e3820 100644 --- a/sim/ppc/psim.c +++ b/sim/ppc/psim.c @@ -4,7 +4,7 @@ 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, @@ -13,8 +13,7 @@ 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. + along with this program; if not, see . */ @@ -49,7 +48,8 @@ #include "bfd.h" - +#include "libiberty.h" +#include "gdb/signals.h" /* system structure, actual size of processor array determined at runtime */ @@ -118,7 +118,7 @@ find_arg(char *err_msg, INLINE_PSIM\ (void) -psim_usage(int verbose) +psim_usage (int verbose, int help, SIM_OPEN_KIND kind) { printf_filtered("Usage:\n"); printf_filtered("\n"); @@ -216,7 +216,13 @@ psim_usage(int verbose) printf_filtered("\n"); print_options(); } - error(""); + + if (kind == SIM_OPEN_STANDALONE) + { + if (REPORT_BUGS_TO[0]) + printf ("Report bugs to %s\n", REPORT_BUGS_TO); + exit (help ? 0 : 1); + } } /* Test "string" for containing a string of digits that form a number @@ -244,7 +250,8 @@ int is_num( char *string, int min, int max, int err) INLINE_PSIM\ (char **) psim_options(device *root, - char **argv) + char **argv, + SIM_OPEN_KIND kind) { device *current = root; int argp; @@ -257,9 +264,9 @@ psim_options(device *root, while (*p != '\0') { switch (*p) { default: - psim_usage(0); - error (""); - break; + printf_filtered ("Invalid Option: %s\n", argv[argp]); + psim_usage (0, 0, kind); + return NULL; case 'c': param = find_arg("Missing option for -c (max-iterations)\n", &argp, argv); tree_parse(root, "/openprom/options/max-iterations %s", param); @@ -278,7 +285,8 @@ psim_options(device *root, else { printf_filtered ("Invalid option for -E (target-endian)\n"); - psim_usage (0); + psim_usage (0, 0, kind); + return NULL; } break; case 'f': @@ -287,11 +295,11 @@ psim_options(device *root, break; case 'h': case '?': - psim_usage(1); - break; + psim_usage (1, 1, kind); + return NULL; case 'H': - psim_usage(2); - break; + psim_usage (2, 1, kind); + return NULL; case 'i': if (isdigit(p[1])) { tree_parse(root, "/openprom/trace/print-info %c", p[1]); @@ -351,8 +359,30 @@ psim_options(device *root, p = argv[argp] + strlen(argv[argp]) - 1; printf_filtered("Warning - architecture parameter ignored\n"); } + else if (strcmp (argv[argp], "--help") == 0) + { + psim_usage (0, 1, kind); + return NULL; + } + else if (strncmp (argv[argp], "--sysroot=", + sizeof ("--sysroot=") - 1) == 0) + /* Ignore this option. */ + p = argv[argp] + strlen(argv[argp]) - 1; + else if (strcmp (argv[argp], "--version") == 0) + { + extern const char version[]; + printf ("GNU simulator %s%s\n", PKGVERSION, version); + if (kind == SIM_OPEN_STANDALONE) + exit (0); + else + return NULL; + } else - error("Unrecognized option"); + { + printf_filtered ("Invalid option: %s\n", argv[argp]); + psim_usage (0, 0, kind); + return NULL; + } break; } p += 1; @@ -571,7 +601,7 @@ cntrl_c_simulation(void *data) psim_halt(system, psim_nr_cpus(system), was_continuing, - SIGINT); + GDB_SIGNAL_INT); } INLINE_PSIM\