diff options
author | polwex <polwex@sortug.com> | 2025-10-05 21:56:51 +0700 |
---|---|---|
committer | polwex <polwex@sortug.com> | 2025-10-05 21:56:51 +0700 |
commit | fcedfddf00b3f994e4f4e40332ac7fc192c63244 (patch) | |
tree | 51d38e62c7bdfcc5f9a5e9435fe820c93cfc9a3d /vere/ext/nasm/include/error.h |
claude is gud
Diffstat (limited to 'vere/ext/nasm/include/error.h')
-rw-r--r-- | vere/ext/nasm/include/error.h | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/vere/ext/nasm/include/error.h b/vere/ext/nasm/include/error.h new file mode 100644 index 0000000..e6338c9 --- /dev/null +++ b/vere/ext/nasm/include/error.h @@ -0,0 +1,162 @@ +/* ----------------------------------------------------------------------- * + * + * Copyright 1996-2020 The NASM Authors - All Rights Reserved + * See the file AUTHORS included with the NASM distribution for + * the specific copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following + * conditions are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ----------------------------------------------------------------------- */ + +/* + * Error reporting functions for the assembler + */ + +#ifndef NASM_ERROR_H +#define NASM_ERROR_H 1 + +#include "compiler.h" + +/* + * File pointer for error messages + */ +extern FILE *error_file; /* Error file descriptor */ + +/* + * Typedef for the severity field + */ +typedef uint32_t errflags; + +/* + * An error reporting function should look like this. + */ +void printf_func(2, 3) nasm_error(errflags severity, const char *fmt, ...); +void printf_func(1, 2) nasm_listmsg(const char *fmt, ...); +void printf_func(2, 3) nasm_listmsgf(errflags flags, const char *fmt, ...); +void printf_func(1, 2) nasm_debug(const char *fmt, ...); +void printf_func(2, 3) nasm_debugf(errflags flags, const char *fmt, ...); +void printf_func(1, 2) nasm_info(const char *fmt, ...); +void printf_func(2, 3) nasm_infof(errflags flags, const char *fmt, ...); +void printf_func(2, 3) nasm_warn(errflags flags, const char *fmt, ...); +void printf_func(1, 2) nasm_nonfatal(const char *fmt, ...); +void printf_func(2, 3) nasm_nonfatalf(errflags flags, const char *fmt, ...); +fatal_func printf_func(1, 2) nasm_fatal(const char *fmt, ...); +fatal_func printf_func(2, 3) nasm_fatalf(errflags flags, const char *fmt, ...); +fatal_func printf_func(1, 2) nasm_critical(const char *fmt, ...); +fatal_func printf_func(2, 3) nasm_criticalf(errflags flags, const char *fmt, ...); +fatal_func printf_func(1, 2) nasm_panic(const char *fmt, ...); +fatal_func printf_func(2, 3) nasm_panicf(errflags flags, const char *fmt, ...); +fatal_func nasm_panic_from_macro(const char *file, int line); +#define panic() nasm_panic_from_macro(__FILE__, __LINE__); + +void vprintf_func(2) nasm_verror(errflags severity, const char *fmt, va_list ap); +fatal_func vprintf_func(2) nasm_verror_critical(errflags severity, const char *fmt, va_list ap); + +/* + * These are the error severity codes which get passed as the first + * argument to an efunc. + */ +#define ERR_LISTMSG 0x00000000 /* for the listing file only */ +#define ERR_DEBUG 0x00000001 /* debugging message */ +#define ERR_INFO 0x00000002 /* information for the list file */ +#define ERR_WARNING 0x00000003 /* warn only: no further action */ +#define ERR_NONFATAL 0x00000004 /* terminate assembly after phase */ +#define ERR_FATAL 0x00000005 /* instantly fatal: exit with error */ +#define ERR_CRITICAL 0x00000006 /* fatal, but minimize code before exit */ +#define ERR_PANIC 0x00000007 /* internal error: panic instantly + * and dump core for reference */ +#define ERR_MASK 0x00000007 /* mask off the above codes */ +#define ERR_UNDEAD 0x00000008 /* skip if we already have errors */ +#define ERR_NOFILE 0x00000010 /* don't give source file name/line */ +#define ERR_HERE 0x00000020 /* point to a specific source location */ +#define ERR_USAGE 0x00000040 /* print a usage message */ +#define ERR_PASS2 0x00000100 /* ignore unless on pass_final */ + +#define ERR_NO_SEVERITY 0x00000200 /* suppress printing severity */ +#define ERR_PP_PRECOND 0x00000400 /* for preprocessor use */ +#define ERR_PP_LISTMACRO 0x00000800 /* from pp_error_list_macros() */ +#define ERR_HOLD 0x00001000 /* this error/warning can be held */ + +/* + * These codes define specific types of suppressible warning. + * They are assumed to occupy the most significant bits of the + * severity code. + */ +#define WARN_SHR 16 /* how far to shift right */ +#define WARN_IDX(x) (((errflags)(x)) >> WARN_SHR) +#define WARN_MASK ((~(errflags)0) << WARN_SHR) + +/* This is a bitmask */ +#define WARN_ST_ENABLED 1 /* Warning is currently enabled */ +#define WARN_ST_ERROR 2 /* Treat this warning as an error */ + +/* Possible initial state for warnings */ +#define WARN_INIT_OFF 0 +#define WARN_INIT_ON WARN_ST_ENABLED +#define WARN_INIT_ERR (WARN_ST_ENABLED|WARN_ST_ERROR) + +/* Process a warning option or directive */ +bool set_warning_status(const char *value); + +/* Warning stack management */ +void push_warnings(void); +void pop_warnings(void); +void init_warnings(void); +void reset_warnings(void); + +/* + * Tentative error hold for warnings/errors indicated with ERR_HOLD. + * + * This is a stack; the "hold" argument *must* + * match the value returned from nasm_error_hold_push(). + * If "issue" is true the errors are committed (or promoted to the next + * higher stack level), if false then they are discarded. + * + * Errors stronger than ERR_NONFATAL cannot be held. + */ +struct nasm_errhold; +typedef struct nasm_errhold *errhold; +errhold nasm_error_hold_push(void); +void nasm_error_hold_pop(errhold hold, bool issue); + +/* Should be included from within error.h only */ +#include "warnings.h" + +/* By defining MAX_DEBUG, we can compile out messages entirely */ +#ifndef MAX_DEBUG +# define MAX_DEBUG (~0U) +#endif + +/* Debug level checks */ +static inline bool debug_level(unsigned int level) +{ + extern unsigned int debug_nasm; + if (is_constant(level) && level > MAX_DEBUG) + return false; + return unlikely(level <= debug_nasm); +} + +#endif /* NASM_ERROR_H */ |