2014-07-30 21:09:07 +08:00
|
|
|
|
/* Declarations for error-reporting facilities.
|
|
|
|
|
|
2024-01-12 23:30:44 +08:00
|
|
|
|
Copyright (C) 1986-2024 Free Software Foundation, Inc.
|
2014-07-30 21:09:07 +08:00
|
|
|
|
|
|
|
|
|
This file is part of GDB.
|
|
|
|
|
|
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
|
|
|
it under the terms of the GNU General Public License as published by
|
|
|
|
|
the Free Software Foundation; either version 3 of the License, or
|
|
|
|
|
(at your option) any later version.
|
|
|
|
|
|
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
GNU General Public License for more details.
|
|
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
|
|
|
|
|
|
|
|
#ifndef COMMON_ERRORS_H
|
|
|
|
|
#define COMMON_ERRORS_H
|
|
|
|
|
|
|
|
|
|
/* A problem was detected, but the requested operation can still
|
|
|
|
|
proceed. A warning message is constructed using a printf- or
|
|
|
|
|
vprintf-style argument list. The function "vwarning" must be
|
|
|
|
|
provided by the client. */
|
|
|
|
|
|
|
|
|
|
extern void warning (const char *fmt, ...)
|
|
|
|
|
ATTRIBUTE_PRINTF (1, 2);
|
|
|
|
|
|
|
|
|
|
extern void vwarning (const char *fmt, va_list args)
|
|
|
|
|
ATTRIBUTE_PRINTF (1, 0);
|
|
|
|
|
|
|
|
|
|
/* A non-predictable, non-fatal error was detected. The requested
|
|
|
|
|
operation cannot proceed. An error message is constructed using
|
|
|
|
|
a printf- or vprintf-style argument list. These functions do not
|
|
|
|
|
return. The function "verror" must be provided by the client. */
|
|
|
|
|
|
2024-07-17 04:02:12 +08:00
|
|
|
|
[[noreturn]] extern void error (const char *fmt, ...) ATTRIBUTE_PRINTF (1, 2);
|
2014-07-30 21:09:07 +08:00
|
|
|
|
|
2024-07-17 04:02:12 +08:00
|
|
|
|
[[noreturn]] extern void verror (const char *fmt, va_list args)
|
|
|
|
|
ATTRIBUTE_PRINTF (1, 0);
|
2014-07-30 21:09:07 +08:00
|
|
|
|
|
|
|
|
|
/* An internal error was detected. Internal errors indicate
|
|
|
|
|
programming errors such as assertion failures, as opposed to
|
|
|
|
|
more general errors beyond the application's control. These
|
|
|
|
|
functions do not return. An error message is constructed using
|
|
|
|
|
a printf- or vprintf-style argument list. FILE and LINE
|
|
|
|
|
indicate the file and line number where the programming error
|
internal_error: remove need to pass __FILE__/__LINE__
Currently, every internal_error call must be passed __FILE__/__LINE__
explicitly, like:
internal_error (__FILE__, __LINE__, "foo %d", var);
The need to pass in explicit __FILE__/__LINE__ is there probably
because the function predates widespread and portable variadic macros
availability. We can use variadic macros nowadays, and in fact, we
already use them in several places, including the related
gdb_assert_not_reached.
So this patch renames the internal_error function to something else,
and then reimplements internal_error as a variadic macro that expands
__FILE__/__LINE__ itself.
The result is that we now should call internal_error like so:
internal_error ("foo %d", var);
Likewise for internal_warning.
The patch adjusts all calls sites. 99% of the adjustments were done
with a perl/sed script.
The non-mechanical changes are in gdbsupport/errors.h,
gdbsupport/gdb_assert.h, and gdb/gdbarch.py.
Approved-By: Simon Marchi <simon.marchi@efficios.com>
Change-Id: Ia6f372c11550ca876829e8fd85048f4502bdcf06
2022-10-18 00:12:20 +08:00
|
|
|
|
was detected. Most client code should call the internal_error
|
|
|
|
|
wrapper macro instead, which expands the source location
|
|
|
|
|
automatically. The function "internal_verror" must be provided
|
2014-07-30 21:09:07 +08:00
|
|
|
|
by the client. */
|
|
|
|
|
|
2024-07-17 04:02:12 +08:00
|
|
|
|
[[noreturn]] extern void internal_error_loc (const char *file, int line,
|
|
|
|
|
const char *fmt, ...)
|
|
|
|
|
ATTRIBUTE_PRINTF (3, 4);
|
2014-07-30 21:09:07 +08:00
|
|
|
|
|
internal_error: remove need to pass __FILE__/__LINE__
Currently, every internal_error call must be passed __FILE__/__LINE__
explicitly, like:
internal_error (__FILE__, __LINE__, "foo %d", var);
The need to pass in explicit __FILE__/__LINE__ is there probably
because the function predates widespread and portable variadic macros
availability. We can use variadic macros nowadays, and in fact, we
already use them in several places, including the related
gdb_assert_not_reached.
So this patch renames the internal_error function to something else,
and then reimplements internal_error as a variadic macro that expands
__FILE__/__LINE__ itself.
The result is that we now should call internal_error like so:
internal_error ("foo %d", var);
Likewise for internal_warning.
The patch adjusts all calls sites. 99% of the adjustments were done
with a perl/sed script.
The non-mechanical changes are in gdbsupport/errors.h,
gdbsupport/gdb_assert.h, and gdb/gdbarch.py.
Approved-By: Simon Marchi <simon.marchi@efficios.com>
Change-Id: Ia6f372c11550ca876829e8fd85048f4502bdcf06
2022-10-18 00:12:20 +08:00
|
|
|
|
#define internal_error(fmt, ...) \
|
|
|
|
|
internal_error_loc (__FILE__, __LINE__, fmt, ##__VA_ARGS__)
|
|
|
|
|
|
2024-07-17 04:02:12 +08:00
|
|
|
|
[[noreturn]] extern void internal_verror (const char *file, int line,
|
|
|
|
|
const char *fmt, va_list args)
|
|
|
|
|
ATTRIBUTE_PRINTF (3, 0);
|
2014-08-04 19:04:02 +08:00
|
|
|
|
|
|
|
|
|
/* An internal problem was detected, but the requested operation can
|
|
|
|
|
still proceed. Internal warnings indicate programming errors as
|
|
|
|
|
opposed to more general issues beyond the application's control.
|
|
|
|
|
A warning message is constructed using a printf- or vprintf-style
|
|
|
|
|
argument list. The function "internal_vwarning" must be provided
|
|
|
|
|
by the client. */
|
|
|
|
|
|
internal_error: remove need to pass __FILE__/__LINE__
Currently, every internal_error call must be passed __FILE__/__LINE__
explicitly, like:
internal_error (__FILE__, __LINE__, "foo %d", var);
The need to pass in explicit __FILE__/__LINE__ is there probably
because the function predates widespread and portable variadic macros
availability. We can use variadic macros nowadays, and in fact, we
already use them in several places, including the related
gdb_assert_not_reached.
So this patch renames the internal_error function to something else,
and then reimplements internal_error as a variadic macro that expands
__FILE__/__LINE__ itself.
The result is that we now should call internal_error like so:
internal_error ("foo %d", var);
Likewise for internal_warning.
The patch adjusts all calls sites. 99% of the adjustments were done
with a perl/sed script.
The non-mechanical changes are in gdbsupport/errors.h,
gdbsupport/gdb_assert.h, and gdb/gdbarch.py.
Approved-By: Simon Marchi <simon.marchi@efficios.com>
Change-Id: Ia6f372c11550ca876829e8fd85048f4502bdcf06
2022-10-18 00:12:20 +08:00
|
|
|
|
extern void internal_warning_loc (const char *file, int line,
|
|
|
|
|
const char *fmt, ...)
|
2014-08-04 19:04:02 +08:00
|
|
|
|
ATTRIBUTE_PRINTF (3, 4);
|
|
|
|
|
|
internal_error: remove need to pass __FILE__/__LINE__
Currently, every internal_error call must be passed __FILE__/__LINE__
explicitly, like:
internal_error (__FILE__, __LINE__, "foo %d", var);
The need to pass in explicit __FILE__/__LINE__ is there probably
because the function predates widespread and portable variadic macros
availability. We can use variadic macros nowadays, and in fact, we
already use them in several places, including the related
gdb_assert_not_reached.
So this patch renames the internal_error function to something else,
and then reimplements internal_error as a variadic macro that expands
__FILE__/__LINE__ itself.
The result is that we now should call internal_error like so:
internal_error ("foo %d", var);
Likewise for internal_warning.
The patch adjusts all calls sites. 99% of the adjustments were done
with a perl/sed script.
The non-mechanical changes are in gdbsupport/errors.h,
gdbsupport/gdb_assert.h, and gdb/gdbarch.py.
Approved-By: Simon Marchi <simon.marchi@efficios.com>
Change-Id: Ia6f372c11550ca876829e8fd85048f4502bdcf06
2022-10-18 00:12:20 +08:00
|
|
|
|
#define internal_warning(fmt, ...) \
|
|
|
|
|
internal_warning_loc (__FILE__, __LINE__, fmt, ##__VA_ARGS__)
|
|
|
|
|
|
2014-08-04 19:04:02 +08:00
|
|
|
|
extern void internal_vwarning (const char *file, int line,
|
|
|
|
|
const char *fmt, va_list args)
|
|
|
|
|
ATTRIBUTE_PRINTF (3, 0);
|
2014-07-30 21:09:07 +08:00
|
|
|
|
|
|
|
|
|
|
2023-02-10 09:28:20 +08:00
|
|
|
|
/* Return a newly allocated string, containing the PREFIX followed
|
|
|
|
|
by the system error message for errno (separated by a colon).
|
|
|
|
|
If ERRNUM is given, then use it in place of errno. */
|
|
|
|
|
|
|
|
|
|
extern std::string perror_string (const char *prefix, int errnum = 0);
|
|
|
|
|
|
2014-07-30 21:09:07 +08:00
|
|
|
|
/* Like "error", but the error message is constructed by combining
|
2023-02-10 09:28:20 +08:00
|
|
|
|
STRING with the system error message for errno. If ERRNUM is given,
|
|
|
|
|
then use it in place of errno. This function does not return. */
|
2014-07-30 21:09:07 +08:00
|
|
|
|
|
2024-07-17 04:02:12 +08:00
|
|
|
|
[[noreturn]] extern void perror_with_name (const char *string, int errnum = 0);
|
2014-07-30 21:09:07 +08:00
|
|
|
|
|
|
|
|
|
/* Call this function to handle memory allocation failures. This
|
|
|
|
|
function does not return. This function must be provided by the
|
|
|
|
|
client. */
|
|
|
|
|
|
2024-07-17 04:02:12 +08:00
|
|
|
|
[[noreturn]] extern void malloc_failure (long size);
|
2014-07-30 21:09:07 +08:00
|
|
|
|
|
2020-04-14 02:42:59 +08:00
|
|
|
|
/* Flush stdout and stderr. Must be provided by the client. */
|
|
|
|
|
|
|
|
|
|
extern void flush_streams ();
|
|
|
|
|
|
2022-11-02 21:16:16 +08:00
|
|
|
|
#if defined(USE_WIN32API) || defined(__CYGWIN__)
|
2022-07-21 02:46:08 +08:00
|
|
|
|
|
|
|
|
|
/* Map the Windows error number in ERROR to a locale-dependent error
|
|
|
|
|
message string and return a pointer to it. Typically, the values
|
|
|
|
|
for ERROR come from GetLastError.
|
|
|
|
|
|
|
|
|
|
The string pointed to shall not be modified by the application,
|
|
|
|
|
but may be overwritten by a subsequent call to strwinerror
|
|
|
|
|
|
|
|
|
|
The strwinerror function does not change the current setting
|
|
|
|
|
of GetLastError. */
|
|
|
|
|
|
|
|
|
|
extern const char *strwinerror (ULONGEST error);
|
|
|
|
|
|
2023-09-02 01:01:33 +08:00
|
|
|
|
/* Like perror_with_name, but for Windows errors. Throw an exception
|
|
|
|
|
including STRING and the system text for the given error
|
|
|
|
|
number. */
|
|
|
|
|
|
2024-07-17 04:02:12 +08:00
|
|
|
|
[[noreturn]] extern void throw_winerror_with_name (const char *string,
|
|
|
|
|
ULONGEST err);
|
2023-09-02 01:01:33 +08:00
|
|
|
|
|
2022-07-21 02:46:08 +08:00
|
|
|
|
#endif /* USE_WIN32API */
|
|
|
|
|
|
2014-07-30 21:09:07 +08:00
|
|
|
|
#endif /* COMMON_ERRORS_H */
|