sim: ppc: do not exit when parsing args w/gdb
When connecting to the simulator in gdb, we don't want it to exit on us when we pass down unknown/invalid/help/etc... options. Plumb down the kind argument so we can handle both gdb & psim interfaces.
This commit is contained in:
parent
4a2abdc468
commit
dea827fc5c
@ -1,3 +1,18 @@
|
||||
2016-01-02 Mike Frysinger <vapier@gentoo.org>
|
||||
|
||||
* main.c (main): Pass SIM_OPEN_STANDALONE to psim_options and
|
||||
psim_usage.
|
||||
* psim.c (psim_usage): Add new kind arg. Only show bug URL and
|
||||
exit when kind is SIM_OPEN_STANDALONE.
|
||||
(psim_options): Add new kind arg. Pass kind down to all psim_usage
|
||||
calls. Replace error/break calls after psim_usage with return NULL.
|
||||
Only exit with version case when kind is SIM_OPEN_STANDALONE.
|
||||
* psim.h: Include gdb/remote-sim.h.
|
||||
(psim_options): Add new kind arg.
|
||||
(psim_usage): Likewise.
|
||||
* sim_calls.c (sim_open): Pass kind to psim_options. Return NULL
|
||||
when it returns NULL.
|
||||
|
||||
2015-12-29 Kevin Buettner <kevinb@redhat.com>
|
||||
|
||||
* emul_netbsd.c (fd_closed): New static array.
|
||||
|
@ -270,13 +270,13 @@ main(int argc, char **argv)
|
||||
device *root = psim_tree();
|
||||
|
||||
/* parse the arguments */
|
||||
argv = psim_options(root, argv + 1);
|
||||
argv = psim_options (root, argv + 1, SIM_OPEN_STANDALONE);
|
||||
if (argv[0] == NULL) {
|
||||
if (ppc_trace[trace_opts]) {
|
||||
print_options ();
|
||||
return 0;
|
||||
} else {
|
||||
psim_usage(0, 0);
|
||||
psim_usage (0, 0, SIM_OPEN_STANDALONE);
|
||||
}
|
||||
}
|
||||
name_of_file = argv[0];
|
||||
|
@ -118,7 +118,7 @@ find_arg(char *err_msg,
|
||||
|
||||
INLINE_PSIM\
|
||||
(void)
|
||||
psim_usage(int verbose, int help)
|
||||
psim_usage (int verbose, int help, SIM_OPEN_KIND kind)
|
||||
{
|
||||
printf_filtered("Usage:\n");
|
||||
printf_filtered("\n");
|
||||
@ -217,9 +217,12 @@ psim_usage(int verbose, int help)
|
||||
print_options();
|
||||
}
|
||||
|
||||
if (REPORT_BUGS_TO[0])
|
||||
printf ("Report bugs to %s\n", REPORT_BUGS_TO);
|
||||
exit (help ? 0 : 1);
|
||||
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
|
||||
@ -247,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;
|
||||
@ -261,9 +265,8 @@ psim_options(device *root,
|
||||
switch (*p) {
|
||||
default:
|
||||
printf_filtered ("Invalid Option: %s\n", argv[argp]);
|
||||
psim_usage(0, 0);
|
||||
error ("");
|
||||
break;
|
||||
psim_usage (0, 0, kind);
|
||||
return NULL;
|
||||
case 'c':
|
||||
param = find_arg("Missing <count> option for -c (max-iterations)\n", &argp, argv);
|
||||
tree_parse(root, "/openprom/options/max-iterations %s", param);
|
||||
@ -282,7 +285,8 @@ psim_options(device *root,
|
||||
else
|
||||
{
|
||||
printf_filtered ("Invalid <endian> option for -E (target-endian)\n");
|
||||
psim_usage (0, 0);
|
||||
psim_usage (0, 0, kind);
|
||||
return NULL;
|
||||
}
|
||||
break;
|
||||
case 'f':
|
||||
@ -291,11 +295,11 @@ psim_options(device *root,
|
||||
break;
|
||||
case 'h':
|
||||
case '?':
|
||||
psim_usage(1, 1);
|
||||
break;
|
||||
psim_usage (1, 1, kind);
|
||||
return NULL;
|
||||
case 'H':
|
||||
psim_usage(2, 1);
|
||||
break;
|
||||
psim_usage (2, 1, kind);
|
||||
return NULL;
|
||||
case 'i':
|
||||
if (isdigit(p[1])) {
|
||||
tree_parse(root, "/openprom/trace/print-info %c", p[1]);
|
||||
@ -356,7 +360,10 @@ psim_options(device *root,
|
||||
printf_filtered("Warning - architecture parameter ignored\n");
|
||||
}
|
||||
else if (strcmp (argv[argp], "--help") == 0)
|
||||
psim_usage (0, 1);
|
||||
{
|
||||
psim_usage (0, 1, kind);
|
||||
return NULL;
|
||||
}
|
||||
else if (strncmp (argv[argp], "--sysroot=",
|
||||
sizeof ("--sysroot=") - 1) == 0)
|
||||
/* Ignore this option. */
|
||||
@ -365,13 +372,16 @@ psim_options(device *root,
|
||||
{
|
||||
extern const char version[];
|
||||
printf ("GNU simulator %s%s\n", PKGVERSION, version);
|
||||
exit (0);
|
||||
if (kind == SIM_OPEN_STANDALONE)
|
||||
exit (0);
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf_filtered ("Invalid option: %s\n", argv[argp]);
|
||||
psim_usage (0, 0);
|
||||
error ("");
|
||||
psim_usage (0, 0, kind);
|
||||
return NULL;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -23,6 +23,7 @@
|
||||
|
||||
#include "basics.h"
|
||||
|
||||
#include "gdb/remote-sim.h"
|
||||
|
||||
/* the system object */
|
||||
/* typedef struct _psim psim; */
|
||||
@ -48,7 +49,8 @@ extern device *psim_tree
|
||||
|
||||
extern char **psim_options
|
||||
(device *root,
|
||||
char **argv);
|
||||
char **argv,
|
||||
SIM_OPEN_KIND kind);
|
||||
|
||||
extern void psim_command
|
||||
(device *root,
|
||||
@ -60,7 +62,7 @@ extern void psim_merge_device_file
|
||||
const char *file_name);
|
||||
|
||||
extern void psim_usage
|
||||
(int verbose, int help);
|
||||
(int verbose, int help, SIM_OPEN_KIND kind);
|
||||
|
||||
|
||||
/* create a new simulator from the device tree */
|
||||
|
@ -77,7 +77,8 @@ sim_open (SIM_OPEN_KIND kind,
|
||||
root_device = psim_tree();
|
||||
simulator = NULL;
|
||||
|
||||
psim_options(root_device, argv + 1);
|
||||
if (psim_options (root_device, argv + 1, kind) == NULL)
|
||||
return NULL;
|
||||
|
||||
if (ppc_trace[trace_opts])
|
||||
print_options ();
|
||||
|
Loading…
Reference in New Issue
Block a user