aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorStu Grossman <grossman@cygnus>1995-05-11 02:26:00 +0000
committerStu Grossman <grossman@cygnus>1995-05-11 02:26:00 +0000
commitd8afcce964c862098004e98eb09318267b5a464c (patch)
tree08f8f2e01c8a9fae2d82645284fce9ec19201c90 /gdb
parent1818c417af463d6f00400e000998166acfa2b1a7 (diff)
downloadfsf-binutils-gdb-d8afcce964c862098004e98eb09318267b5a464c.zip
fsf-binutils-gdb-d8afcce964c862098004e98eb09318267b5a464c.tar.gz
fsf-binutils-gdb-d8afcce964c862098004e98eb09318267b5a464c.tar.bz2
* 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.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog32
-rw-r--r--gdb/hppa-tdep.c65
-rw-r--r--gdb/monitor.h3
-rw-r--r--gdb/op50-rom.c66
-rw-r--r--gdb/w89k-rom.c40
5 files changed, 146 insertions, 60 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 3b201ea..c146281 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -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>
* remote-est.c (est_open): Make static to match prototype.
diff --git a/gdb/hppa-tdep.c b/gdb/hppa-tdep.c
index 042a07f..b771170 100644
--- a/gdb/hppa-tdep.c
+++ b/gdb/hppa-tdep.c
@@ -377,8 +377,8 @@ read_unwind_info (objfile)
struct obj_unwind_info *ui;
text_offset = ANOFFSET (objfile->section_offsets, 0);
- ui = obstack_alloc (&objfile->psymbol_obstack,
- sizeof (struct obj_unwind_info));
+ ui = (struct obj_unwind_info *)obstack_alloc (&objfile->psymbol_obstack,
+ sizeof (struct obj_unwind_info));
ui->table = NULL;
ui->cache = NULL;
@@ -2610,11 +2610,7 @@ unwind_command (exp, from_tty)
int from_tty;
{
CORE_ADDR address;
- union
- {
- int *foo;
- struct unwind_table_entry *u;
- } xxx;
+ struct unwind_table_entry *u;
/* If we have an expression, evaluate it and use it as the address. */
@@ -2623,16 +2619,61 @@ unwind_command (exp, from_tty)
else
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;
}
- printf_unfiltered ("%08x\n%08X\n%08X\n%08X\n", xxx.foo[0], xxx.foo[1], xxx.foo[2],
- xxx.foo[3]);
+ printf_unfiltered ("unwind_table_entry (0x%x):\n", u);
+
+ 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 */
diff --git a/gdb/monitor.h b/gdb/monitor.h
index d0553d0..64e7870 100644
--- a/gdb/monitor.h
+++ b/gdb/monitor.h
@@ -104,7 +104,7 @@ struct monitor_ops
char *load; /* load command */
char *loadresp; /* Response to load command */
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 */
struct target_ops *target; /* target operations */
int stopbits; /* number of stop bits */
@@ -126,6 +126,7 @@ struct monitor_ops
matically supply register dump when
coming back after a continue. */
#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;
diff --git a/gdb/op50-rom.c b/gdb/op50-rom.c
index d5a3eb1..fbdf67e 100644
--- a/gdb/op50-rom.c
+++ b/gdb/op50-rom.c
@@ -53,57 +53,69 @@ static char *op50n_regnames[NUM_REGS] =
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 =
{
- 0, /* flags */
+ MO_CLR_BREAK_USES_ADDR /*| MO_GETMEM_READ_SINGLE*/, /* flags */
op50n_inits, /* Init strings */
- "g\n", /* continue command */
- "t\n", /* single step */
- NULL, /* Interrupt char */
- "b %x\n", /* set a breakpoint */
- "bx %x\n", /* clear a breakpoint */
- NULL, /* clear all breakpoints */
- NULL, /* memory fill cmd */
+ "g\r", /* continue command */
+ "t\r", /* single step */
+ "\003", /* Interrupt char */
+ "b %x\r", /* set a breakpoint */
+ "b %x,0\r", /* clear breakpoint at addr */
+ "bx\r", /* clear all breakpoints */
+ "fx %x s%x %x\r", /* memory fill cmd (addr, len, val) */
{
- "sx %x %x;.\n", /* setmem.cmdb (addr, value) */
- NULL, /* setmem.cmdw (addr, value) */
- NULL, /* setmem.cmdl (addr, value) */
+ "sx %x %x\r", /* setmem.cmdb (addr, value) */
+ "sh %x %x\r", /* setmem.cmdw (addr, value) */
+ "s %x %x\r", /* setmem.cmdl (addr, value) */
NULL, /* setmem.cmdll (addr, value) */
- NULL, /* setreg.resp_delim */
- NULL, /* setreg.term */
- NULL, /* setreg.term_cmd */
+ NULL, /* setmem.resp_delim */
+ NULL, /* setmem.term */
+ NULL, /* setmem.term_cmd */
+ },
+#if 0
+ {
+ "sx %x\r", /* getmem.cmdb (addr, len) */
+ "sh %x\r", /* getmem.cmdw (addr, len) */
+ "s %x\r", /* getmem.cmdl (addr, len) */
+ NULL, /* getmem.cmdll (addr, len) */
+ " : ", /* getmem.resp_delim */
+ " ", /* getmem.term */
+ ".\r", /* getmem.term_cmd */
},
+#else
{
- "sx %x\n", /* getmem.cmdb (addr, value) */
- NULL, /* getmem.cmdw (addr, value) */
- NULL, /* getmem.cmdl (addr, value) */
- NULL, /* getmem.cmdll (addr, value) */
- ": ", /* getmem.resp_delim */
+ "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_cmd */
},
+#endif
{
- "x %s %x\n", /* setreg.cmd (name, value) */
+ "x %s %x\r", /* setreg.cmd (name, value) */
NULL, /* setreg.resp_delim */
NULL, /* setreg.term */
NULL, /* setreg.term_cmd */
},
{
- "x %s\n", /* getreg.cmd (name) */
+ "x %s\r", /* getreg.cmd (name) */
"=", /* getreg.resp_delim */
- NULL, /* getreg.term */
- NULL, /* getreg.term_cmd */
+ " ", /* getreg.term */
+ ".\r", /* getreg.term_cmd */
},
NULL, /* dump_registers */
NULL, /* register_pattern */
NULL, /* supply_register */
NULL, /* load routine */
- "r 0\n", /* download command */
+ "r 0\r", /* download command */
NULL, /* load response */
- "#", /* monitor command prompt */
- NULL, /* end-of-command delimitor */
+ "\n#", /* monitor command prompt */
+ "\r", /* end-of-command delimitor */
NULL, /* optional command terminator */
&op50n_ops, /* target operations */
SERIAL_1_STOPBITS, /* number of stop bits */
diff --git a/gdb/w89k-rom.c b/gdb/w89k-rom.c
index 1aca2b4..9eaf25c 100644
--- a/gdb/w89k-rom.c
+++ b/gdb/w89k-rom.c
@@ -240,57 +240,57 @@ w89k_load (desc, file, hashmark)
static struct target_ops w89k_ops;
-static char *w89k_inits[] = {"\r", NULL};
+static char *w89k_inits[] = {"\n", NULL};
static struct monitor_ops w89k_cmds =
{
MO_GETMEM_NEEDS_RANGE|MO_FILL_USES_ADDR, /* flags */
w89k_inits, /* Init strings */
- "g\r", /* continue command */
- "t\r", /* single step */
- NULL, /* Interrupt char */
- "bp %x\r", /* set a breakpoint */
- "bc %x\r", /* clear a breakpoint */
- "bc *\r", /* clear all breakpoints */
- "f %x %x %x\r", /* memory fill cmd */
+ "g\n", /* continue command */
+ "t\n", /* single step */
+ "\003", /* Interrupt char (^C) */
+ "bp %x\n", /* set a breakpoint */
+ "bc %x\n", /* clear a breakpoint */
+ "bc *\n", /* clear all breakpoints */
+ "f %x %x %x\n", /* memory fill cmd */
{
- "eb %x %x\r", /* setmem.cmdb (addr, value) */
- "eh %x %x\r", /* setmem.cmdw (addr, value) */
- "ew %x %x\r", /* setmem.cmdl (addr, value) */
+ "eb %x %x\n", /* setmem.cmdb (addr, value) */
+ "eh %x %x\n", /* setmem.cmdw (addr, value) */
+ "ew %x %x\n", /* setmem.cmdl (addr, value) */
NULL, /* setmem.cmdll (addr, value) */
NULL, /* setreg.resp_delim */
NULL, /* setreg.term */
NULL, /* setreg.term_cmd */
},
{
- "db %x %x\r", /* getmem.cmdb (startaddr, endaddr) */
- "dh %x %x\r", /* getmem.cmdw (startaddr, endaddr) */
- "dw %x %x\r", /* getmem.cmdl (startaddr, endaddr) */
+ "db %x %x\n", /* getmem.cmdb (startaddr, endaddr) */
+ "dh %x %x\n", /* getmem.cmdw (startaddr, endaddr) */
+ "dw %x %x\n", /* getmem.cmdl (startaddr, endaddr) */
NULL, /* getmem.cmdll (startaddr, endaddr) */
" ", /* getmem.resp_delim */
NULL, /* getmem.term */
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.term */
NULL, /* setreg.term_cmd */
},
{
- "r %s\r", /* getreg.cmd (name) */
+ "r %s\n", /* getreg.cmd (name) */
"\r", /* getreg.resp_delim */
NULL, /* getreg.term */
NULL, /* getreg.term_cmd */
},
- "r\r", /* dump_registers */
+ "r\n", /* dump_registers */
"\\(\\w+\\)\\( +[0-9a-fA-F]+\\b\\)+",
w89k_supply_register, /* supply_register */
w89k_load, /* load routine */
- "u %x\r", /* download command */
- "\r", /* load response */
+ "u %x\n", /* download command */
+ "\021", /* load response (^Q) */
"ROM>", /* monitor command prompt */
- NULL, /* end-of-command delimitor */
+ "\n", /* end-of-line terminator */
NULL, /* optional command terminator */
&w89k_ops, /* target operations */
SERIAL_1_STOPBITS, /* number of stop bits */