diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 3b201ea271..c1462814ec 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 * remote-est.c (est_open): Make static to match prototype. diff --git a/gdb/hppa-tdep.c b/gdb/hppa-tdep.c index 042a07f501..b7711700c3 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 d0553d0e4c..64e78707fe 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 d5a3eb18fc..fbdf67ec0c 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\n", /* getmem.cmdb (addr, value) */ - NULL, /* getmem.cmdw (addr, value) */ - NULL, /* getmem.cmdl (addr, value) */ - NULL, /* getmem.cmdll (addr, value) */ - ": ", /* getmem.resp_delim */ + "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 + { + "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 1aca2b49e9..9eaf25c2f9 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 */