diff options
-rw-r--r-- | gdb/ChangeLog | 13 | ||||
-rw-r--r-- | gdb/ChangeLog-gdbtk | 11 | ||||
-rw-r--r-- | gdb/gdbtk.c | 65 | ||||
-rw-r--r-- | gdb/top.c | 4 |
4 files changed, 92 insertions, 1 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 19d5b29..599c5b3 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,15 @@ +Mon Apr 13 16:28:07 1998 Elena Zannoni <ezannoni@kwikemart.cygnus.com> + + * utils.c: (warning) added call to warning_hook + + * source.c: (find_source_lines) modified to call warning in case + of source vs. executable time stamp mismatch. Simplified object + file check. Initialized mtime to 0. + + * defs.h: added warning_hook prototype + + * top.c: added warning_hook prototype. + Mon Apr 13 09:54:08 1998 Keith Seitz <keiths@andros.cygnus.com> * config/sparc/tm-sun4os4.h (IS_STATIC_TRANSFORM_NAME): Add missing @@ -71,6 +83,7 @@ Wed Apr 8 16:47:33 1998 Jason Molenda (crash@bugshack.cygnus.com) * breakpoint.c (breakpoint_re_set_one): Remove Ulrich Drepper's patch of March 23 1998. +>>>>>>> 1.4385 Sat Apr 4 10:05:00 1998 Dawn Perchik <dawn@cygnus.com> * mdebugread.c (parse_partial_symbols): If this is an .mdebug diff --git a/gdb/ChangeLog-gdbtk b/gdb/ChangeLog-gdbtk index 0257c3a..330737c 100644 --- a/gdb/ChangeLog-gdbtk +++ b/gdb/ChangeLog-gdbtk @@ -1,3 +1,14 @@ +Mon Apr 13 16:28:07 1998 Elena Zannoni <ezannoni@kwikemart.cygnus.com> + + * gdbtk.c: (perror_with_name_wrapper) new function to call + perror_with_name safely. + (gdb_loadfile) added source vs. executable time stamp check. + (gdbtk_warning) new function to pass a warning message to the gui. + (gdbtk_ignorable_warning) new function to pass a warning + to the gui. Used only for the src. vs. exec check. + (gdbtk_init) added warning_hook + added include <sys/stat.h> + Mon Apr 13 12:58:26 1998 Keith Seitz <keiths@onions.cygnus.com> * gdbtk.c (gdbtk_start_timer): Include on all platforms. Decrease diff --git a/gdb/gdbtk.c b/gdb/gdbtk.c index 4c58c9b..089a0ca 100644 --- a/gdb/gdbtk.c +++ b/gdb/gdbtk.c @@ -35,6 +35,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include <winuser.h> #endif +#include <sys/stat.h> + #include <tcl.h> #include <tk.h> #include <itcl.h> @@ -95,6 +97,8 @@ static void null_routine PARAMS ((int)); static void gdbtk_flush PARAMS ((FILE *)); static void gdbtk_fputs PARAMS ((const char *, FILE *)); static int gdbtk_query PARAMS ((const char *, va_list)); +static void gdbtk_warning PARAMS ((const char *, va_list)); +static void gdbtk_ignorable_warning PARAMS ((const char *, va_list)); static char *gdbtk_readline PARAMS ((char *)); static void gdbtk_init PARAMS ((char *)); static void tk_command_loop PARAMS ((void)); @@ -303,6 +307,38 @@ gdbtk_fputs (ptr, stream) in_fputs = 0; } +static void +gdbtk_warning (warning, args) + const char *warning; + va_list args; +{ + char buf[200], *merge[2]; + char *command; + + vsprintf (buf, warning, args); + merge[0] = "gdbtk_tcl_warning"; + merge[1] = buf; + command = Tcl_Merge (2, merge); + Tcl_Eval (interp, command); + Tcl_Free (command); +} + +static void +gdbtk_ignorable_warning (warning, args) + const char *warning; + va_list args; +{ + char buf[200], *merge[2]; + char *command; + + vsprintf (buf, warning, args); + merge[0] = "gdbtk_tcl_ignorable_warning"; + merge[1] = buf; + command = Tcl_Merge (2, merge); + Tcl_Eval (interp, command); + Tcl_Free (command); +} + static int gdbtk_query (query, args) const char *query; @@ -318,7 +354,7 @@ gdbtk_query (query, args) command = Tcl_Merge (2, merge); Tcl_Eval (interp, command); Tcl_Free (command); - + val = atol (interp->result); return val; } @@ -2135,6 +2171,7 @@ gdbtk_init ( argv0 ) command_loop_hook = tk_command_loop; print_frame_info_listing_hook = gdbtk_print_frame_info; query_hook = gdbtk_query; + warning_hook = gdbtk_warning; flush_hook = gdbtk_flush; create_breakpoint_hook = gdbtk_create_breakpoint; delete_breakpoint_hook = gdbtk_delete_breakpoint; @@ -3000,6 +3037,13 @@ full_lookup_symtab(file) return NULL; } +static int +perror_with_name_wrapper (args) + char * args; +{ + perror_with_name (args); + return 1; +} /* gdb_loadfile loads a c source file into a text widget. */ @@ -3024,6 +3068,9 @@ gdb_loadfile (clientData, interp, objc, objv) char *ltable; struct symtab *symtab; struct linetable_entry *le; + long mtime = 0; + struct stat st; + if (objc != 4) { @@ -3047,6 +3094,22 @@ gdb_loadfile (clientData, interp, objc, objv) return TCL_ERROR; } + if (fstat (fp->_file, &st) < 0) + { + catch_errors (perror_with_name_wrapper, "gdbtk: get time stamp", "", + RETURN_MASK_ALL); + return TCL_ERROR; + } + + if (symtab && symtab->objfile && symtab->objfile->obfd) + mtime = bfd_get_mtime(symtab->objfile->obfd); + else if (exec_bfd) + mtime = bfd_get_mtime(exec_bfd); + + if (mtime && mtime < st.st_mtime) + gdbtk_ignorable_warning("Source file is more recent than executable.\n", (va_list)0); + + /* Source linenumbers don't appear to be in order, and a sort is */ /* too slow so the fastest solution is just to allocate a huge */ /* array and set the array entry for each linenumber */ @@ -403,6 +403,10 @@ void (*print_frame_info_listing_hook) PARAMS ((struct symtab *s, int line, int (*query_hook) PARAMS ((const char *, va_list)); +/* Replaces most of warning. */ + +void (*warning_hook) PARAMS ((const char *, va_list)); + /* Called from gdb_flush to flush output. */ void (*flush_hook) PARAMS ((FILE *stream)); |