X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fexceptions.h;h=b8dadc7b01f8d201ab8e4e82acbd017fd8390fd8;hb=827f100cee10ed58ef9d22de35ba1d61db73e541;hp=7d68a36a21952f6cdac6d437e8cfbde0368a1e8c;hpb=c25c4a8b0e4a21b527424fa7f0675a858bf0a9e6;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/exceptions.h b/gdb/exceptions.h index 7d68a36a21..b8dadc7b01 100644 --- a/gdb/exceptions.h +++ b/gdb/exceptions.h @@ -1,8 +1,6 @@ /* Exception (throw catch) mechanism, for GDB, the GNU debugger. - Copyright (C) 1986, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, - 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, - 2009, 2010 Free Software Foundation, Inc. + Copyright (C) 1986-2014 Free Software Foundation, Inc. This file is part of GDB. @@ -40,18 +38,24 @@ enum return_reason }; #define RETURN_MASK(reason) (1 << (int)(-reason)) -#define RETURN_MASK_QUIT RETURN_MASK (RETURN_QUIT) -#define RETURN_MASK_ERROR RETURN_MASK (RETURN_ERROR) -#define RETURN_MASK_ALL (RETURN_MASK_QUIT | RETURN_MASK_ERROR) -typedef int return_mask; + +typedef enum +{ + RETURN_MASK_QUIT = RETURN_MASK (RETURN_QUIT), + RETURN_MASK_ERROR = RETURN_MASK (RETURN_ERROR), + RETURN_MASK_ALL = (RETURN_MASK_QUIT | RETURN_MASK_ERROR) +} return_mask; /* Describe all exceptions. */ enum errors { GDB_NO_ERROR, + /* Any generic error, the corresponding text is in exception.message. */ GENERIC_ERROR, + + /* Something requested was not found. */ NOT_FOUND_ERROR, /* Thread library lacks support necessary for finding thread local @@ -75,8 +79,26 @@ enum errors { /* Error accessing memory. */ MEMORY_ERROR, - /* Feature is not supported in this copy of GDB. */ - UNSUPPORTED_ERROR, + /* Value not available. E.g., a register was not collected in a + traceframe. */ + NOT_AVAILABLE_ERROR, + + /* Value was optimized out. Note: if the value was a register, this + means the register was not saved in the frame. */ + OPTIMIZED_OUT_ERROR, + + /* DW_OP_GNU_entry_value resolving failed. */ + NO_ENTRY_VALUE_ERROR, + + /* Target throwing an error has been closed. Current command should be + aborted as the inferior state is no longer valid. */ + TARGET_CLOSE_ERROR, + + /* An undefined command was executed. */ + UNDEFINED_COMMAND_ERROR, + + /* Requested feature, method, mechanism, etc. is not supported. */ + NOT_SUPPORTED_ERROR, /* Add more errors here. */ NR_ERRORS @@ -107,9 +129,8 @@ extern const struct gdb_exception exception_none; /* Functions to drive the exceptions state m/c (internal to exceptions). */ -EXCEPTIONS_SIGJMP_BUF *exceptions_state_mc_init (struct ui_out *func_uiout, - volatile struct gdb_exception * - exception, +EXCEPTIONS_SIGJMP_BUF *exceptions_state_mc_init (volatile struct + gdb_exception *exception, return_mask mask); int exceptions_state_mc_action_iter (void); int exceptions_state_mc_action_iter_1 (void); @@ -139,7 +160,7 @@ int exceptions_state_mc_action_iter_1 (void); #define TRY_CATCH(EXCEPTION,MASK) \ { \ EXCEPTIONS_SIGJMP_BUF *buf = \ - exceptions_state_mc_init (uiout, &(EXCEPTION), (MASK)); \ + exceptions_state_mc_init (&(EXCEPTION), (MASK)); \ EXCEPTIONS_SIGSETJMP (*buf); \ } \ while (exceptions_state_mc_action_iter ()) \ @@ -149,7 +170,7 @@ int exceptions_state_mc_action_iter_1 (void); /* If E is an exception, print it's error message on the specified - stream. for _fprintf, prefix the message with PREFIX... */ + stream. For _fprintf, prefix the message with PREFIX... */ extern void exception_print (struct ui_file *file, struct gdb_exception e); extern void exception_fprintf (struct ui_file *file, struct gdb_exception e, const char *prefix, @@ -166,7 +187,8 @@ extern void exception_fprintf (struct ui_file *file, struct gdb_exception e, be a good thing or a dangerous thing.'' -- the Existential Wombat. */ -extern void throw_exception (struct gdb_exception exception) ATTRIBUTE_NORETURN; +extern void throw_exception (struct gdb_exception exception) + ATTRIBUTE_NORETURN; extern void throw_verror (enum errors, const char *fmt, va_list ap) ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (2, 0); extern void throw_vfatal (const char *fmt, va_list ap) @@ -174,11 +196,6 @@ extern void throw_vfatal (const char *fmt, va_list ap) extern void throw_error (enum errors error, const char *fmt, ...) ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (2, 3); -/* Instead of deprecated_throw_reason, code should use catch_exception - and throw_exception. */ -extern void deprecated_throw_reason (enum return_reason reason) - ATTRIBUTE_NORETURN; - /* Call FUNC(UIOUT, FUNC_ARGS) but wrapped within an exception handler. If an exception (enum return_reason) is thrown using throw_exception() than all cleanups installed since @@ -226,18 +243,10 @@ extern int catch_exceptions_with_msg (struct ui_out *uiout, char **gdberrmsg, return_mask mask); -/* This function, in addition, suppresses the printing of the captured - error message. It's up to the client to print it. */ - -extern struct gdb_exception catch_exception (struct ui_out *uiout, - catch_exception_ftype *func, - void *func_args, - return_mask mask); - /* If CATCH_ERRORS_FTYPE throws an error, catch_errors() returns zero - otherwize the result from CATCH_ERRORS_FTYPE is returned. It is + otherwize the result from CATCH_ERRORS_FTYPE is returned. It is probably useful for CATCH_ERRORS_FTYPE to always return a non-zero - value. It's unfortunate that, catch_errors() does not return an + value. It's unfortunate that, catch_errors() does not return an indication of the exact exception that it caught - quit_flag might help. @@ -247,9 +256,16 @@ typedef int (catch_errors_ftype) (void *); extern int catch_errors (catch_errors_ftype *, void *, char *, return_mask); /* Template to catch_errors() that wraps calls to command - functions. */ + functions. */ typedef void (catch_command_errors_ftype) (char *, int); -extern int catch_command_errors (catch_command_errors_ftype *func, char *command, int from_tty, return_mask); +extern int catch_command_errors (catch_command_errors_ftype *func, + char *arg, int from_tty, return_mask); + +/* Like catch_command_errors, but works with const command and args. */ + +typedef void (catch_command_errors_const_ftype) (const char *, int); +extern int catch_command_errors_const (catch_command_errors_const_ftype *func, + const char *arg, int from_tty, return_mask); #endif