- fixed broken debugger "rc file" command line option. Now it is possible to
execute debugger commands from the specified file. This is the command line counterpart to the undocumented debugger command "source".
This commit is contained in:
parent
4ceec75181
commit
f348c6cf50
@ -1,5 +1,5 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
// $Id: dbg_main.cc,v 1.84 2006-10-21 22:18:39 sshwarts Exp $
|
// $Id: dbg_main.cc,v 1.85 2006-10-24 17:53:47 vruppert Exp $
|
||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// Copyright (C) 2001 MandrakeSoft S.A.
|
// Copyright (C) 2001 MandrakeSoft S.A.
|
||||||
@ -54,7 +54,6 @@ extern const char* cpu_mode_string(unsigned cpu_mode);
|
|||||||
|
|
||||||
static bx_param_bool_c *sim_running = NULL;
|
static bx_param_bool_c *sim_running = NULL;
|
||||||
|
|
||||||
static char bx_debug_rc_fname[BX_MAX_PATH];
|
|
||||||
static char tmp_buf[512];
|
static char tmp_buf[512];
|
||||||
static char tmp_buf_prev[512];
|
static char tmp_buf_prev[512];
|
||||||
static char *tmp_buf_ptr;
|
static char *tmp_buf_ptr;
|
||||||
@ -131,11 +130,24 @@ void dbg_printf(const char *fmt, ...)
|
|||||||
SIM->debug_puts(buf); // send to debugger, which will free buf when done.
|
SIM->debug_puts(buf); // send to debugger, which will free buf when done.
|
||||||
}
|
}
|
||||||
|
|
||||||
int bx_dbg_main(int argc, char *argv[])
|
void bx_dbg_init_infile(void)
|
||||||
{
|
{
|
||||||
int i, bochs_argc=0;
|
bx_infile_stack_index = 0;
|
||||||
char **bochs_argv = NULL;
|
bx_infile_stack[0].fp = stdin;
|
||||||
argc = 1;
|
bx_infile_stack[0].lineno = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int bx_dbg_set_rcfile(const char *rcfile)
|
||||||
|
{
|
||||||
|
strncpy(bx_infile_stack[0].fname, rcfile, BX_MAX_PATH);
|
||||||
|
bx_infile_stack[0].fname[BX_MAX_PATH-1] = 0;
|
||||||
|
BX_INFO(("debugger using rc file '%s'.", rcfile));
|
||||||
|
return bx_nest_infile((char*)rcfile);
|
||||||
|
}
|
||||||
|
|
||||||
|
int bx_dbg_main(void)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
setbuf(stdout, NULL);
|
setbuf(stdout, NULL);
|
||||||
setbuf(stderr, NULL);
|
setbuf(stderr, NULL);
|
||||||
@ -155,41 +167,6 @@ int bx_dbg_main(int argc, char *argv[])
|
|||||||
bx_debugger.default_addr = 0;
|
bx_debugger.default_addr = 0;
|
||||||
bx_debugger.next_bpoint_id = 1;
|
bx_debugger.next_bpoint_id = 1;
|
||||||
|
|
||||||
argv0 = strdup(argv[0]);
|
|
||||||
|
|
||||||
bx_debug_rc_fname[0] = '\0';
|
|
||||||
|
|
||||||
bochs_argv = (char **) &argv[0];
|
|
||||||
bochs_argc = 1;
|
|
||||||
|
|
||||||
// process "-rc pathname" option, if it exists
|
|
||||||
i = 1;
|
|
||||||
if ((argc >= 2) && !strcmp(argv[1], "-rc")) {
|
|
||||||
if(argc == 2) {
|
|
||||||
BX_ERROR(("%s: -rc option used, but no path specified.", argv[0]));
|
|
||||||
dbg_printf("usage: %s [-rc path]\n", argv0);
|
|
||||||
BX_EXIT(1);
|
|
||||||
}
|
|
||||||
strncpy(bx_debug_rc_fname, argv[2], BX_MAX_PATH-1);
|
|
||||||
i += 2; // skip past "-rc" and filename
|
|
||||||
bochs_argv = (char **) &argv[2];
|
|
||||||
}
|
|
||||||
|
|
||||||
bx_infile_stack_index = 0;
|
|
||||||
bx_infile_stack[0].fp = stdin;
|
|
||||||
strncpy(bx_infile_stack[0].fname, argv[0], BX_MAX_PATH);
|
|
||||||
bx_infile_stack[0].fname[BX_MAX_PATH-1] = 0;
|
|
||||||
bx_infile_stack[0].lineno = 0;
|
|
||||||
|
|
||||||
if (bx_debug_rc_fname[0] == '\0') {
|
|
||||||
BX_INFO(("Warning: no rc file specified."));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
BX_INFO(("%s: using rc file '%s'.", argv[0], bx_debug_rc_fname));
|
|
||||||
// if there's an error, the user will know about it before proceeding
|
|
||||||
(void) bx_nest_infile(bx_debug_rc_fname);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Open debugger log file if needed
|
// Open debugger log file if needed
|
||||||
if ((strlen(SIM->get_param_string(BXPN_DEBUGGER_LOG_FILENAME)->getptr()) > 0)
|
if ((strlen(SIM->get_param_string(BXPN_DEBUGGER_LOG_FILENAME)->getptr()) > 0)
|
||||||
&& (strcmp(SIM->get_param_string(BXPN_DEBUGGER_LOG_FILENAME)->getptr(), "-") != 0)) {
|
&& (strcmp(SIM->get_param_string(BXPN_DEBUGGER_LOG_FILENAME)->getptr(), "-") != 0)) {
|
||||||
@ -206,9 +183,6 @@ int bx_dbg_main(int argc, char *argv[])
|
|||||||
|
|
||||||
memset(bx_disasm_ibuf, 0, sizeof(bx_disasm_ibuf));
|
memset(bx_disasm_ibuf, 0, sizeof(bx_disasm_ibuf));
|
||||||
|
|
||||||
// parse any remaining args in the usual way
|
|
||||||
bx_parse_cmdline(1, bochs_argc, bochs_argv);
|
|
||||||
|
|
||||||
// create a boolean parameter that will tell if the simulation is
|
// create a boolean parameter that will tell if the simulation is
|
||||||
// running (continue command) or waiting for user response. This affects
|
// running (continue command) or waiting for user response. This affects
|
||||||
// some parts of the GUI.
|
// some parts of the GUI.
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
// $Id: debug.h,v 1.29 2006-10-21 21:28:20 sshwarts Exp $
|
// $Id: debug.h,v 1.30 2006-10-24 17:53:47 vruppert Exp $
|
||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// Copyright (C) 2001 MandrakeSoft S.A.
|
// Copyright (C) 2001 MandrakeSoft S.A.
|
||||||
@ -457,7 +457,9 @@ typedef struct bx_guard_found_t {
|
|||||||
|
|
||||||
extern bx_guard_t bx_guard;
|
extern bx_guard_t bx_guard;
|
||||||
|
|
||||||
int bx_dbg_main(int argc, char *argv[]);
|
void bx_dbg_init_infile(void);
|
||||||
|
int bx_dbg_set_rcfile(const char *rcfile);
|
||||||
|
int bx_dbg_main(void);
|
||||||
void bx_dbg_user_input_loop(void);
|
void bx_dbg_user_input_loop(void);
|
||||||
void bx_dbg_interpret_line(char *cmd);
|
void bx_dbg_interpret_line(char *cmd);
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
// $Id: main.cc,v 1.346 2006-10-15 10:45:15 vruppert Exp $
|
// $Id: main.cc,v 1.347 2006-10-24 17:53:47 vruppert Exp $
|
||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// Copyright (C) 2002 MandrakeSoft S.A.
|
// Copyright (C) 2002 MandrakeSoft S.A.
|
||||||
@ -75,7 +75,7 @@ void bx_unmapped_io_write_handler(Bit32u address, Bit32u value,
|
|||||||
unsigned io_len);
|
unsigned io_len);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void bx_init_bx_dbg (void);
|
void bx_init_bx_dbg(void);
|
||||||
static char *divider = "========================================================================";
|
static char *divider = "========================================================================";
|
||||||
static logfunctions thePluginLog;
|
static logfunctions thePluginLog;
|
||||||
logfunctions *pluginlog = &thePluginLog;
|
logfunctions *pluginlog = &thePluginLog;
|
||||||
@ -482,6 +482,9 @@ void print_usage()
|
|||||||
" -q quick start (skip configuration interface)\n"
|
" -q quick start (skip configuration interface)\n"
|
||||||
#if BX_SUPPORT_SAVE_RESTORE
|
#if BX_SUPPORT_SAVE_RESTORE
|
||||||
" -r path restore the Bochs state from path\n"
|
" -r path restore the Bochs state from path\n"
|
||||||
|
#endif
|
||||||
|
#if BX_DEBUGGER
|
||||||
|
" -rc filename execute debugger commands stored in file\n"
|
||||||
#endif
|
#endif
|
||||||
" --help display this help and exit\n\n"
|
" --help display this help and exit\n\n"
|
||||||
"For information on Bochs configuration file arguments, see the\n"
|
"For information on Bochs configuration file arguments, see the\n"
|
||||||
@ -518,31 +521,31 @@ int bx_init_main (int argc, char *argv[])
|
|||||||
int arg = 1, load_rcfile=1;
|
int arg = 1, load_rcfile=1;
|
||||||
while (arg < argc) {
|
while (arg < argc) {
|
||||||
// parse next arg
|
// parse next arg
|
||||||
if (!strcmp ("--help", argv[arg]) || !strncmp ("-h", argv[arg], 2)
|
if (!strcmp("--help", argv[arg]) || !strncmp("-h", argv[arg], 2)
|
||||||
#if defined(WIN32)
|
#if defined(WIN32)
|
||||||
|| !strncmp ("/?", argv[arg], 2)
|
|| !strncmp("/?", argv[arg], 2)
|
||||||
#endif
|
#endif
|
||||||
) {
|
) {
|
||||||
print_usage();
|
print_usage();
|
||||||
SIM->quit_sim (0);
|
SIM->quit_sim(0);
|
||||||
}
|
}
|
||||||
else if (!strcmp ("-n", argv[arg])) {
|
else if (!strcmp("-n", argv[arg])) {
|
||||||
load_rcfile = 0;
|
load_rcfile = 0;
|
||||||
}
|
}
|
||||||
else if (!strcmp ("-q", argv[arg])) {
|
else if (!strcmp("-q", argv[arg])) {
|
||||||
SIM->get_param_enum(BXPN_BOCHS_START)->set(BX_QUICK_START);
|
SIM->get_param_enum(BXPN_BOCHS_START)->set(BX_QUICK_START);
|
||||||
}
|
}
|
||||||
else if (!strcmp ("-f", argv[arg])) {
|
else if (!strcmp("-f", argv[arg])) {
|
||||||
if (++arg >= argc) BX_PANIC(("-f must be followed by a filename"));
|
if (++arg >= argc) BX_PANIC(("-f must be followed by a filename"));
|
||||||
else bochsrc_filename = argv[arg];
|
else bochsrc_filename = argv[arg];
|
||||||
}
|
}
|
||||||
else if (!strcmp ("-qf", argv[arg])) {
|
else if (!strcmp("-qf", argv[arg])) {
|
||||||
SIM->get_param_enum(BXPN_BOCHS_START)->set(BX_QUICK_START);
|
SIM->get_param_enum(BXPN_BOCHS_START)->set(BX_QUICK_START);
|
||||||
if (++arg >= argc) BX_PANIC(("-qf must be followed by a filename"));
|
if (++arg >= argc) BX_PANIC(("-qf must be followed by a filename"));
|
||||||
else bochsrc_filename = argv[arg];
|
else bochsrc_filename = argv[arg];
|
||||||
}
|
}
|
||||||
#if BX_SUPPORT_SAVE_RESTORE
|
#if BX_SUPPORT_SAVE_RESTORE
|
||||||
else if (!strcmp ("-r", argv[arg])) {
|
else if (!strcmp("-r", argv[arg])) {
|
||||||
if (++arg >= argc) BX_PANIC(("-r must be followed by a path"));
|
if (++arg >= argc) BX_PANIC(("-r must be followed by a path"));
|
||||||
else {
|
else {
|
||||||
SIM->get_param_enum(BXPN_BOCHS_START)->set(BX_QUICK_START);
|
SIM->get_param_enum(BXPN_BOCHS_START)->set(BX_QUICK_START);
|
||||||
@ -552,7 +555,7 @@ int bx_init_main (int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#if BX_WITH_CARBON
|
#if BX_WITH_CARBON
|
||||||
else if (!strncmp ("-psn", argv[arg], 4)) {
|
else if (!strncmp("-psn", argv[arg], 4)) {
|
||||||
// "-psn" is passed if we are launched by double-clicking
|
// "-psn" is passed if we are launched by double-clicking
|
||||||
// ugly hack. I don't know how to open a window to print messages in,
|
// ugly hack. I don't know how to open a window to print messages in,
|
||||||
// so put them in /tmp/early-bochs-out.txt. Sorry. -bbd
|
// so put them in /tmp/early-bochs-out.txt. Sorry. -bbd
|
||||||
@ -570,6 +573,13 @@ int bx_init_main (int argc, char *argv[])
|
|||||||
BX_INFO (("argument %d is %s", a, argv[a]));
|
BX_INFO (("argument %d is %s", a, argv[a]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
#if BX_DEBUGGER
|
||||||
|
else if (!strcmp("-rc", argv[arg])) {
|
||||||
|
// process "-rc filename" option, if it exists
|
||||||
|
if (++arg >= argc) BX_PANIC(("-rc must be followed by a filename"));
|
||||||
|
else bx_dbg_set_rcfile(argv[arg]);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
else if (argv[arg][0] == '-') {
|
else if (argv[arg][0] == '-') {
|
||||||
print_usage();
|
print_usage();
|
||||||
@ -869,7 +879,7 @@ int bx_begin_simulation (int argc, char *argv[])
|
|||||||
#if BX_DEBUGGER
|
#if BX_DEBUGGER
|
||||||
// If using the debugger, it will take control and call
|
// If using the debugger, it will take control and call
|
||||||
// bx_init_hardware() and cpu_loop()
|
// bx_init_hardware() and cpu_loop()
|
||||||
bx_dbg_main(argc, argv);
|
bx_dbg_main();
|
||||||
#else
|
#else
|
||||||
#if BX_GDBSTUB
|
#if BX_GDBSTUB
|
||||||
// If using gdbstub, it will take control and call
|
// If using gdbstub, it will take control and call
|
||||||
@ -1101,6 +1111,9 @@ int bx_init_hardware()
|
|||||||
|
|
||||||
void bx_init_bx_dbg(void)
|
void bx_init_bx_dbg(void)
|
||||||
{
|
{
|
||||||
|
#if BX_DEBUGGER
|
||||||
|
bx_dbg_init_infile();
|
||||||
|
#endif
|
||||||
bx_dbg.floppy = 0;
|
bx_dbg.floppy = 0;
|
||||||
bx_dbg.keyboard = 0;
|
bx_dbg.keyboard = 0;
|
||||||
bx_dbg.video = 0;
|
bx_dbg.video = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user