* hppa-tdep.c (read_unwind_info): Cosmetic cleanup.
authorStu Grossman <grossman@cygnus>
Thu, 11 May 1995 02:26:00 +0000 (02:26 +0000)
committerStu Grossman <grossman@cygnus>
Thu, 11 May 1995 02:26:00 +0000 (02:26 +0000)
* (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.

gdb/ChangeLog
gdb/hppa-tdep.c
gdb/monitor.h
gdb/op50-rom.c
gdb/w89k-rom.c

index 3b201ea..c146281 100644 (file)
@@ -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.
index 042a07f..b771170 100644 (file)
@@ -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 */
 
index d0553d0..64e7870 100644 (file)
@@ -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;
 
index d5a3eb1..fbdf67e 100644 (file)
@@ -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 */
index 1aca2b4..9eaf25c 100644 (file)
@@ -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 */