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"};
/*
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,
char *filename;
struct symtab_and_line sal;
struct symbol *sym;
- char *fname;
+ char *funcname, *fname;
CORE_ADDR pc;
if (objc == 1)
/* For a graphical debugger we really want to highlight the */
/* assembly line that called the next function on the stack. */
/* Many architectures have the next instruction saved as the */
- /* pc on the stack, so what happens is the next instruction is hughlighted. */
- /* FIXME */
+ /* pc on the stack, so what happens is the next instruction */
+ /* is highlighted. FIXME */
pc = selected_frame->pc;
sal = find_pc_line (selected_frame->pc,
selected_frame->next != NULL
}
else
{
- Tcl_ListObjAppendElement (NULL, result_ptr->obj_ptr,
- Tcl_NewStringObj ("", -1));
+ /* find_pc_function will fail if there are only minimal symbols */
+ /* so do this instead... */
+ find_pc_partial_function (pc, &funcname, NULL, NULL);
+ /* we try cplus demangling; a guess really */
+ fname = cplus_demangle (funcname, 0);
+ if (fname)
+ {
+ Tcl_ListObjAppendElement (NULL, result_ptr->obj_ptr,
+ Tcl_NewStringObj (fname, -1));
+ free (fname);
+ }
+ else
+ Tcl_ListObjAppendElement (NULL, result_ptr->obj_ptr,
+ Tcl_NewStringObj (funcname, -1));
}
-
+
filename = symtab_to_filename (sal.symtab);
if (filename == NULL)
filename = "";
+ /* file name */
Tcl_ListObjAppendElement (NULL, result_ptr->obj_ptr,
Tcl_NewStringObj (filename, -1));
- Tcl_ListObjAppendElement (NULL, result_ptr->obj_ptr, Tcl_NewIntObj(sal.line)); /* line number */
- sprintf_append_element_to_obj (result_ptr->obj_ptr, "0x%s", paddr_nz(pc)); /* PC in current frame */
- sprintf_append_element_to_obj (result_ptr->obj_ptr, "0x%s", paddr_nz(stop_pc)); /* Real PC */
+ /* line number */
+ Tcl_ListObjAppendElement (NULL, result_ptr->obj_ptr, Tcl_NewIntObj(sal.line));
+ /* PC in current frame */
+ sprintf_append_element_to_obj (result_ptr->obj_ptr, "0x%s", paddr_nz(pc));
+ /* Real PC */
+ sprintf_append_element_to_obj (result_ptr->obj_ptr, "0x%s", paddr_nz(stop_pc));
+
+ /* shared library */
+#ifdef PC_SOLIB
+ Tcl_ListObjAppendElement (NULL, result_ptr->obj_ptr,
+ Tcl_NewStringObj (PC_SOLIB(pc), -1));
+#else
+ Tcl_ListObjAppendElement (NULL, result_ptr->obj_ptr,
+ Tcl_NewStringObj ("", -1));
+#endif
return TCL_OK;
}
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)))
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)
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! */
{
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;
}
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)
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);
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));