1 //===-------------------------- __cxxabi_config.h -------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #ifndef ____CXXABI_CONFIG_H 10 #define ____CXXABI_CONFIG_H 11 12 #if defined(__arm__) && !defined(__USING_SJLJ_EXCEPTIONS__) && \ 13 !defined(__ARM_DWARF_EH__) 14 #define _LIBCXXABI_ARM_EHABI 15 #endif 16 17 #if !defined(__has_attribute) 18 #define __has_attribute(_attribute_) 0 19 #endif 20 21 #if defined(_WIN32) 22 #if defined(_LIBCXXABI_DISABLE_VISIBILITY_ANNOTATIONS) 23 #define _LIBCXXABI_HIDDEN 24 #define _LIBCXXABI_DATA_VIS 25 #define _LIBCXXABI_FUNC_VIS 26 #define _LIBCXXABI_TYPE_VIS 27 #elif defined(_LIBCXXABI_BUILDING_LIBRARY) 28 #define _LIBCXXABI_HIDDEN 29 #define _LIBCXXABI_DATA_VIS __declspec(dllexport) 30 #define _LIBCXXABI_FUNC_VIS __declspec(dllexport) 31 #define _LIBCXXABI_TYPE_VIS __declspec(dllexport) 32 #else 33 #define _LIBCXXABI_HIDDEN 34 #define _LIBCXXABI_DATA_VIS __declspec(dllimport) 35 #define _LIBCXXABI_FUNC_VIS __declspec(dllimport) 36 #define _LIBCXXABI_TYPE_VIS __declspec(dllimport) 37 #endif 38 #else 39 #if !defined(_LIBCXXABI_DISABLE_VISIBILITY_ANNOTATIONS) 40 #define _LIBCXXABI_HIDDEN __attribute__((__visibility__("hidden"))) 41 #define _LIBCXXABI_DATA_VIS __attribute__((__visibility__("default"))) 42 #define _LIBCXXABI_FUNC_VIS __attribute__((__visibility__("default"))) 43 #if __has_attribute(__type_visibility__) 44 #define _LIBCXXABI_TYPE_VIS __attribute__((__type_visibility__("default"))) 45 #else 46 #define _LIBCXXABI_TYPE_VIS __attribute__((__visibility__("default"))) 47 #endif 48 #else 49 #define _LIBCXXABI_HIDDEN 50 #define _LIBCXXABI_DATA_VIS 51 #define _LIBCXXABI_FUNC_VIS 52 #define _LIBCXXABI_TYPE_VIS 53 #endif 54 #endif 55 56 #if defined(_WIN32) 57 #define _LIBCXXABI_WEAK 58 #else 59 #define _LIBCXXABI_WEAK __attribute__((__weak__)) 60 #endif 61 62 #if defined(__clang__) 63 #define _LIBCXXABI_COMPILER_CLANG 64 #elif defined(__GNUC__) 65 #define _LIBCXXABI_COMPILER_GCC 66 #endif 67 68 #if __has_attribute(__no_sanitize__) && defined(_LIBCXXABI_COMPILER_CLANG) 69 #define _LIBCXXABI_NO_CFI __attribute__((__no_sanitize__("cfi"))) 70 #else 71 #define _LIBCXXABI_NO_CFI 72 #endif 73 74 // wasm32 follows the arm32 ABI convention of using 32-bit guard. 75 #if defined(__arm__) || defined(__wasm32__) 76 # define _LIBCXXABI_GUARD_ABI_ARM 77 #endif 78 79 #endif // ____CXXABI_CONFIG_H 80