1999-02-02 Martin Hunt <hunt@cygnus.com>
[deliverable/binutils-gdb.git] / gdb / gdbtk-cmds.c
index 19311c63288daaf4b8744d625378a9aa48c34f8d..2bdcddf2a94c51bc881aef69c1e96c0c2fd15d86 100644 (file)
@@ -135,12 +135,15 @@ static char old_regs[REGISTER_BYTES];
    of the breakpoint structure (respectively) into something gdbtk understands.
    They are also used in gdbtk-hooks.c */
 
-char *bptypes[] = {"breakpoint", "hardware breakpoint", "until",
-                             "finish", "watchpoint", "hardware watchpoint",
-                             "read watchpoint", "access watchpoint",
-                             "longjmp", "longjmp resume", "step resume",
-                             "through sigtramp", "watchpoint scope",
-                             "call dummy" };
+char *bptypes[] = {"none", "breakpoint", "hw breakpoint", "until",
+                  "finish", "watchpoint", "hw watchpoint",
+                  "read watchpoint", "acc watchpoint",
+                  "longjmp", "longjmp resume", "step resume",
+                  "sigtramp", "watchpoint scope",
+                  "call dummy", "shlib events", "catch load",
+                  "catch unload", "catch fork", "catch vfork",
+                  "catch exec", "catch catch", "catch throw"
+};
 char *bpdisp[] = {"delete", "delstop", "disable", "donttouch"};
 
 /*
@@ -1708,13 +1711,18 @@ get_register (regnum, fp)
   if (format == 'r')
     {
       int j;
-      printf_filtered ("0x");
+      char *ptr, buf[1024];
+
+      strcpy (buf, "0x");
+      ptr = buf + 2;      
       for (j = 0; j < REGISTER_RAW_SIZE (regnum); j++)
         {
           register int idx = TARGET_BYTE_ORDER == BIG_ENDIAN ? j
             : REGISTER_RAW_SIZE (regnum) - 1 - j;
-          printf_filtered ("%02x", (unsigned char)raw_buffer[idx]);
+          sprintf(ptr, "%02x", (unsigned char)raw_buffer[idx]);
+         ptr += 2;
         }
+      fputs_filtered (buf, gdb_stdout);
     }
   else
     val_print (REGISTER_VIRTUAL_TYPE (regnum), virtual_buffer, 0, 0,
@@ -2789,7 +2797,7 @@ gdb_loadfile (clientData, interp, objc, objv)
       Tcl_DStringAppend (&text_cmd_2, " insert end { \t", -1);
       prefix_len_2 = Tcl_DStringLength(&text_cmd_2);
       
-      while (fgets (line + 1, 980, fp))
+      while (fgets (line + 1, 9980, fp))
         {
           sprintf (line_num_buf, "%d", ln);
           if (ltable[ln >> 3] & (1 << (ln % 8)))
@@ -2896,36 +2904,47 @@ gdb_set_bp (clientData, interp, objc, objv)
   Tcl_Interp *interp;
   int objc;
   Tcl_Obj *CONST objv[];
-
 {
   struct symtab_and_line sal;
-  int line, flags, ret, thread = -1;
+  int line, ret, thread = -1;
   struct breakpoint *b;
-  char buf[64];
+  char buf[64], *typestr;
   Tcl_DString cmd;
+  enum bpdisp disp;
 
   if (objc != 4 && objc != 5)
     {
-      Tcl_WrongNumArgs(interp, 1, objv, "filename line type [thread]");
+      Tcl_SetStringObj (result_ptr->obj_ptr, 
+         "wrong number of args, should be \"filename line type [thread]\"", -1);
       return TCL_ERROR; 
     }
   
   sal.symtab = full_lookup_symtab (Tcl_GetStringFromObj( objv[1], NULL));
   if (sal.symtab == NULL)
     return TCL_ERROR;
-
+  
   if (Tcl_GetIntFromObj( interp, objv[2], &line) == TCL_ERROR)
     {
       result_ptr->flags = GDBTK_IN_TCL_RESULT;
       return TCL_ERROR;
     }
-
-  if (Tcl_GetIntFromObj( interp, objv[3], &flags) == TCL_ERROR)
+  
+  typestr = Tcl_GetStringFromObj( objv[3], NULL);
+  if (typestr == NULL)
     {
       result_ptr->flags = GDBTK_IN_TCL_RESULT;
       return TCL_ERROR;
     }
-
+  if (strncmp( typestr, "temp", 4 ) == 0)
+    disp = del;
+  else if (strncmp( typestr, "normal", 6 ) == 0)
+    disp = donttouch;
+  else
+    {
+      Tcl_SetStringObj (result_ptr->obj_ptr, "type must be \"temp\" or \"normal\"", -1);
+      return TCL_ERROR;
+    }
+  
   if (objc == 5)
     {
       if (Tcl_GetIntFromObj( interp, objv[4], &thread) == TCL_ERROR)
@@ -2943,8 +2962,8 @@ gdb_set_bp (clientData, interp, objc, objv)
   b = set_raw_breakpoint (sal);
   set_breakpoint_count (breakpoint_count + 1);
   b->number = breakpoint_count;
-  b->type = flags >> 2;
-  b->disposition = flags & 3;
+  b->type = bp_breakpoint;
+  b->disposition = disp;
   b->thread = thread;
 
   /* FIXME: this won't work for duplicate basenames! */
