public inbox for insight@sourceware.org
 help / color / mirror / Atom feed
* [RFA] 64 bit address patch
@ 2001-10-25 15:17 Martin M. Hunt
  2001-10-25 19:56 ` Keith Seitz
  0 siblings, 1 reply; 2+ messages in thread
From: Martin M. Hunt @ 2001-10-25 15:17 UTC (permalink / raw)
  To: Insight Mailing List; +Cc: keiths

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;
     }
 

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [RFA] 64 bit address patch
  2001-10-25 15:17 [RFA] 64 bit address patch Martin M. Hunt
@ 2001-10-25 19:56 ` Keith Seitz
  0 siblings, 0 replies; 2+ messages in thread
From: Keith Seitz @ 2001-10-25 19:56 UTC (permalink / raw)
  To: Martin M. Hunt; +Cc: Insight Mailing List

On Thu, 25 Oct 2001, Martin M. Hunt wrote:

> 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().

YES YES YES YES YES YES YES YES!!!

I keep forgetting all about this sort of thing, and now that we officially
have string_to_core_addr and core_addr_to_string, there is zero excuse for
not using them.

Just two very minor nits...

> 	* generic/gdbtk-cmds.c (gdb_get_mem): :Use string_to_core_addr
                                            ^^^^

> +gdb_find_bp_at_addr ( ClientData clientData, Tcl_Interp *interp,
                        ^

> +		      int objc, Tcl_Obj *CONST objv[])

Can you tweak the changelog and whack the stray space before checking this
in?

WONDERFUL! Thanks a whole lot. This has been a long time coming. (And
thanks to John Moore and Andrew Cagney for recognizing this and
implementing something that we can use!)

Keith



^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2001-10-25 19:56 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-10-25 15:17 [RFA] 64 bit address patch Martin M. Hunt
2001-10-25 19:56 ` Keith Seitz

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).