This is the mail archive of the
insight@sources.redhat.com
mailing list for the Insight project.
[RFA] 64 bit address patch
- To: Insight Mailing List <insight at sources dot redhat dot com>
- Subject: [RFA] 64 bit address patch
- From: "Martin M. Hunt" <hunt at redhat dot com>
- Date: Thu, 25 Oct 2001 15:16:01 -0700
- Cc: keiths at redhat dot com
- Organization: Red Hat Inc
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;
}