]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/exceptions.h
Fix buffer overrun parsing a corrupt tekhex binary.
[thirdparty/binutils-gdb.git] / gdb / exceptions.h
CommitLineData
60250e8b
AC
1/* Exception (throw catch) mechanism, for GDB, the GNU debugger.
2
61baf725 3 Copyright (C) 1986-2017 Free Software Foundation, Inc.
60250e8b
AC
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
60250e8b
AC
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
60250e8b
AC
19
20#ifndef EXCEPTIONS_H
21#define EXCEPTIONS_H
22
e74e72b4 23#include "ui-out.h"
2a78bfb5 24
8a076db9 25/* If E is an exception, print it's error message on the specified
0963b4bd 26 stream. For _fprintf, prefix the message with PREFIX... */
71fff37b
AC
27extern void exception_print (struct ui_file *file, struct gdb_exception e);
28extern void exception_fprintf (struct ui_file *file, struct gdb_exception e,
9cbc821d 29 const char *prefix,
a0b31db1 30 ...) ATTRIBUTE_PRINTF (3, 4);
8a076db9 31
60250e8b
AC
32/* Call FUNC(UIOUT, FUNC_ARGS) but wrapped within an exception
33 handler. If an exception (enum return_reason) is thrown using
34 throw_exception() than all cleanups installed since
35 catch_exceptions() was entered are invoked, the (-ve) exception
36 value is then returned by catch_exceptions. If FUNC() returns
787274f0 37 normally (with a positive or zero return value) then that value is
60250e8b
AC
38 returned by catch_exceptions(). It is an internal_error() for
39 FUNC() to return a negative value.
40
41 For the period of the FUNC() call: UIOUT is installed as the output
42 builder; ERRSTRING is installed as the error/quit message; and a
43 new cleanup_chain is established. The old values are restored
44 before catch_exceptions() returns.
45
46 The variant catch_exceptions_with_msg() is the same as
47 catch_exceptions() but adds the ability to return an allocated
48 copy of the gdb error message. This is used when a silent error is
49 issued and the caller wants to manually issue the error message.
50
787274f0
DE
51 MASK specifies what to catch; it is normally set to
52 RETURN_MASK_ALL, if for no other reason than that the code which
53 calls catch_errors might not be set up to deal with a quit which
54 isn't caught. But if the code can deal with it, it generally
55 should be RETURN_MASK_ERROR, unless for some reason it is more
56 useful to abort only the portion of the operation inside the
57 catch_errors. Note that quit should return to the command line
58 fairly quickly, even if some further processing is being done.
59
60250e8b
AC
60 FIXME; cagney/2001-08-13: The need to override the global UIOUT
61 builder variable should just go away.
62
787274f0 63 This function supersedes catch_errors().
60250e8b
AC
64
65 This function uses SETJMP() and LONGJUMP(). */
66
67struct ui_out;
68typedef int (catch_exceptions_ftype) (struct ui_out *ui_out, void *args);
69extern int catch_exceptions (struct ui_out *uiout,
70 catch_exceptions_ftype *func, void *func_args,
1c3c7ee7 71 return_mask mask);
2a78bfb5 72typedef void (catch_exception_ftype) (struct ui_out *ui_out, void *args);
60250e8b
AC
73extern int catch_exceptions_with_msg (struct ui_out *uiout,
74 catch_exceptions_ftype *func,
75 void *func_args,
1c3c7ee7 76 char **gdberrmsg,
60250e8b 77 return_mask mask);
8a076db9 78
60250e8b 79/* If CATCH_ERRORS_FTYPE throws an error, catch_errors() returns zero
0963b4bd 80 otherwize the result from CATCH_ERRORS_FTYPE is returned. It is
60250e8b 81 probably useful for CATCH_ERRORS_FTYPE to always return a non-zero
0963b4bd 82 value. It's unfortunate that, catch_errors() does not return an
60250e8b
AC
83 indication of the exact exception that it caught - quit_flag might
84 help.
85
787274f0 86 This function is superseded by catch_exceptions(). */
60250e8b
AC
87
88typedef int (catch_errors_ftype) (void *);
a121b7c1
PA
89extern int catch_errors (catch_errors_ftype *, void *,
90 const char *, return_mask);
60250e8b 91
ecf45d2c
SL
92/* Compare two exception objects for print equality. */
93extern int exception_print_same (struct gdb_exception e1,
94 struct gdb_exception e2);
60250e8b 95#endif