2005-01-16 Andrew Cagney <cagney@gnu.org>
authorAndrew Cagney <cagney@redhat.com>
Sun, 16 Jan 2005 21:20:06 +0000 (21:20 +0000)
committerAndrew Cagney <cagney@redhat.com>
Sun, 16 Jan 2005 21:20:06 +0000 (21:20 +0000)
* cli/cli-script.c: Include "exceptions.h".
(struct wrapped_read_command_file_args): Define.
(wrapped_read_command_file): New function.
(script_from_file): Replace direct call to read_command_file by
one wrapped by an exception handler.
* exceptions.c (throw_it): Free the old message after creating the
new.
* Makefile.in: Update dependencies.

Index: testsuite/ChangeLog
2005-01-16  Andrew Cagney  <cagney@gnu.org>

* gdb.base/source.exp: Delete KFAIL gdb/1846, simplify.

gdb/ChangeLog
gdb/Makefile.in
gdb/cli/cli-script.c
gdb/exceptions.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/source.exp

index ed79ba9a4a43a4f556d3ccde1b735d4caa72285d..a9d35b14fe69b18e4de96ea4111f31767352eabe 100644 (file)
@@ -1,3 +1,14 @@
+2005-01-16  Andrew Cagney  <cagney@gnu.org>
+
+       * cli/cli-script.c: Include "exceptions.h".
+       (struct wrapped_read_command_file_args): Define.
+       (wrapped_read_command_file): New function.
+       (script_from_file): Replace direct call to read_command_file by
+       one wrapped by an exception handler.
+       * exceptions.c (throw_it): Free the old message after creating the
+       new.
+       * Makefile.in: Update dependencies.
+       
 2005-01-16  Mark Kettenis  <kettenis@gnu.org>
 
        * sparc64fbsd-tdep.c: Update copyright year.
index 567732d8addb6987b83c6349394fb8a0cae911ea..d80091b662de6b8e8d80965c54eb7f99d1c05cd5 100644 (file)
@@ -2066,7 +2066,8 @@ i387-tdep.o: i387-tdep.c $(defs_h) $(doublest_h) $(floatformat_h) $(frame_h) \
        $(gdbcore_h) $(inferior_h) $(language_h) $(regcache_h) $(value_h) \
        $(gdb_assert_h) $(gdb_string_h) $(i386_tdep_h) $(i387_tdep_h)
 ia64-linux-nat.o: ia64-linux-nat.c $(defs_h) $(gdb_string_h) $(inferior_h) \
-       $(target_h) $(gdbcore_h) $(regcache_h) $(gdb_wait_h) $(gregset_h)
+       $(target_h) $(gdbcore_h) $(regcache_h) $(ia64_tdep_h) $(gdb_wait_h) \
+       $(gregset_h)
 ia64-linux-tdep.o: ia64-linux-tdep.c $(defs_h) $(ia64_tdep_h) \
        $(arch_utils_h) $(gdbcore_h) $(regcache_h) $(osabi_h)
 ia64-tdep.o: ia64-tdep.c $(defs_h) $(inferior_h) $(gdbcore_h) \
@@ -2140,7 +2141,7 @@ libunwind-frame.o: libunwind-frame.c $(defs_h) $(inferior_h) $(frame_h) \
 linespec.o: linespec.c $(defs_h) $(symtab_h) $(frame_h) $(command_h) \
        $(symfile_h) $(objfiles_h) $(source_h) $(demangle_h) $(value_h) \
        $(completer_h) $(cp_abi_h) $(parser_defs_h) $(block_h) \
-       $(objc_lang_h) $(linespec_h)
+       $(objc_lang_h) $(linespec_h) $(exceptions_h)
 linux-nat.o: linux-nat.c $(defs_h) $(inferior_h) $(target_h) $(gdb_string_h) \
        $(gdb_wait_h) $(gdb_assert_h) $(linux_nat_h) $(gdbthread_h) \
        $(gdbcmd_h) $(regcache_h) $(elf_bfd_h) $(gregset_h) $(gdbcore_h) \
@@ -2532,8 +2533,8 @@ source.o: source.c $(defs_h) $(symtab_h) $(expression_h) $(language_h) \
        $(gdb_string_h) $(gdb_stat_h) $(gdbcore_h) $(gdb_regex_h) \
        $(symfile_h) $(objfiles_h) $(annotate_h) $(gdbtypes_h) $(linespec_h) \
        $(filenames_h) $(completer_h) $(ui_out_h) $(readline_h)
-sparc64fbsd-nat.o: sparc64fbsd-nat.c $(defs_h) $(target_h) \
-       $(fbsd_nat_h) $(sparc64_tdep_h) $(sparc_nat_h)
+sparc64fbsd-nat.o: sparc64fbsd-nat.c $(defs_h) $(target_h) $(fbsd_nat_h) \
+       $(sparc64_tdep_h) $(sparc_nat_h)
 sparc64fbsd-tdep.o: sparc64fbsd-tdep.c $(defs_h) $(frame_h) \
        $(frame_unwind_h) $(gdbcore_h) $(osabi_h) $(regcache_h) $(regset_h) \
        $(target_h) $(trad_frame_h) $(gdb_assert_h) $(gdb_string_h) \
