This is the mail archive of the insight@sources.redhat.com mailing list for the Insight project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

[RFA] 64 bit address patch


This patch fixes gdb_find_bp_at_addr(),  gdb_set_bp_addr(), and gdb_get_mem() 
to accept 64-bit addresses.  It also fixes broken error messages in those 
functions and gdb_set_bp().

-- 
Martin Hunt
GDB Engineer
Red Hat, Inc.

2001-10-25  Martin M. Hunt  <hunt@redhat.com>

	* generic/gdbtk-bp.c (gdb_find_bp_at_addr): Use
	string_to_core_addr to read address so 64 bits will work.
	(gdb_set_bp): Set error message with Tcl_SetObjResult()
	so it will be displayed.
	(gdb_set_bp_addr):Use string_to_core_addr to read address.
	Set error message with Tcl_SetObjResult().

	* generic/gdbtk-cmds.c (gdb_get_mem): :Use string_to_core_addr 
	to read address. Set error message with Tcl_SetObjResult() or
	Tcl_WrongNumArgs.

Index: gdbtk-bp.c
===================================================================
RCS file: /cvs/src/src/gdb/gdbtk/generic/gdbtk-bp.c,v
retrieving revision 1.10
diff -u -p -r1.10 gdbtk-bp.c
--- gdbtk-bp.c	2001/10/06 01:42:33	1.10
+++ gdbtk-bp.c	2001/10/25 22:13:06
@@ -200,15 +200,11 @@ Gdbtk_Breakpoint_Init (Tcl_Interp *inter
  *    It returns a list of breakpoint numbers
  */
 static int
-gdb_find_bp_at_addr (clientData, interp, objc, objv)
-     ClientData clientData;
-     Tcl_Interp *interp;
-     int objc;
-     Tcl_Obj *CONST objv[];
-
+gdb_find_bp_at_addr ( ClientData clientData, Tcl_Interp *interp,
+		      int objc, Tcl_Obj *CONST objv[])
 {
   int i;
-  long addr;
+  CORE_ADDR addr;
 
   if (objc != 2)
     {
@@ -216,17 +212,13 @@ gdb_find_bp_at_addr (clientData, interp,
       return TCL_ERROR;
     }
 
-  if (Tcl_GetLongFromObj (interp, objv[1], &addr) == TCL_ERROR)
-    {
-      result_ptr->flags = GDBTK_IN_TCL_RESULT;
-      return TCL_ERROR;
-    }
+  addr = string_to_core_addr (Tcl_GetStringFromObj (objv[1], NULL));
 
   Tcl_SetListObj (result_ptr->obj_ptr, 0, NULL);
   for (i = 0; i < breakpoint_list_size; i++)
     {
       if (breakpoint_list[i] != NULL
-	  && breakpoint_list[i]->address == (CORE_ADDR) addr)
+	  && breakpoint_list[i]->address == addr)
 	Tcl_ListObjAppendElement (NULL, result_ptr->obj_ptr,
 				  Tcl_NewIntObj (i));
     }
@@ -489,11 +481,8 @@ gdb_get_breakpoint_list (clientData, int
  *    The return value of the call to gdbtk_tcl_breakpoint.
  */
 static int
-gdb_set_bp (clientData, interp, objc, objv)
-     ClientData clientData;
-     Tcl_Interp *interp;
-     int objc;
-     Tcl_Obj *CONST objv[];
+gdb_set_bp (ClientData clientData, Tcl_Interp *interp,
+	    int objc, Tcl_Obj *CONST objv[])
 {
   struct symtab_and_line sal;
   int line, thread = -1;
@@ -518,19 +507,14 @@ gdb_set_bp (clientData, interp, objc, ob
     }
 
   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 = disp_del;
   else if (strncmp (typestr, "normal", 6) == 0)
     disp = disp_donttouch;
   else
     {
-      Tcl_SetStringObj (result_ptr->obj_ptr,
-			"type must be \"temp\" or \"normal\"", -1);
+      Tcl_SetObjResult (interp, 
+			Tcl_NewStringObj ("type must be \"temp\" or \"normal\"", -1));
       return TCL_ERROR;
     }
 
@@ -582,7 +566,7 @@ gdb_set_bp_addr (ClientData clientData, 
 {
   struct symtab_and_line sal;
   int thread = -1;
-  long addr;
+  CORE_ADDR addr;
   struct breakpoint *b;
   char *typestr, *buf;
   enum bpdisp disp;
@@ -593,26 +577,17 @@ gdb_set_bp_addr (ClientData clientData, 
       return TCL_ERROR;
     }
 
-  if (Tcl_GetLongFromObj (interp, objv[1], &addr) == TCL_ERROR)
-    {
-      result_ptr->flags = GDBTK_IN_TCL_RESULT;
-      return TCL_ERROR;
-    }
+  addr = string_to_core_addr (Tcl_GetStringFromObj (objv[1], NULL));
 
   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 = disp_del;
   else if (strncmp (typestr, "normal", 6) == 0)
     disp = disp_donttouch;
   else
     {
-      Tcl_SetStringObj (result_ptr->obj_ptr,
-			"type must be \"temp\" or \"normal\"", -1);
+      Tcl_SetObjResult (interp, 
+			Tcl_NewStringObj ("type must be \"temp\" or \"normal\"", -1));
       return TCL_ERROR;
     }
 
Index: gdbtk-cmds.c
===================================================================
RCS file: /cvs/src/src/gdb/gdbtk/generic/gdbtk-cmds.c,v
retrieving revision 1.41
diff -u -p -r1.41 gdbtk-cmds.c
--- gdbtk-cmds.c	2001/10/17 20:35:32	1.41
+++ gdbtk-cmds.c	2001/10/25 22:13:07
@@ -2567,24 +2567,18 @@ gdb_set_mem (clientData, interp, objc, o
  * a list of elements followed by an optional ASCII dump */
 
 static int
-gdb_get_mem (clientData, interp, objc, objv)
-     ClientData clientData;
-     Tcl_Interp *interp;
-     int objc;
-     Tcl_Obj *CONST objv[];
+gdb_get_mem (ClientData clientData, Tcl_Interp *interp,
+	     int objc, Tcl_Obj *CONST objv[])
 {
   int size, asize, i, j, bc;
   CORE_ADDR addr;
   int nbytes, rnum, bpr;
-  long tmp;
   char format, buff[128], aschar, *mbuf, *mptr, *cptr, *bptr;
   struct type *val_type;
 
   if (objc < 6 || objc > 7)
     {
-      Tcl_SetStringObj (result_ptr->obj_ptr,
-			"addr format size bytes bytes_per_row ?ascii_char?",
-			-1);
+      Tcl_WrongNumArgs (interp, 1, objv, "addr format size bytes 
bytes_per_row ?ascii_char?");
       return TCL_ERROR;
     }
 
@@ -2595,7 +2589,7 @@ gdb_get_mem (clientData, interp, objc, o
     }
   else if (size <= 0)
     {
-      Tcl_SetStringObj (result_ptr->obj_ptr, "Invalid size, must be > 0", 
-1);
+      Tcl_SetObjResult (interp, Tcl_NewStringObj ("Invalid size, must be > 
0", -1));
       return TCL_ERROR;
     }
 
@@ -2606,9 +2600,8 @@ gdb_get_mem (clientData, interp, objc, o
     }
   else if (nbytes <= 0)
     {
-      Tcl_SetStringObj (result_ptr->obj_ptr,
-			"Invalid number of bytes, must be > 0",
-			-1);
+      Tcl_SetObjResult (interp, 
+			Tcl_NewStringObj ("Invalid number of bytes, must be > 0", -1));
       return TCL_ERROR;
     }
 
@@ -2619,21 +2612,18 @@ gdb_get_mem (clientData, interp, objc, o
     }
   else if (bpr <= 0)
     {
-      Tcl_SetStringObj (result_ptr->obj_ptr,
-			"Invalid bytes per row, must be > 0", -1);
+      Tcl_SetObjResult (interp,
+			Tcl_NewStringObj ("Invalid bytes per row, must be > 0", -1));
       return TCL_ERROR;
     }
 
-  if (Tcl_GetLongFromObj (interp, objv[1], &tmp) != TCL_OK)
-    return TCL_OK;
+  addr = string_to_core_addr (Tcl_GetStringFromObj (objv[1], NULL));
 
-  addr = (CORE_ADDR) tmp;
-
   format = *(Tcl_GetStringFromObj (objv[2], NULL));
   mbuf = (char *) malloc (nbytes + 32);
   if (!mbuf)
     {
-      Tcl_SetStringObj (result_ptr->obj_ptr, "Out of memory.", -1);
+      Tcl_SetObjResult (interp, Tcl_NewStringObj ("Out of memory.", -1));
       return TCL_ERROR;
     }
 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]