1*8f1d5724Srobert //===----------------------------------------------------------------------===// 279c2e3e6Spatrick // 379c2e3e6Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 479c2e3e6Spatrick // See https://llvm.org/LICENSE.txt for license information. 579c2e3e6Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 679c2e3e6Spatrick // 779c2e3e6Spatrick //===----------------------------------------------------------------------===// 879c2e3e6Spatrick 979c2e3e6Spatrick #ifndef ____CXXABI_CONFIG_H 1079c2e3e6Spatrick #define ____CXXABI_CONFIG_H 1179c2e3e6Spatrick 1279c2e3e6Spatrick #if defined(__arm__) && !defined(__USING_SJLJ_EXCEPTIONS__) && \ 13*8f1d5724Srobert !defined(__ARM_DWARF_EH__) && !defined(__SEH__) 1479c2e3e6Spatrick #define _LIBCXXABI_ARM_EHABI 1579c2e3e6Spatrick #endif 1679c2e3e6Spatrick 1779c2e3e6Spatrick #if !defined(__has_attribute) 1879c2e3e6Spatrick #define __has_attribute(_attribute_) 0 1979c2e3e6Spatrick #endif 2079c2e3e6Spatrick 214e0cc08cSpatrick #if defined(__clang__) 224e0cc08cSpatrick # define _LIBCXXABI_COMPILER_CLANG 234e0cc08cSpatrick # ifndef __apple_build_version__ 244e0cc08cSpatrick # define _LIBCXXABI_CLANG_VER (__clang_major__ * 100 + __clang_minor__) 254e0cc08cSpatrick # endif 264e0cc08cSpatrick #elif defined(__GNUC__) 274e0cc08cSpatrick # define _LIBCXXABI_COMPILER_GCC 284e0cc08cSpatrick #elif defined(_MSC_VER) 294e0cc08cSpatrick # define _LIBCXXABI_COMPILER_MSVC 304e0cc08cSpatrick #elif defined(__IBMCPP__) 314e0cc08cSpatrick # define _LIBCXXABI_COMPILER_IBM 324e0cc08cSpatrick #endif 334e0cc08cSpatrick 3479c2e3e6Spatrick #if defined(_WIN32) 3579c2e3e6Spatrick #if defined(_LIBCXXABI_DISABLE_VISIBILITY_ANNOTATIONS) 3679c2e3e6Spatrick #define _LIBCXXABI_HIDDEN 3779c2e3e6Spatrick #define _LIBCXXABI_DATA_VIS 3879c2e3e6Spatrick #define _LIBCXXABI_FUNC_VIS 3979c2e3e6Spatrick #define _LIBCXXABI_TYPE_VIS 4079c2e3e6Spatrick #elif defined(_LIBCXXABI_BUILDING_LIBRARY) 4179c2e3e6Spatrick #define _LIBCXXABI_HIDDEN 4279c2e3e6Spatrick #define _LIBCXXABI_DATA_VIS __declspec(dllexport) 4379c2e3e6Spatrick #define _LIBCXXABI_FUNC_VIS __declspec(dllexport) 4479c2e3e6Spatrick #define _LIBCXXABI_TYPE_VIS __declspec(dllexport) 4579c2e3e6Spatrick #else 4679c2e3e6Spatrick #define _LIBCXXABI_HIDDEN 4779c2e3e6Spatrick #define _LIBCXXABI_DATA_VIS __declspec(dllimport) 4879c2e3e6Spatrick #define _LIBCXXABI_FUNC_VIS __declspec(dllimport) 4979c2e3e6Spatrick #define _LIBCXXABI_TYPE_VIS __declspec(dllimport) 5079c2e3e6Spatrick #endif 5179c2e3e6Spatrick #else 5279c2e3e6Spatrick #if !defined(_LIBCXXABI_DISABLE_VISIBILITY_ANNOTATIONS) 5379c2e3e6Spatrick #define _LIBCXXABI_HIDDEN __attribute__((__visibility__("hidden"))) 5479c2e3e6Spatrick #define _LIBCXXABI_DATA_VIS __attribute__((__visibility__("default"))) 5579c2e3e6Spatrick #define _LIBCXXABI_FUNC_VIS __attribute__((__visibility__("default"))) 5679c2e3e6Spatrick #if __has_attribute(__type_visibility__) 5779c2e3e6Spatrick #define _LIBCXXABI_TYPE_VIS __attribute__((__type_visibility__("default"))) 5879c2e3e6Spatrick #else 5979c2e3e6Spatrick #define _LIBCXXABI_TYPE_VIS __attribute__((__visibility__("default"))) 6079c2e3e6Spatrick #endif 6179c2e3e6Spatrick #else 6279c2e3e6Spatrick #define _LIBCXXABI_HIDDEN 6379c2e3e6Spatrick #define _LIBCXXABI_DATA_VIS 6479c2e3e6Spatrick #define _LIBCXXABI_FUNC_VIS 6579c2e3e6Spatrick #define _LIBCXXABI_TYPE_VIS 6679c2e3e6Spatrick #endif 6779c2e3e6Spatrick #endif 6879c2e3e6Spatrick 694e0cc08cSpatrick #if defined(_LIBCXXABI_COMPILER_MSVC) 7079c2e3e6Spatrick #define _LIBCXXABI_WEAK 7179c2e3e6Spatrick #else 7279c2e3e6Spatrick #define _LIBCXXABI_WEAK __attribute__((__weak__)) 7379c2e3e6Spatrick #endif 7479c2e3e6Spatrick 7579c2e3e6Spatrick #if defined(__clang__) 7679c2e3e6Spatrick #define _LIBCXXABI_COMPILER_CLANG 7779c2e3e6Spatrick #elif defined(__GNUC__) 7879c2e3e6Spatrick #define _LIBCXXABI_COMPILER_GCC 7979c2e3e6Spatrick #endif 8079c2e3e6Spatrick 8179c2e3e6Spatrick #if __has_attribute(__no_sanitize__) && defined(_LIBCXXABI_COMPILER_CLANG) 8279c2e3e6Spatrick #define _LIBCXXABI_NO_CFI __attribute__((__no_sanitize__("cfi"))) 8379c2e3e6Spatrick #else 8479c2e3e6Spatrick #define _LIBCXXABI_NO_CFI 8579c2e3e6Spatrick #endif 8679c2e3e6Spatrick 8779c2e3e6Spatrick // wasm32 follows the arm32 ABI convention of using 32-bit guard. 884e0cc08cSpatrick #if defined(__arm__) || defined(__wasm32__) || defined(__ARM64_ARCH_8_32__) 8979c2e3e6Spatrick # define _LIBCXXABI_GUARD_ABI_ARM 9079c2e3e6Spatrick #endif 9179c2e3e6Spatrick 92fb9c2e6cSpatrick #if defined(_LIBCXXABI_COMPILER_CLANG) 93fb9c2e6cSpatrick # if !__has_feature(cxx_exceptions) 94fb9c2e6cSpatrick # define _LIBCXXABI_NO_EXCEPTIONS 95fb9c2e6cSpatrick # endif 96*8f1d5724Srobert #elif defined(_LIBCXXABI_COMPILER_GCC) && !defined(__EXCEPTIONS) 97fb9c2e6cSpatrick # define _LIBCXXABI_NO_EXCEPTIONS 98fb9c2e6cSpatrick #endif 99fb9c2e6cSpatrick 100*8f1d5724Srobert #if defined(_WIN32) 101*8f1d5724Srobert #define _LIBCXXABI_DTOR_FUNC __thiscall 102*8f1d5724Srobert #else 103*8f1d5724Srobert #define _LIBCXXABI_DTOR_FUNC 104*8f1d5724Srobert #endif 105*8f1d5724Srobert 10679c2e3e6Spatrick #endif // ____CXXABI_CONFIG_H 107