@@ -2748,8 +2749,8 @@ cli-logging.o: $(srcdir)/cli/cli-logging.c $(defs_h) $(gdbcmd_h) $(ui_out_h) \
        $(gdb_string_h)
        $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/cli/cli-logging.c
 cli-script.o: $(srcdir)/cli/cli-script.c $(defs_h) $(value_h) $(language_h) \
-       $(ui_out_h) $(gdb_string_h) $(top_h) $(cli_cmds_h) $(cli_decode_h) \
-       $(cli_script_h)
+       $(ui_out_h) $(gdb_string_h) $(exceptions_h) $(top_h) $(cli_cmds_h) \
+       $(cli_decode_h) $(cli_script_h)
        $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/cli/cli-script.c
 cli-setshow.o: $(srcdir)/cli/cli-setshow.c $(defs_h) $(readline_tilde_h) \
        $(value_h) $(gdb_string_h) $(ui_out_h) $(cli_decode_h) $(cli_cmds_h) \
index 1f1cf1df0c38c1a29fdc66847685ddcbf789e2c6..2bac862e720941fed801daea497a52629a0554dd 100644 (file)
@@ -1,8 +1,8 @@
 /* GDB CLI command scripting.
 
    Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
-   1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2004 Free Software
-   Foundation, Inc.
+   1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2004, 2005 Free
+   Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -28,7 +28,7 @@
 
 #include "ui-out.h"
 #include "gdb_string.h"
-
+#include "exceptions.h"
 #include "top.h"
 #include "cli/cli-cmds.h"
 #include "cli/cli-decode.h"
@@ -1251,6 +1251,18 @@ do_fclose_cleanup (void *stream)
   fclose (stream);
 }
 
+struct wrapped_read_command_file_args
+{
+  FILE *stream;
+};
+
+static void
+wrapped_read_command_file (struct ui_out *uiout, void *data)
+{
+  struct wrapped_read_command_file_args *args = data;
+  read_command_file (args->stream);
+}
+
 /* Used to implement source_command */
 
 void
@@ -1293,7 +1305,27 @@ script_from_file (FILE *stream, char *file)
        source_error = xrealloc (source_error, source_error_allocated);
     }
 
-  read_command_file (stream);
+  {
+    struct exception e;
+    struct wrapped_read_command_file_args args;
+    args.stream = stream;
+    e = catch_exception (uiout, wrapped_read_command_file, &args,
+                        RETURN_MASK_ERROR);
+    switch (e.reason)
+      {
+      case 0:
+       break;
+      case RETURN_ERROR:
+       /* Re-throw the error, but with the file name information
+          prepended.  */
+       throw_error (e.error, "%s%s:%d: Error in sourced command file:\n%s",
+                    source_pre_error, source_file_name,
+                    source_line_number,
+                    e.message);
+      default:
+       internal_error (__FILE__, __LINE__, "bad reason");
+      }
+  }
 
   do_cleanups (old_cleanups);
 }
index d95c58aa3c871cf0b34eaa238ebb4050ab6bc90d..e640b5fb70a8130e2c83812d34586326a3619666 100644 (file)
@@ -360,10 +360,13 @@ throw_it (enum return_reason reason, enum errors error, const char *fmt,
          va_list ap)
 {
   struct exception e;
+  char *new_message;
 
-  /* Save the message.  */
+  /* Save the message.  Create the new message before deleting the
+     old, the new message may include the old message text.  */
+  new_message = xstrvprintf (fmt, ap);
   xfree (last_message);
-  last_message = xstrvprintf (fmt, ap);
+  last_message = new_message;
 
   /* Create the exception.  */
   e.reason = reason;
index 5268537075257bb71f91f56952e74f3675a40243..bc352ab69df045cb5ba71a8aca489c2ee6c3a553 100644 (file)
@@ -1,5 +1,7 @@
 2005-01-16  Andrew Cagney  <cagney@gnu.org>
 
+       * gdb.base/source.exp: Delete KFAIL gdb/1846, simplify.
+
        * gdb.base/source-error.gdb, gdb.base/source.exp: New files.
 
 2005-01-14  Andrew Cagney  <cagney@gnu.org>
index 81496d95355af2d500db45387badea239fc4f1f1..a17b314dd53f39c78ec286785f172d38b3ecc5c9 100644 (file)
@@ -35,14 +35,8 @@ set binfile ${objdir}/${subdir}/${testfile}
 
 gdb_start
 
-set test "script contains error"
-gdb_test_multiple "source ${srcdir}/${subdir}/source-error.gdb" $test {
-    -re "source-error.gdb:22: Error in sourced command file:\[\r\n\]*Cannot access memory at address 0x0.*$gdb_prompt " {
-       pass $test
-    }
-    -re "0x0:\[ \t\]+Cannot access memory at address 0x0.*$gdb_prompt " {
-       kfail gdb/1846 $test
-    }
-}
+gdb_test "source ${srcdir}/${subdir}/source-error.gdb" \
+    "source-error.gdb:22: Error in sourced command file:\[\r\n\]*Cannot access memory at address 0x0.*" \
+    "script contains error"
     
 gdb_exit