From: Saleem Abdulrasool Date: Sun, 24 Apr 2016 21:00:59 +0000 (+0000) Subject: unwind: unify _LIBUNWIND_ABORT X-Git-Tag: llvmorg-3.9.0-rc1~8104 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=03a061ffeb10bbba1cea80f0545fb5dd8238a3c6;p=platform%2Fupstream%2Fllvm.git unwind: unify _LIBUNWIND_ABORT Rather than use the `__assert_rtn` on libSystem based targets and a local `assert_rtn` function on others, expand the function definition into a macro which will perform the writing to stderr and then abort. This unifies the definition and behaviour across targets. Ensure that we flush stderr prior to aborting. llvm-svn: 267364 --- diff --git a/libunwind/src/config.h b/libunwind/src/config.h index 6ecad70..ef6f41c 100644 --- a/libunwind/src/config.h +++ b/libunwind/src/config.h @@ -16,6 +16,7 @@ #include #include +#include // Define static_assert() unless already defined by compiler. #ifndef __has_feature @@ -30,17 +31,8 @@ // Platform specific configuration defines. #ifdef __APPLE__ #include - #ifdef __cplusplus - extern "C" { - #endif - void __assert_rtn(const char *, const char *, int, const char *) - __attribute__((noreturn)); - #ifdef __cplusplus - } - #endif #define _LIBUNWIND_BUILD_SJLJ_APIS defined(__arm__) - #define _LIBUNWIND_ABORT(msg) __assert_rtn(__func__, __FILE__, __LINE__, msg) #if defined(FOR_DYLD) #define _LIBUNWIND_SUPPORT_COMPACT_UNWIND 1 @@ -52,17 +44,8 @@ #define _LIBUNWIND_SUPPORT_DWARF_INDEX 0 #endif #else - #include - - static inline void assert_rtn(const char* func, const char* file, int line, const char* msg) __attribute__ ((noreturn)); - static inline void assert_rtn(const char* func, const char* file, int line, const char* msg) { - fprintf(stderr, "libunwind: %s %s:%d - %s\n", func, file, line, msg); - assert(false); - abort(); - } #define _LIBUNWIND_BUILD_SJLJ_APIS 0 - #define _LIBUNWIND_ABORT(msg) assert_rtn(__func__, __FILE__, __LINE__, msg) #if defined(__ARM_DWARF_EH__) || !defined(__arm__) #define _LIBUNWIND_SUPPORT_COMPACT_UNWIND 0 @@ -94,6 +77,13 @@ #define _LIBUNWIND_BUILD_ZERO_COST_APIS 0 #endif +#define _LIBUNWIND_ABORT(msg) \ + do { \ + fprintf(stderr, "libunwind: %s %s:%d - %s\n", __func__, __FILE__, \ + __LINE__, msg); \ + fflush(stderr); \ + abort(); \ + } while (0) #define _LIBUNWIND_LOG(msg, ...) fprintf(stderr, "libuwind: " msg, __VA_ARGS__) // Macros that define away in non-Debug builds