diff options
author | H. Peter Anvin <hpa@linux.intel.com> | 2016-02-02 16:01:43 -0800 |
---|---|---|
committer | H. Peter Anvin <hpa@linux.intel.com> | 2016-02-02 16:01:43 -0800 |
commit | f0d92fd19ad01b99a93a766f482d2ecaa3ca91a8 (patch) | |
tree | cc33b3d7293bc16f8b34693d319eb11894f7d8a9 | |
parent | 5a8c424d0c4b63d14eb1120475ebc3dee38bac8c (diff) | |
download | nasm-f0d92fd19ad01b99a93a766f482d2ecaa3ca91a8.tar.gz |
nasmlib: Add generic panic() macro, and no-return nasm_panic()
Add a generic panic() macro which we can simply insert where an
internal error happens. Also, create a nasm_panic() function
the only purpose of which is to let the compiler know that we will
never return after a panic.
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
-rw-r--r-- | compiler.h | 9 | ||||
-rw-r--r-- | nasmlib.c | 11 | ||||
-rw-r--r-- | nasmlib.h | 10 |
3 files changed, 23 insertions, 7 deletions
@@ -188,4 +188,13 @@ char *strsep(char **, const char *); # define no_return void #endif +/* + * How to tell the compiler that a function takes a printf-like string + */ +#ifdef __GNUC__ +# define printf_func(fmt, list) __attribute__((format(printf, fmt, list))) +#else +# define printf_func(fmt, list) +#endif + #endif /* NASM_COMPILER_H */ @@ -1,6 +1,6 @@ /* ----------------------------------------------------------------------- * * - * Copyright 1996-2014 The NASM Authors - All Rights Reserved + * Copyright 1996-2016 The NASM Authors - All Rights Reserved * See the file AUTHORS included with the NASM distribution for * the specific copyright holders. * @@ -83,6 +83,15 @@ void nasm_error(int severity, const char *fmt, ...) va_end(ap); } +no_return nasm_panic(int flags, const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + nasm_verror(flags | ERR_PANIC, fmt, ap); + abort(); /* We should never get here */ +} + void *nasm_malloc(size_t size) { void *p = malloc(size); @@ -1,6 +1,6 @@ /* ----------------------------------------------------------------------- * * - * Copyright 1996-2009 The NASM Authors - All Rights Reserved + * Copyright 1996-2016 The NASM Authors - All Rights Reserved * See the file AUTHORS included with the NASM distribution for * the specific copyright holders. * @@ -75,12 +75,10 @@ extern unsigned char nasm_tolower_tab[256]; */ typedef void (*efunc) (int severity, const char *fmt, ...); typedef void (*vefunc) (int severity, const char *fmt, va_list ap); -#ifdef __GNUC__ -void nasm_error(int severity, const char *fmt, ...) __attribute__((format(printf, 2, 3))); -#else -void nasm_error(int severity, const char *fmt, ...); -#endif +void printf_func(2, 3) nasm_error(int severity, const char *fmt, ...); void nasm_set_verror(vefunc); +no_return printf_func(2, 3) nasm_panic(int flags, const char *fmt, ...); +#define panic() nasm_panic(ERR_NOFILE, "Internal error at %s:%d\n", __FILE__, __LINE__); /* * These are the error severity codes which get passed as the first |