Home | History | Annotate | Line # | Download | only in gdbsupport
      1 /* Declarations for error-reporting facilities.
      2 
      3    Copyright (C) 1986-2024 Free Software Foundation, Inc.
      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
      9    the Free Software Foundation; either version 3 of the License, or
     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
     18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
     19 
     20 #ifndef COMMON_ERRORS_H
     21 #define COMMON_ERRORS_H
     22 
     23 /* A problem was detected, but the requested operation can still
     24    proceed.  A warning message is constructed using a printf- or
     25    vprintf-style argument list.  The function "vwarning" must be
     26    provided by the client.  */
     27 
     28 extern void warning (const char *fmt, ...)
     29      ATTRIBUTE_PRINTF (1, 2);
     30 
     31 extern void vwarning (const char *fmt, va_list args)
     32      ATTRIBUTE_PRINTF (1, 0);
     33 
     34 /* A non-predictable, non-fatal error was detected.  The requested
     35    operation cannot proceed.  An error message is constructed using
     36    a printf- or vprintf-style argument list.  These functions do not
     37    return.  The function "verror" must be provided by the client.  */
     38 
     39 extern void error (const char *fmt, ...)
     40      ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (1, 2);
     41 
     42 extern void verror (const char *fmt, va_list args)
     43      ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (1, 0);
     44 
     45 /* An internal error was detected.  Internal errors indicate
     46    programming errors such as assertion failures, as opposed to
     47    more general errors beyond the application's control.  These
     48    functions do not return.  An error message is constructed using
     49    a printf- or vprintf-style argument list.  FILE and LINE
     50    indicate the file and line number where the programming error
     51    was detected.  Most client code should call the internal_error
     52    wrapper macro instead, which expands the source location
     53    automatically.  The function "internal_verror" must be provided
     54    by the client.  */
     55 
     56 extern void internal_error_loc (const char *file, int line,
     57 				const char *fmt, ...)
     58      ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (3, 4);
     59 
     60 #define internal_error(fmt, ...)				\
     61   internal_error_loc (__FILE__, __LINE__, fmt, ##__VA_ARGS__)
     62 
     63 extern void internal_verror (const char *file, int line,
     64 			     const char *fmt, va_list args)
     65      ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (3, 0);
     66 
     67 /* An internal problem was detected, but the requested operation can
     68    still proceed.  Internal warnings indicate programming errors as
     69    opposed to more general issues beyond the application's control.
     70    A warning message is constructed using a printf- or vprintf-style
     71    argument list.  The function "internal_vwarning" must be provided
     72    by the client.  */
     73 
     74 extern void internal_warning_loc (const char *file, int line,
     75 				  const char *fmt, ...)
     76      ATTRIBUTE_PRINTF (3, 4);
     77 
     78 #define internal_warning(fmt, ...)				\
     79   internal_warning_loc (__FILE__, __LINE__, fmt, ##__VA_ARGS__)
     80 
     81 extern void internal_vwarning (const char *file, int line,
     82 			       const char *fmt, va_list args)
     83      ATTRIBUTE_PRINTF (3, 0);
     84 
     85 
     87 /* Return a newly allocated string, containing the PREFIX followed
     88    by the system error message for errno (separated by a colon).
     89    If ERRNUM is given, then use it in place of errno.  */
     90 
     91 extern std::string perror_string (const char *prefix, int errnum = 0);
     92 
     93 /* Like "error", but the error message is constructed by combining
     94    STRING with the system error message for errno.  If ERRNUM is given,
     95    then use it in place of errno.  This function does not return.  */
     96 
     97 extern void perror_with_name (const char *string, int errnum = 0)
     98     ATTRIBUTE_NORETURN;
     99 
    100 /* Call this function to handle memory allocation failures.  This
    101    function does not return.  This function must be provided by the
    102    client.  */
    103 
    104 extern void malloc_failure (long size) ATTRIBUTE_NORETURN;
    105 
    106 /* Flush stdout and stderr.  Must be provided by the client.  */
    107 
    108 extern void flush_streams ();
    109 
    110 #if defined(USE_WIN32API) || defined(__CYGWIN__)
    111 
    112 /* Map the Windows error number in ERROR to a locale-dependent error
    113    message string and return a pointer to it.  Typically, the values
    114    for ERROR come from GetLastError.
    115 
    116    The string pointed to shall not be modified by the application,
    117    but may be overwritten by a subsequent call to strwinerror
    118 
    119    The strwinerror function does not change the current setting
    120    of GetLastError.  */
    121 
    122 extern const char *strwinerror (ULONGEST error);
    123 
    124 /* Like perror_with_name, but for Windows errors.  Throw an exception
    125    including STRING and the system text for the given error
    126    number.  */
    127 
    128 extern void throw_winerror_with_name (const char *string, ULONGEST err)
    129   ATTRIBUTE_NORETURN;
    130 
    131 #endif /* USE_WIN32API */
    132 
    133 #endif /* COMMON_ERRORS_H */
    134