aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Cagney <cagney@redhat.com>2005-01-14 20:24:20 +0000
committerAndrew Cagney <cagney@redhat.com>2005-01-14 20:24:20 +0000
commit05ff989b0b012d3c83f5908dd9750e01a74cc3de (patch)
tree01150b5017065db5946397f6128232d7aa5fee3c
parent35695fd6e5451726c124a1048a7f260f02cbcd1e (diff)
downloadgdb-05ff989b0b012d3c83f5908dd9750e01a74cc3de.zip
gdb-05ff989b0b012d3c83f5908dd9750e01a74cc3de.tar.gz
gdb-05ff989b0b012d3c83f5908dd9750e01a74cc3de.tar.bz2
2005-01-14 Andrew Cagney <cagney@gnu.org>
* linespec.c (symtab_from_filename, decode_variable): Use throw_error instead of error_silent. * breakpoint.c (do_captured_parse_breakpoint): Change return type to void. (break_command_1): Use catch_exception and check the error return status. * exceptions.c (throw_error): New function. (throw_vsilent): Delete function. * exceptions.h (throw_error): Declare. (throw_vsilent): Delete declaration. * utils.c (error_silent): Delete function. * defs.h (error_silent): Delete declaration.
-rw-r--r--gdb/ChangeLog13
-rw-r--r--gdb/breakpoint.c69
-rw-r--r--gdb/defs.h2
-rw-r--r--gdb/exceptions.c17
-rw-r--r--gdb/exceptions.h9
-rw-r--r--gdb/linespec.c35
-rw-r--r--gdb/utils.c15
7 files changed, 68 insertions, 92 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index b0a3a4e..a22ece8 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,18 @@
2005-01-14 Andrew Cagney <cagney@gnu.org>
+ * linespec.c (symtab_from_filename, decode_variable): Use
+ throw_error instead of error_silent.
+ * breakpoint.c (do_captured_parse_breakpoint): Change return type
+ to void.
+ (break_command_1): Use catch_exception and check the error return
+ status.
+ * exceptions.c (throw_error): New function.
+ (throw_vsilent): Delete function.
+ * exceptions.h (throw_error): Declare.
+ (throw_vsilent): Delete declaration.
+ * utils.c (error_silent): Delete function.
+ * defs.h (error_silent): Delete declaration.
+
* mi/mi-main.c (mi_execute_command): Print the exception.
* cli/cli-interp.c (safe_execute_command): Print the exception.
* exceptions.h (exception_print): Declare.
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index 9cec24c..75249f5 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -1,7 +1,7 @@
/* Everything about breakpoints, for GDB.
Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
- 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
+ 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
Free Software Foundation, Inc.
This file is part of GDB.
@@ -118,8 +118,6 @@ static void condition_command (char *, int);
static int get_number_trailer (char **, int);
-static int do_captured_parse_breakpoint (struct ui_out *, void *);
-
void set_breakpoint_count (int);
typedef enum
@@ -5079,15 +5077,13 @@ breakpoint_sals_to_pc (struct symtabs_and_lines *sals,
}
}
-static int
+static void
do_captured_parse_breakpoint (struct ui_out *ui, void *data)
{
struct captured_parse_breakpoint_args *args = data;
parse_breakpoint_sals (args->arg_p, args->sals_p, args->addr_string_p,
args->not_found_ptr);
-
- return GDB_RC_OK;
}
/* Set a breakpoint according to ARG (function, linenum or *address)
@@ -5100,6 +5096,7 @@ do_captured_parse_breakpoint (struct ui_out *ui, void *data)
static int
break_command_1 (char *arg, int flag, int from_tty, struct breakpoint *pending_bp)
{
+ struct exception e;
int tempflag, hardwareflag;
struct symtabs_and_lines sals;
struct expression **cond = 0;
@@ -5112,7 +5109,7 @@ break_command_1 (char *arg, int flag, int from_tty, struct breakpoint *pending_b
struct cleanup *old_chain;
struct cleanup *breakpoint_chain = NULL;
struct captured_parse_breakpoint_args parse_args;
- int i, rc;
+ int i;
int pending = 0;
int thread = -1;
int ignore_count = 0;
@@ -5130,57 +5127,57 @@ break_command_1 (char *arg, int flag, int from_tty, struct breakpoint *pending_b
parse_args.addr_string_p = &addr_string;
parse_args.not_found_ptr = &not_found;
- rc = catch_exceptions_with_msg (uiout, do_captured_parse_breakpoint,
- &parse_args, NULL, &err_msg,
- RETURN_MASK_ALL);
+ e = catch_exception (uiout, do_captured_parse_breakpoint,
+ &parse_args, RETURN_MASK_ALL);
/* If caller is interested in rc value from parse, set value. */
-
- if (rc != GDB_RC_OK)
+ switch (e.reason)
{
- /* Check for file or function not found. */
- if (not_found)
+ case RETURN_QUIT:
+ exception_print (gdb_stderr, NULL, e);
+ return e.reason;
+ case RETURN_ERROR:
+ switch (e.error)
{
- /* If called to resolve pending breakpoint, just return error code. */
+ case NOT_FOUND_ERROR:
+ /* If called to resolve pending breakpoint, just return
+ error code. */
if (pending_bp)
- {
- xfree (err_msg);
- return rc;
- }
+ return e.reason;
- error_output_message (NULL, err_msg);
- xfree (err_msg);
+ exception_print (gdb_stderr, NULL, e);
- /* If pending breakpoint support is turned off, throw error. */
+ /* If pending breakpoint support is turned off, throw
+ error. */
if (pending_break_support == AUTO_BOOLEAN_FALSE)
throw_reason (RETURN_ERROR);
- /* If pending breakpoint support is auto query and the user selects
- no, then simply return the error code. */
+ /* If pending breakpoint support is auto query and the user
+ selects no, then simply return the error code. */
if (pending_break_support == AUTO_BOOLEAN_AUTO &&
!nquery ("Make breakpoint pending on future shared library load? "))
- return rc;
+ return e.reason;
- /* At this point, either the user was queried about setting a
- pending breakpoint and selected yes, or pending breakpoint
- behavior is on and thus a pending breakpoint is defaulted
- on behalf of the user. */
+ /* At this point, either the user was queried about setting
+ a pending breakpoint and selected yes, or pending
+ breakpoint behavior is on and thus a pending breakpoint
+ is defaulted on behalf of the user. */
copy_arg = xstrdup (addr_start);
addr_string = &copy_arg;
sals.nelts = 1;
sals.sals = &pending_sal;
pending_sal.pc = 0;
pending = 1;
+ break;
+ default:
+ exception_print (gdb_stderr, NULL, e);
+ return e.reason;
}
- else
- {
- xfree (err_msg);
- return rc;
- }
+ default:
+ if (!sals.nelts)
+ return GDB_RC_FAIL;
}
- else if (!sals.nelts)
- return GDB_RC_FAIL;
/* Create a chain of things that always need to be cleaned up. */
old_chain = make_cleanup (null_cleanup, 0);
diff --git a/gdb/defs.h b/gdb/defs.h
index ed8088f..c87f083 100644
--- a/gdb/defs.h
+++ b/gdb/defs.h
@@ -891,8 +891,6 @@ extern NORETURN void verror (const char *fmt, va_list ap) ATTR_NORETURN;
extern NORETURN void error (const char *fmt, ...) ATTR_NORETURN ATTR_FORMAT (printf, 1, 2);
-extern NORETURN void error_silent (const char *fmt, ...) ATTR_NORETURN ATTR_FORMAT (printf, 1, 2);
-
extern NORETURN void error_stream (struct ui_file *) ATTR_NORETURN;
/* Output arbitrary error message. */
diff --git a/gdb/exceptions.c b/gdb/exceptions.c
index 781864b..aed10a8 100644
--- a/gdb/exceptions.c
+++ b/gdb/exceptions.c
@@ -1,8 +1,8 @@
/* Exception (throw catch) mechanism, for GDB, the GNU debugger.
Copyright 1986, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
- 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software
- Foundation, Inc.
+ 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free
+ Software Foundation, Inc.
This file is part of GDB.
@@ -401,15 +401,12 @@ throw_vfatal (const char *fmt, va_list ap)
}
NORETURN void
-throw_vsilent (const char *fmt, va_list ap)
+throw_error (enum errors error, const char *fmt, ...)
{
- struct exception e;
- e.reason = RETURN_ERROR;
- e.error = GENERIC_ERROR;
- xfree (last_message);
- last_message = xstrvprintf (fmt, ap);
- e.message = last_message;
- throw_exception (e);
+ va_list args;
+ va_start (args, fmt);
+ print_and_throw (RETURN_ERROR, error, error_pre_print, fmt, args);
+ va_end (args);
}
/* Call FUNC() with args FUNC_UIOUT and FUNC_ARGS, catching any
diff --git a/gdb/exceptions.h b/gdb/exceptions.h
index 919738a..03318ae 100644
--- a/gdb/exceptions.h
+++ b/gdb/exceptions.h
@@ -1,8 +1,8 @@
/* Exception (throw catch) mechanism, for GDB, the GNU debugger.
Copyright 1986, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
- 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software
- Foundation, Inc.
+ 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free
+ Software Foundation, Inc.
This file is part of GDB.
@@ -51,6 +51,7 @@ enum errors {
/* Any generic error, the corresponding text is in
exception.message. */
GENERIC_ERROR,
+ NOT_FOUND_ERROR,
/* Add more errors here. */
NR_ERRORS
};
@@ -86,8 +87,8 @@ extern NORETURN void throw_reason (enum return_reason reason) ATTR_NORETURN;
extern NORETURN void throw_verror (enum errors, const char *fmt,
va_list ap) ATTR_NORETURN;
extern NORETURN void throw_vfatal (const char *fmt, va_list ap) ATTR_NORETURN;
-extern NORETURN void throw_vsilent (const char *fmt, va_list ap) ATTR_NORETURN;
-
+extern NORETURN void throw_error (enum errors error, const char *fmt,
+ ...) ATTR_NORETURN ATTR_FORMAT (printf, 2, 3);
/* Call FUNC(UIOUT, FUNC_ARGS) but wrapped within an exception
handler. If an exception (enum return_reason) is thrown using
diff --git a/gdb/linespec.c b/gdb/linespec.c
index b1f82a7..0d853a7 100644
--- a/gdb/linespec.c
+++ b/gdb/linespec.c
@@ -1,6 +1,7 @@
/* Parser for linespec for the GNU debugger, GDB.
- Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
- 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
+
+ Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
+ 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
Free Software Foundation, Inc.
This file is part of GDB.
@@ -35,6 +36,7 @@
#include "block.h"
#include "objc-lang.h"
#include "linespec.h"
+#include "exceptions.h"
/* We share this one with symtab.c, but it is not exported widely. */
@@ -1526,18 +1528,8 @@ symtab_from_filename (char **argptr, char *p, int is_quote_enclosed,
if (!have_full_symbols () && !have_partial_symbols ())
error ("No symbol table is loaded. Use the \"file\" command.");
if (not_found_ptr)
- {
- *not_found_ptr = 1;
- /* The caller has indicated that it wishes quiet notification of any
- error where the function or file is not found. A call to
- error_silent causes an error to occur, but it does not issue
- the supplied message. The message can be manually output by
- the caller, if desired. This is used, for example, when
- attempting to set breakpoints for functions in shared libraries
- that have not yet been loaded. */
- error_silent ("No source file named %s.", copy);
- }
- error ("No source file named %s.", copy);
+ *not_found_ptr = 1;
+ throw_error (NOT_FOUND_ERROR, "No source file named %s.", copy);
}
/* Discard the file name from the arg. */
@@ -1748,19 +1740,8 @@ decode_variable (char *copy, int funfirstline, char ***canonical,
error ("No symbol table is loaded. Use the \"file\" command.");
if (not_found_ptr)
- {
- *not_found_ptr = 1;
- /* The caller has indicated that it wishes quiet notification of any
- error where the function or file is not found. A call to
- error_silent causes an error to occur, but it does not issue
- the supplied message. The message can be manually output by
- the caller, if desired. This is used, for example, when
- attempting to set breakpoints for functions in shared libraries
- that have not yet been loaded. */
- error_silent ("Function \"%s\" not defined.", copy);
- }
-
- error ("Function \"%s\" not defined.", copy);
+ *not_found_ptr = 1;
+ throw_error (NOT_FOUND_ERROR, "Function \"%s\" not defined.", copy);
}
diff --git a/gdb/utils.c b/gdb/utils.c
index 1d84967..a7eea61 100644
--- a/gdb/utils.c
+++ b/gdb/utils.c
@@ -1,8 +1,8 @@
/* General utility routines for GDB, the GNU debugger.
Copyright 1986, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
- 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software
- Foundation, Inc.
+ 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free
+ Software Foundation, Inc.
This file is part of GDB.
@@ -641,17 +641,6 @@ fatal (const char *string, ...)
va_end (args);
}
-/* Cause a silent error to occur. Any error message is recorded
- though it is not issued. */
-NORETURN void
-error_silent (const char *string, ...)
-{
- va_list args;
- va_start (args, string);
- throw_vsilent (string, args);
- va_end (args);
-}
-
/* Output an error message including any pre-print text to gdb_stderr. */
void
error_output_message (char *pre_print, char *msg)