+2004-07-02 Martin Hunt <hunt@redhat.com>
+
+ * generic/gdbtk-cmds.c (symtab_to_filename): New function. Like
+ symtab_to_fullname() but returns the filename if the fullname
+ cannot be found.
+
+ * generic/gdbtk-cmds.c (gdb_find_file_command): Revert
+ patch of 2004-06-11. Use symtab_to_filename() again.
+ (gdb_loc): Ditto.
+ (gdb_loadfile): Ditto.
+ * generic/gdbtk-bp.c (gdb_get_breakpoint_info): Ditto.
+ (gdb_get_tracepoint_info): Ditto.
+
+ * generic/gdbtk-cmds.h: Declare symtab_to_filename().
+
2004-06-26 Andrew Cagney <cagney@gnu.org>
* generic/gdbtk-hooks.c (gdbtk_add_hooks): Call
sal = find_pc_line (b->loc->address, 0);
- filename = symtab_to_fullname (sal.symtab);
+ filename = symtab_to_filename (sal.symtab);
if (filename == NULL)
filename = "";
Tcl_SetListObj (result_ptr->obj_ptr, 0, NULL);
sal = find_pc_line (tp->address, 0);
- filename = symtab_to_fullname (sal.symtab);
+ filename = symtab_to_filename (sal.symtab);
if (filename == NULL)
filename = "N/A";
Tcl_ListObjAppendElement (interp, result_ptr->obj_ptr,
}
fullname =
- (st->fullname == NULL ? symtab_to_fullname (st) : st->fullname);
+ (st->fullname == NULL ? symtab_to_filename (st) : st->fullname);
}
/* We may not be able to open the file (not available). */
Tcl_ListObjAppendElement (NULL, result_ptr->obj_ptr,
Tcl_NewStringObj (fname, -1));
- filename = symtab_to_fullname (sal.symtab);
+ filename = symtab_to_filename (sal.symtab);
if (filename == NULL)
filename = "";
return TCL_ERROR;
}
- file = symtab_to_fullname ( symtab );
+ file = symtab_to_filename ( symtab );
if ((fp = fopen ( file, "r" )) == NULL)
{
gdbtk_set_result (interp, "Can't open file for reading");
return TCL_OK;
}
+
+/* Another function that was removed in GDB and replaced
+ * with something similar, but different enough to break
+ * Insight.
+ */
+int find_and_open_source (struct objfile *objfile, const char *filename,
+ const char *dirname, char **fullname);
+
+char *
+symtab_to_filename (struct symtab *s)
+{
+
+ int r;
+
+ if (!s)
+ return NULL;
+
+ /* Don't check s->fullname here, the file could have been
+ deleted/moved/..., look for it again */
+ r = find_and_open_source (s->objfile, s->filename, s->dirname,
+ &s->fullname);
+ if (r)
+ close (r);
+
+ if (s->fullname && *s->fullname)
+ return s->fullname;
+ return s->filename;
+}
extern int Gdbtk_Stack_Init (Tcl_Interp *interp);
extern int Gdbtk_Register_Init (Tcl_Interp *interp);
+/* replacement for removed gdb function */
+char *symtab_to_filename (struct symtab *s);
+
#endif /* GDBTK_CMDS_H */