@@ -2996,15 +3015,17 @@ gdb_set_bp_addr (clientData, interp, objc, objv)
 
 {
   struct symtab_and_line sal;
-  int line, flags, ret, thread = -1;
+  int line, ret, thread = -1;
   long addr;
   struct breakpoint *b;
-  char *filename, buf[64];
+  char *filename, *typestr, buf[64];
   Tcl_DString cmd;
+  enum bpdisp disp;
 
   if (objc != 4 && objc != 3)
     {
-      Tcl_WrongNumArgs(interp, 1, objv, "addr type ?thread?");
+      Tcl_SetStringObj (result_ptr->obj_ptr, 
+         "wrong number of args, should be \"address type [thread]\"", -1);
       return TCL_ERROR; 
     }
   
@@ -3013,13 +3034,23 @@ gdb_set_bp_addr (clientData, interp, objc, objv)
       result_ptr->flags = GDBTK_IN_TCL_RESULT;
       return TCL_ERROR;
     }
-
-  if (Tcl_GetIntFromObj( interp, objv[2], &flags) == TCL_ERROR)
+  
+  typestr = Tcl_GetStringFromObj( objv[2], NULL);
+  if (typestr == NULL)
     {
       result_ptr->flags = GDBTK_IN_TCL_RESULT;
       return TCL_ERROR;
     }
-
+  if (strncmp( typestr, "temp", 4 ) == 0)
+    disp = del;
+  else if (strncmp( typestr, "normal", 6 ) == 0)
+    disp = donttouch;
+  else
+    {
+      Tcl_SetStringObj (result_ptr->obj_ptr, "type must be \"temp\" or \"normal\"", -1);
+      return TCL_ERROR;
+    }
+  
   if (objc == 4)
     {
       if (Tcl_GetIntFromObj( interp, objv[3], &thread) == TCL_ERROR)
@@ -3034,8 +3065,8 @@ gdb_set_bp_addr (clientData, interp, objc, objv)
   b = set_raw_breakpoint (sal);
   set_breakpoint_count (breakpoint_count + 1);
   b->number = breakpoint_count;
-  b->type = flags >> 2;
-  b->disposition = flags & 3;
+  b->type = bp_breakpoint;
+  b->disposition = disp;
   b->thread = thread;
 
   sprintf (buf, "*(0x%lx)",addr);
@@ -3229,7 +3260,7 @@ gdb_get_breakpoint_info (clientData, interp, objc, objv)
   Tcl_ListObjAppendElement (NULL, result_ptr->obj_ptr, new_obj);
   
   Tcl_ListObjAppendElement (NULL, result_ptr->obj_ptr, Tcl_NewIntObj (b->line_number));
-  sprintf_append_element_to_obj (result_ptr->obj_ptr, "0x%lx", b->address);
+  sprintf_append_element_to_obj (result_ptr->obj_ptr, "0x%s", paddr_nz(b->address));
   Tcl_ListObjAppendElement (NULL, result_ptr->obj_ptr,
                            Tcl_NewStringObj (bptypes[b->type], -1));
   Tcl_ListObjAppendElement (NULL, result_ptr->obj_ptr, Tcl_NewBooleanObj(b->enable == enabled));
This page took 0.025212 seconds and 4 git commands to generate.