mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2024-11-24 12:39:59 +00:00
* hppa-tdep.c (read_unwind_info): Cosmetic cleanup.
* (unwind_command): Clean it up and make it print things out nicer. * monitor.c: Add ^C handling capability (mostly ripped off from remote.c). * (monitor_printf): Make it check the command echo. * (monitor_printf_noecho): Similar to above, but doesn't check for echo. * (monitor_stop): No longer waits for prompt. That is the job of the caller. This makes things work much better for monitor_wait, which waits for the prompt itself. * (monitor_open): Deal with new monitor_stop semantics. Also, flush input after sending init strings to get rid of junk that may be output. Also, don't always send \r to remote. Use monitor_ops->line_term cuz proper character isn't always \r. * (monitor_fetch_register): Switch to completely different algorithm to deal with lame-ass monitors which put spaces in the middle of numbers, and prompt with a space!!!!! * (monitor_read_memory_single): New routine to be used with monitors that can only return one byte/short/long at a time. This is selected via MO_GETMEM_READ_SINGLE. * (monitor_load_srec): Use monitor_printf_noecho for sending S records. Most targets don't echo them. * (monitor.h): Get rid of cmd_delim. Add line_delim. * op50n-rom.c (op50n_cmds): Fill it up. Make it work. * w89k-rom.c: Change all eols from \r to \n. Change load_resp to ^Q to prevent error message. * config/pa/tm-hppa.h (CALL_DUMMY (for hppro)): Add special instruction sequence at end to make restore_pc_queue happy.
This commit is contained in:
parent
1818c417af
commit
d8afcce964
@ -1,3 +1,35 @@
|
|||||||
|
Wed May 10 18:59:26 1995 Stu Grossman (grossman@andros.cygnus.com)
|
||||||
|
|
||||||
|
* hppa-tdep.c (read_unwind_info): Cosmetic cleanup.
|
||||||
|
* (unwind_command): Clean it up and make it print things out
|
||||||
|
nicer.
|
||||||
|
* monitor.c: Add ^C handling capability (mostly ripped off from
|
||||||
|
remote.c).
|
||||||
|
* (monitor_printf): Make it check the command echo.
|
||||||
|
* (monitor_printf_noecho): Similar to above, but doesn't check
|
||||||
|
for echo.
|
||||||
|
* (monitor_stop): No longer waits for prompt. That is the job of
|
||||||
|
the caller. This makes things work much better for monitor_wait,
|
||||||
|
which waits for the prompt itself.
|
||||||
|
* (monitor_open): Deal with new monitor_stop semantics. Also,
|
||||||
|
flush input after sending init strings to get rid of junk that may
|
||||||
|
be output. Also, don't always send \r to remote. Use
|
||||||
|
monitor_ops->line_term cuz proper character isn't always \r.
|
||||||
|
* (monitor_fetch_register): Switch to completely different
|
||||||
|
algorithm to deal with lame-ass monitors which put spaces in the
|
||||||
|
middle of numbers, and prompt with a space!!!!!
|
||||||
|
* (monitor_read_memory_single): New routine to be used with
|
||||||
|
monitors that can only return one byte/short/long at a time. This
|
||||||
|
is selected via MO_GETMEM_READ_SINGLE.
|
||||||
|
* (monitor_load_srec): Use monitor_printf_noecho for sending S
|
||||||
|
records. Most targets don't echo them.
|
||||||
|
* (monitor.h): Get rid of cmd_delim. Add line_delim.
|
||||||
|
* op50n-rom.c (op50n_cmds): Fill it up. Make it work.
|
||||||
|
* w89k-rom.c: Change all eols from \r to \n. Change load_resp to
|
||||||
|
^Q to prevent error message.
|
||||||
|
* config/pa/tm-hppa.h (CALL_DUMMY (for hppro)): Add special
|
||||||
|
instruction sequence at end to make restore_pc_queue happy.
|
||||||
|
|
||||||
Wed May 10 15:59:00 1995 Torbjorn Granlund <tege@adder.cygnus.com>
|
Wed May 10 15:59:00 1995 Torbjorn Granlund <tege@adder.cygnus.com>
|
||||||
|
|
||||||
* remote-est.c (est_open): Make static to match prototype.
|
* remote-est.c (est_open): Make static to match prototype.
|
||||||
|
@ -377,8 +377,8 @@ read_unwind_info (objfile)
|
|||||||
struct obj_unwind_info *ui;
|
struct obj_unwind_info *ui;
|
||||||
|
|
||||||
text_offset = ANOFFSET (objfile->section_offsets, 0);
|
text_offset = ANOFFSET (objfile->section_offsets, 0);
|
||||||
ui = obstack_alloc (&objfile->psymbol_obstack,
|
ui = (struct obj_unwind_info *)obstack_alloc (&objfile->psymbol_obstack,
|
||||||
sizeof (struct obj_unwind_info));
|
sizeof (struct obj_unwind_info));
|
||||||
|
|
||||||
ui->table = NULL;
|
ui->table = NULL;
|
||||||
ui->cache = NULL;
|
ui->cache = NULL;
|
||||||
@ -2610,11 +2610,7 @@ unwind_command (exp, from_tty)
|
|||||||
int from_tty;
|
int from_tty;
|
||||||
{
|
{
|
||||||
CORE_ADDR address;
|
CORE_ADDR address;
|
||||||
union
|
struct unwind_table_entry *u;
|
||||||
{
|
|
||||||
int *foo;
|
|
||||||
struct unwind_table_entry *u;
|
|
||||||
} xxx;
|
|
||||||
|
|
||||||
/* If we have an expression, evaluate it and use it as the address. */
|
/* If we have an expression, evaluate it and use it as the address. */
|
||||||
|
|
||||||
@ -2623,16 +2619,61 @@ unwind_command (exp, from_tty)
|
|||||||
else
|
else
|
||||||
return;
|
return;
|
||||||
|
|
||||||
xxx.u = find_unwind_entry (address);
|
u = find_unwind_entry (address);
|
||||||
|
|
||||||
if (!xxx.u)
|
if (!u)
|
||||||
{
|
{
|
||||||
printf_unfiltered ("Can't find unwind table entry for PC 0x%x\n", address);
|
printf_unfiltered ("Can't find unwind table entry for %s\n", exp);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
printf_unfiltered ("%08x\n%08X\n%08X\n%08X\n", xxx.foo[0], xxx.foo[1], xxx.foo[2],
|
printf_unfiltered ("unwind_table_entry (0x%x):\n", u);
|
||||||
xxx.foo[3]);
|
|
||||||
|
printf_unfiltered ("\tregion_start = ");
|
||||||
|
print_address (u->region_start, gdb_stdout);
|
||||||
|
|
||||||
|
printf_unfiltered ("\n\tregion_end = ");
|
||||||
|
print_address (u->region_end, gdb_stdout);
|
||||||
|
|
||||||
|
#ifdef __STDC__
|
||||||
|
#define pif(FLD) if (u->FLD) printf_unfiltered (" "#FLD);
|
||||||
|
#else
|
||||||
|
#define pif(FLD) if (u->FLD) printf_unfiltered (" FLD");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
printf_unfiltered ("\n\tflags =");
|
||||||
|
pif (Cannot_unwind);
|
||||||
|
pif (Millicode);
|
||||||
|
pif (Millicode_save_sr0);
|
||||||
|
pif (Entry_SR);
|
||||||
|
pif (Args_stored);
|
||||||
|
pif (Variable_Frame);
|
||||||
|
pif (Separate_Package_Body);
|
||||||
|
pif (Frame_Extension_Millicode);
|
||||||
|
pif (Stack_Overflow_Check);
|
||||||
|
pif (Two_Instruction_SP_Increment);
|
||||||
|
pif (Ada_Region);
|
||||||
|
pif (Save_SP);
|
||||||
|
pif (Save_RP);
|
||||||
|
pif (Save_MRP_in_frame);
|
||||||
|
pif (extn_ptr_defined);
|
||||||
|
pif (Cleanup_defined);
|
||||||
|
pif (MPE_XL_interrupt_marker);
|
||||||
|
pif (HP_UX_interrupt_marker);
|
||||||
|
pif (Large_frame);
|
||||||
|
|
||||||
|
putchar_unfiltered ('\n');
|
||||||
|
|
||||||
|
#ifdef __STDC__
|
||||||
|
#define pin(FLD) printf_unfiltered ("\t"#FLD" = 0x%x\n", u->FLD);
|
||||||
|
#else
|
||||||
|
#define pin(FLD) printf_unfiltered ("\tFLD = 0x%x\n", u->FLD);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
pin (Region_description);
|
||||||
|
pin (Entry_FR);
|
||||||
|
pin (Entry_GR);
|
||||||
|
pin (Total_frame_size);
|
||||||
}
|
}
|
||||||
#endif /* MAINTENANCE_CMDS */
|
#endif /* MAINTENANCE_CMDS */
|
||||||
|
|
||||||
|
@ -104,7 +104,7 @@ struct monitor_ops
|
|||||||
char *load; /* load command */
|
char *load; /* load command */
|
||||||
char *loadresp; /* Response to load command */
|
char *loadresp; /* Response to load command */
|
||||||
char *prompt; /* monitor command prompt */
|
char *prompt; /* monitor command prompt */
|
||||||
char *cmd_delim; /* end-of-command delimitor */
|
char *line_term; /* end-of-command delimitor */
|
||||||
char *cmd_end; /* optional command terminator */
|
char *cmd_end; /* optional command terminator */
|
||||||
struct target_ops *target; /* target operations */
|
struct target_ops *target; /* target operations */
|
||||||
int stopbits; /* number of stop bits */
|
int stopbits; /* number of stop bits */
|
||||||
@ -126,6 +126,7 @@ struct monitor_ops
|
|||||||
matically supply register dump when
|
matically supply register dump when
|
||||||
coming back after a continue. */
|
coming back after a continue. */
|
||||||
#define MO_GETMEM_NEEDS_RANGE 0x8 /* getmem needs start addr and end addr */
|
#define MO_GETMEM_NEEDS_RANGE 0x8 /* getmem needs start addr and end addr */
|
||||||
|
#define MO_GETMEM_READ_SINGLE 0x10 /* getmem can only read one loc at a time */
|
||||||
|
|
||||||
extern struct monitor_ops *current_monitor;
|
extern struct monitor_ops *current_monitor;
|
||||||
|
|
||||||
|
@ -53,57 +53,69 @@ static char *op50n_regnames[NUM_REGS] =
|
|||||||
|
|
||||||
static struct target_ops op50n_ops;
|
static struct target_ops op50n_ops;
|
||||||
|
|
||||||
static char *op50n_inits[] = {"\003.\n", NULL};
|
static char *op50n_inits[] = {".\r", NULL};
|
||||||
|
|
||||||
static struct monitor_ops op50n_cmds =
|
static struct monitor_ops op50n_cmds =
|
||||||
{
|
{
|
||||||
0, /* flags */
|
MO_CLR_BREAK_USES_ADDR /*| MO_GETMEM_READ_SINGLE*/, /* flags */
|
||||||
op50n_inits, /* Init strings */
|
op50n_inits, /* Init strings */
|
||||||
"g\n", /* continue command */
|
"g\r", /* continue command */
|
||||||
"t\n", /* single step */
|
"t\r", /* single step */
|
||||||
NULL, /* Interrupt char */
|
"\003", /* Interrupt char */
|
||||||
"b %x\n", /* set a breakpoint */
|
"b %x\r", /* set a breakpoint */
|
||||||
"bx %x\n", /* clear a breakpoint */
|
"b %x,0\r", /* clear breakpoint at addr */
|
||||||
NULL, /* clear all breakpoints */
|
"bx\r", /* clear all breakpoints */
|
||||||
NULL, /* memory fill cmd */
|
"fx %x s%x %x\r", /* memory fill cmd (addr, len, val) */
|
||||||
{
|
{
|
||||||
"sx %x %x;.\n", /* setmem.cmdb (addr, value) */
|
"sx %x %x\r", /* setmem.cmdb (addr, value) */
|
||||||
NULL, /* setmem.cmdw (addr, value) */
|
"sh %x %x\r", /* setmem.cmdw (addr, value) */
|
||||||
NULL, /* setmem.cmdl (addr, value) */
|
"s %x %x\r", /* setmem.cmdl (addr, value) */
|
||||||
NULL, /* setmem.cmdll (addr, value) */
|
NULL, /* setmem.cmdll (addr, value) */
|
||||||
NULL, /* setreg.resp_delim */
|
NULL, /* setmem.resp_delim */
|
||||||
NULL, /* setreg.term */
|
NULL, /* setmem.term */
|
||||||
NULL, /* setreg.term_cmd */
|
NULL, /* setmem.term_cmd */
|
||||||
},
|
},
|
||||||
|
#if 0
|
||||||
{
|
{
|
||||||
"sx %x\n", /* getmem.cmdb (addr, value) */
|
"sx %x\r", /* getmem.cmdb (addr, len) */
|
||||||
NULL, /* getmem.cmdw (addr, value) */
|
"sh %x\r", /* getmem.cmdw (addr, len) */
|
||||||
NULL, /* getmem.cmdl (addr, value) */
|
"s %x\r", /* getmem.cmdl (addr, len) */
|
||||||
NULL, /* getmem.cmdll (addr, value) */
|
NULL, /* getmem.cmdll (addr, len) */
|
||||||
": ", /* getmem.resp_delim */
|
" : ", /* getmem.resp_delim */
|
||||||
|
" ", /* getmem.term */
|
||||||
|
".\r", /* getmem.term_cmd */
|
||||||
|
},
|
||||||
|
#else
|
||||||
|
{
|
||||||
|
"dx %x s%x\r", /* getmem.cmdb (addr, len) */
|
||||||
|
NULL, /* getmem.cmdw (addr, len) */
|
||||||
|
NULL, /* getmem.cmdl (addr, len) */
|
||||||
|
NULL, /* getmem.cmdll (addr, len) */
|
||||||
|
" : ", /* getmem.resp_delim */
|
||||||
NULL, /* getmem.term */
|
NULL, /* getmem.term */
|
||||||
NULL, /* getmem.term_cmd */
|
NULL, /* getmem.term_cmd */
|
||||||
},
|
},
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
"x %s %x\n", /* setreg.cmd (name, value) */
|
"x %s %x\r", /* setreg.cmd (name, value) */
|
||||||
NULL, /* setreg.resp_delim */
|
NULL, /* setreg.resp_delim */
|
||||||
NULL, /* setreg.term */
|
NULL, /* setreg.term */
|
||||||
NULL, /* setreg.term_cmd */
|
NULL, /* setreg.term_cmd */
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"x %s\n", /* getreg.cmd (name) */
|
"x %s\r", /* getreg.cmd (name) */
|
||||||
"=", /* getreg.resp_delim */
|
"=", /* getreg.resp_delim */
|
||||||
NULL, /* getreg.term */
|
" ", /* getreg.term */
|
||||||
NULL, /* getreg.term_cmd */
|
".\r", /* getreg.term_cmd */
|
||||||
},
|
},
|
||||||
NULL, /* dump_registers */
|
NULL, /* dump_registers */
|
||||||
NULL, /* register_pattern */
|
NULL, /* register_pattern */
|
||||||
NULL, /* supply_register */
|
NULL, /* supply_register */
|
||||||
NULL, /* load routine */
|
NULL, /* load routine */
|
||||||
"r 0\n", /* download command */
|
"r 0\r", /* download command */
|
||||||
NULL, /* load response */
|
NULL, /* load response */
|
||||||
"#", /* monitor command prompt */
|
"\n#", /* monitor command prompt */
|
||||||
NULL, /* end-of-command delimitor */
|
"\r", /* end-of-command delimitor */
|
||||||
NULL, /* optional command terminator */
|
NULL, /* optional command terminator */
|
||||||
&op50n_ops, /* target operations */
|
&op50n_ops, /* target operations */
|
||||||
SERIAL_1_STOPBITS, /* number of stop bits */
|
SERIAL_1_STOPBITS, /* number of stop bits */
|
||||||
|
@ -240,57 +240,57 @@ w89k_load (desc, file, hashmark)
|
|||||||
|
|
||||||
static struct target_ops w89k_ops;
|
static struct target_ops w89k_ops;
|
||||||
|
|
||||||
static char *w89k_inits[] = {"\r", NULL};
|
static char *w89k_inits[] = {"\n", NULL};
|
||||||
|
|
||||||
static struct monitor_ops w89k_cmds =
|
static struct monitor_ops w89k_cmds =
|
||||||
{
|
{
|
||||||
MO_GETMEM_NEEDS_RANGE|MO_FILL_USES_ADDR, /* flags */
|
MO_GETMEM_NEEDS_RANGE|MO_FILL_USES_ADDR, /* flags */
|
||||||
w89k_inits, /* Init strings */
|
w89k_inits, /* Init strings */
|
||||||
"g\r", /* continue command */
|
"g\n", /* continue command */
|
||||||
"t\r", /* single step */
|
"t\n", /* single step */
|
||||||
NULL, /* Interrupt char */
|
"\003", /* Interrupt char (^C) */
|
||||||
"bp %x\r", /* set a breakpoint */
|
"bp %x\n", /* set a breakpoint */
|
||||||
"bc %x\r", /* clear a breakpoint */
|
"bc %x\n", /* clear a breakpoint */
|
||||||
"bc *\r", /* clear all breakpoints */
|
"bc *\n", /* clear all breakpoints */
|
||||||
"f %x %x %x\r", /* memory fill cmd */
|
"f %x %x %x\n", /* memory fill cmd */
|
||||||
{
|
{
|
||||||
"eb %x %x\r", /* setmem.cmdb (addr, value) */
|
"eb %x %x\n", /* setmem.cmdb (addr, value) */
|
||||||
"eh %x %x\r", /* setmem.cmdw (addr, value) */
|
"eh %x %x\n", /* setmem.cmdw (addr, value) */
|
||||||
"ew %x %x\r", /* setmem.cmdl (addr, value) */
|
"ew %x %x\n", /* setmem.cmdl (addr, value) */
|
||||||
NULL, /* setmem.cmdll (addr, value) */
|
NULL, /* setmem.cmdll (addr, value) */
|
||||||
NULL, /* setreg.resp_delim */
|
NULL, /* setreg.resp_delim */
|
||||||
NULL, /* setreg.term */
|
NULL, /* setreg.term */
|
||||||
NULL, /* setreg.term_cmd */
|
NULL, /* setreg.term_cmd */
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"db %x %x\r", /* getmem.cmdb (startaddr, endaddr) */
|
"db %x %x\n", /* getmem.cmdb (startaddr, endaddr) */
|
||||||
"dh %x %x\r", /* getmem.cmdw (startaddr, endaddr) */
|
"dh %x %x\n", /* getmem.cmdw (startaddr, endaddr) */
|
||||||
"dw %x %x\r", /* getmem.cmdl (startaddr, endaddr) */
|
"dw %x %x\n", /* getmem.cmdl (startaddr, endaddr) */
|
||||||
NULL, /* getmem.cmdll (startaddr, endaddr) */
|
NULL, /* getmem.cmdll (startaddr, endaddr) */
|
||||||
" ", /* getmem.resp_delim */
|
" ", /* getmem.resp_delim */
|
||||||
NULL, /* getmem.term */
|
NULL, /* getmem.term */
|
||||||
NULL, /* getmem.term_cmd */
|
NULL, /* getmem.term_cmd */
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"r %s %x\r", /* setreg.cmd (name, value) */
|
"r %s %x\n", /* setreg.cmd (name, value) */
|
||||||
NULL, /* setreg.resp_delim */
|
NULL, /* setreg.resp_delim */
|
||||||
NULL, /* setreg.term */
|
NULL, /* setreg.term */
|
||||||
NULL, /* setreg.term_cmd */
|
NULL, /* setreg.term_cmd */
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"r %s\r", /* getreg.cmd (name) */
|
"r %s\n", /* getreg.cmd (name) */
|
||||||
"\r", /* getreg.resp_delim */
|
"\r", /* getreg.resp_delim */
|
||||||
NULL, /* getreg.term */
|
NULL, /* getreg.term */
|
||||||
NULL, /* getreg.term_cmd */
|
NULL, /* getreg.term_cmd */
|
||||||
},
|
},
|
||||||
"r\r", /* dump_registers */
|
"r\n", /* dump_registers */
|
||||||
"\\(\\w+\\)\\( +[0-9a-fA-F]+\\b\\)+",
|
"\\(\\w+\\)\\( +[0-9a-fA-F]+\\b\\)+",
|
||||||
w89k_supply_register, /* supply_register */
|
w89k_supply_register, /* supply_register */
|
||||||
w89k_load, /* load routine */
|
w89k_load, /* load routine */
|
||||||
"u %x\r", /* download command */
|
"u %x\n", /* download command */
|
||||||
"\r", /* load response */
|
"\021", /* load response (^Q) */
|
||||||
"ROM>", /* monitor command prompt */
|
"ROM>", /* monitor command prompt */
|
||||||
NULL, /* end-of-command delimitor */
|
"\n", /* end-of-line terminator */
|
||||||
NULL, /* optional command terminator */
|
NULL, /* optional command terminator */
|
||||||
&w89k_ops, /* target operations */
|
&w89k_ops, /* target operations */
|
||||||
SERIAL_1_STOPBITS, /* number of stop bits */
|
SERIAL_1_STOPBITS, /* number of stop bits */
|
||||||
|
Loading…
Reference in New Issue
Block a user