From: Andrew Cagney Date: Fri, 14 Jan 2005 20:24:20 +0000 (+0000) Subject: 2005-01-14 Andrew Cagney X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=05ff989b0b012d3c83f5908dd9750e01a74cc3de;p=binutils-gdb.git 2005-01-14 Andrew Cagney * 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. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index b0a3a4e8ebf..a22ece8584e 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,18 @@ 2005-01-14 Andrew Cagney + * 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 9cec24ce939..75249f5b7cf 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 = ¬_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 = ©_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 ed8088fbc85..c87f083fcf5 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 781864b5033..aed10a8e5fe 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 919738a7375..03318aef775 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 b1f82a74be5..0d853a7555c 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 1d84967f6f5..a7eea61de30 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)