OSDN Git Service

2004-07-02 Martin Hunt <hunt@redhat.com>
authorhunt <hunt>
Fri, 2 Jul 2004 22:00:55 +0000 (22:00 +0000)
committerhunt <hunt>
Fri, 2 Jul 2004 22:00:55 +0000 (22:00 +0000)
* 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().

gdb/gdbtk/ChangeLog
gdb/gdbtk/generic/gdbtk-bp.c
gdb/gdbtk/generic/gdbtk-cmds.c
gdb/gdbtk/generic/gdbtk-cmds.h

index 7e59d23..4b8780c 100644 (file)
@@ -1,3 +1,18 @@
+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
index 8ed01c4..31cca04 100644 (file)
@@ -313,7 +313,7 @@ gdb_get_breakpoint_info (ClientData clientData, Tcl_Interp *interp, int objc,
 
   sal = find_pc_line (b->loc->address, 0);
 
-  filename = symtab_to_fullname (sal.symtab);
+  filename = symtab_to_filename (sal.symtab);
   if (filename == NULL)
     filename = "";
 
@@ -826,7 +826,7 @@ gdb_get_tracepoint_info (ClientData clientData, Tcl_Interp *interp,
 
   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,
index 11e12b5..89c61ac 100644 (file)
@@ -1079,7 +1079,7 @@ gdb_find_file_command (ClientData clientData, Tcl_Interp *interp,
        }
 
       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). */
@@ -2189,7 +2189,7 @@ gdb_loc (ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST obj
   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 = "";
 
@@ -2647,7 +2647,7 @@ gdb_loadfile (ClientData clientData, Tcl_Interp *interp, int objc,
       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");
@@ -2999,3 +2999,31 @@ gdb_CA_to_TAS (ClientData clientData, Tcl_Interp *interp,
 
   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;
+}
index 8193dae..a659b38 100644 (file)
@@ -54,4 +54,7 @@ extern int Gdbtk_Breakpoint_Init (Tcl_Interp *interp);
 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 */