config.h revision e085735cbedc82b1064f05ff796e32e906a95036
1b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik//===----------------------------- config.h -------------------------------===// 2b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik// 3b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik// The LLVM Compiler Infrastructure 4b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik// 5b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik// This file is dual licensed under the MIT and the University of Illinois Open 6b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik// Source Licenses. See LICENSE.TXT for details. 7b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik// 8b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik// 9b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik// Defines macros used within libuwind project. 10b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik// 11b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik//===----------------------------------------------------------------------===// 12b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik 13b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik 14b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik#ifndef LIBUNWIND_CONFIG_H 15b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik#define LIBUNWIND_CONFIG_H 16b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik 17b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik#include <assert.h> 18b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik 19b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik// Define static_assert() unless already defined by compiler. 20b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik#ifndef __has_feature 21b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik #define __has_feature(__x) 0 22b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik#endif 238cb8b2086426108c6ea737d83cfd739ae5e5d8d9Nick Kledzik#if !(__has_feature(cxx_static_assert)) && !defined(static_assert) 24b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik #define static_assert(__b, __m) \ 25b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik extern int compile_time_assert_failed[ ( __b ) ? 1 : -1 ] \ 26b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik __attribute__( ( unused ) ); 27b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik#endif 28b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik 29b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik// Platform specific configuration defines. 30b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik#if __APPLE__ 31b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik #include <Availability.h> 32b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik #ifdef __cplusplus 33b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik extern "C" { 34b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik #endif 35b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik void __assert_rtn(const char *, const char *, int, const char *) 36b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik __attribute__((noreturn)); 37b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik #ifdef __cplusplus 38b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik } 39b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik #endif 40b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik 41b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik #define _LIBUNWIND_BUILD_ZERO_COST_APIS (__i386__ || __x86_64__ || __arm64__) 42b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik #define _LIBUNWIND_BUILD_SJLJ_APIS (__arm__) 43b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik #define _LIBUNWIND_SUPPORT_FRAME_APIS (__i386__ || __x86_64__) 44b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik #define _LIBUNWIND_EXPORT __attribute__((visibility("default"))) 45b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik #define _LIBUNWIND_HIDDEN __attribute__((visibility("hidden"))) 46e085735cbedc82b1064f05ff796e32e906a95036Dan Albert #define _LIBUNWIND_LOG(msg, ...) fprintf(stderr, "libunwind: " msg, __VA_ARGS__) 47b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik #define _LIBUNWIND_ABORT(msg) __assert_rtn(__func__, __FILE__, __LINE__, msg) 48b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik 49b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik #if FOR_DYLD 50b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik #define _LIBUNWIND_SUPPORT_COMPACT_UNWIND 1 51b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik #define _LIBUNWIND_SUPPORT_DWARF_UNWIND 0 52b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik #define _LIBUNWIND_SUPPORT_DWARF_INDEX 0 53b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik #else 54b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik #define _LIBUNWIND_SUPPORT_COMPACT_UNWIND 1 55b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik #define _LIBUNWIND_SUPPORT_DWARF_UNWIND 1 56b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik #define _LIBUNWIND_SUPPORT_DWARF_INDEX 0 57b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik #endif 58b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik 59e085735cbedc82b1064f05ff796e32e906a95036Dan Albert#elif defined(__BIONIC__) 60e085735cbedc82b1064f05ff796e32e906a95036Dan Albert #define _LIBUNWIND_BUILD_ZERO_COST_APIS (__i386__ || __x86_64__ || __arm64__ || __arm__) 61e085735cbedc82b1064f05ff796e32e906a95036Dan Albert #define _LIBUNWIND_BUILD_SJLJ_APIS 0 62e085735cbedc82b1064f05ff796e32e906a95036Dan Albert #define _LIBUNWIND_SUPPORT_FRAME_APIS (__i386__ || __x86_64__) 63e085735cbedc82b1064f05ff796e32e906a95036Dan Albert #define _LIBUNWIND_EXPORT __attribute__((visibility("default"))) 64e085735cbedc82b1064f05ff796e32e906a95036Dan Albert #define _LIBUNWIND_HIDDEN __attribute__((visibility("hidden"))) 65e085735cbedc82b1064f05ff796e32e906a95036Dan Albert #define _LIBUNWIND_LOG(msg, ...) fprintf(stderr, "libunwind: " msg, __VA_ARGS__) 66e085735cbedc82b1064f05ff796e32e906a95036Dan Albert #define _LIBUNWIND_ABORT(msg) __assert2(__FILE__, __LINE__, __func__, msg) 67e085735cbedc82b1064f05ff796e32e906a95036Dan Albert 68e085735cbedc82b1064f05ff796e32e906a95036Dan Albert #define _LIBUNWIND_SUPPORT_COMPACT_UNWIND 1 69e085735cbedc82b1064f05ff796e32e906a95036Dan Albert #define _LIBUNWIND_SUPPORT_DWARF_UNWIND 1 70e085735cbedc82b1064f05ff796e32e906a95036Dan Albert #define _LIBUNWIND_SUPPORT_DWARF_INDEX 0 71b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik#else 72b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik // #define _LIBUNWIND_BUILD_ZERO_COST_APIS 73b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik // #define _LIBUNWIND_BUILD_SJLJ_APIS 74b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik // #define _LIBUNWIND_SUPPORT_FRAME_APIS 75b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik // #define _LIBUNWIND_EXPORT 76b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik // #define _LIBUNWIND_HIDDEN 77b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik // #define _LIBUNWIND_LOG() 78b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik // #define _LIBUNWIND_ABORT() 79b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik // #define _LIBUNWIND_SUPPORT_COMPACT_UNWIND 80b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik // #define _LIBUNWIND_SUPPORT_DWARF_UNWIND 81b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik // #define _LIBUNWIND_SUPPORT_DWARF_INDEX 82b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik#endif 83b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik 84b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik 85b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik// Macros that define away in non-Debug builds 86b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik#ifdef NDEBUG 87b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik #define _LIBUNWIND_DEBUG_LOG(msg, ...) 88b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik #define _LIBUNWIND_TRACE_API(msg, ...) 89b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik #define _LIBUNWIND_TRACING_UNWINDING 0 90b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik #define _LIBUNWIND_TRACE_UNWINDING(msg, ...) 91b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik #define _LIBUNWIND_LOG_NON_ZERO(x) x 92b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik#else 93b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik #ifdef __cplusplus 94b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik extern "C" { 95b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik #endif 96b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik extern bool logAPIs(); 97b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik extern bool logUnwinding(); 98b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik #ifdef __cplusplus 99b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik } 100b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik #endif 101b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik #define _LIBUNWIND_DEBUG_LOG(msg, ...) _LIBUNWIND_LOG(msg, __VA_ARGS__) 102b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik #define _LIBUNWIND_LOG_NON_ZERO(x) \ 103b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik do { \ 104b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik int _err = x; \ 105b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik if ( _err != 0 ) \ 106b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik _LIBUNWIND_LOG("" #x "=%d in %s", _err, __FUNCTION__); \ 107b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik } while (0) 108b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik #define _LIBUNWIND_TRACE_API(msg, ...) \ 109b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik do { \ 110b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik if ( logAPIs() ) _LIBUNWIND_LOG(msg, __VA_ARGS__); \ 111b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik } while(0) 112b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik #define _LIBUNWIND_TRACE_UNWINDING(msg, ...) \ 113b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik do { \ 114b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik if ( logUnwinding() ) _LIBUNWIND_LOG(msg, __VA_ARGS__); \ 115b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik } while(0) 116b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik #define _LIBUNWIND_TRACING_UNWINDING logUnwinding() 117b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik#endif 118b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik 119b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik 120b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik#endif // LIBUNWIND_CONFIG_H 121