From f29002a4b71b7734dfc4bd0e62eec2d341edb3fd Mon Sep 17 00:00:00 2001 From: Louis Dionne Date: Fri, 4 Mar 2022 14:34:46 -0500 Subject: [PATCH] [libunwind] Add a _LIBUNWIND_VERSION macro This allows us to detect whether we're being compiled with LLVM's libunwind more easily, without CMake having to set explicit variables. As discussed in https://llvm.org/D119538. Differential Revision: https://reviews.llvm.org/D121015 --- libcxx/docs/Contributing.rst | 1 + libcxxabi/CMakeLists.txt | 5 ----- libcxxabi/src/cxa_personality.cpp | 13 +++++++++++-- libunwind/include/__libunwind_config.h | 2 ++ 4 files changed, 14 insertions(+), 7 deletions(-) diff --git a/libcxx/docs/Contributing.rst b/libcxx/docs/Contributing.rst index 771c653..d2bb76e 100644 --- a/libcxx/docs/Contributing.rst +++ b/libcxx/docs/Contributing.rst @@ -70,6 +70,7 @@ After branching for an LLVM release: 2. Update the ``libcxx/include/__libcpp_version`` file 3. Update the version number in ``libcxx/docs/conf.py`` 4. Update ``_LIBCPPABI_VERSION`` in ``libcxxabi/include/cxxabi.h`` +5. Update ``_LIBUNWIND_VERSION`` in ``libunwind/include/__libunwind_config.h`` Exporting new symbols from the library ====================================== diff --git a/libcxxabi/CMakeLists.txt b/libcxxabi/CMakeLists.txt index bf9f112..a7d6d19 100644 --- a/libcxxabi/CMakeLists.txt +++ b/libcxxabi/CMakeLists.txt @@ -485,11 +485,6 @@ if (MSVC) add_definitions(-D_CRT_SECURE_NO_WARNINGS) endif() -# Define LIBCXXABI_USE_LLVM_UNWINDER for conditional compilation. -if (LIBCXXABI_USE_LLVM_UNWINDER) - add_definitions(-DLIBCXXABI_USE_LLVM_UNWINDER) -endif() - if (LIBCXXABI_SILENT_TERMINATE) add_definitions(-DLIBCXXABI_SILENT_TERMINATE) endif() diff --git a/libcxxabi/src/cxa_personality.cpp b/libcxxabi/src/cxa_personality.cpp index f6e135f..b7ff4c2 100644 --- a/libcxxabi/src/cxa_personality.cpp +++ b/libcxxabi/src/cxa_personality.cpp @@ -22,6 +22,15 @@ #include "private_typeinfo.h" #include "unwind.h" +// TODO: This is a temporary workaround for libc++abi to recognize that it's being +// built against LLVM's libunwind. LLVM's libunwind started reporting _LIBUNWIND_VERSION +// in LLVM 15 -- we can remove this workaround after shipping LLVM 17. Once we remove +// this workaround, it won't be possible to build libc++abi against libunwind headers +// from LLVM 14 and before anymore. +#if defined(____LIBUNWIND_CONFIG_H__) && !defined(_LIBUNWIND_VERSION) +# define _LIBUNWIND_VERSION +#endif + #if defined(__SEH__) && !defined(__USING_SJLJ_EXCEPTIONS__) #include #include @@ -1015,7 +1024,7 @@ static _Unwind_Reason_Code continue_unwind(_Unwind_Exception* unwind_exception, } // ARM register names -#if !defined(LIBCXXABI_USE_LLVM_UNWINDER) +#if !defined(_LIBUNWIND_VERSION) static const uint32_t REG_UCB = 12; // Register to save _Unwind_Control_Block #endif static const uint32_t REG_SP = 13; @@ -1050,7 +1059,7 @@ __gxx_personality_v0(_Unwind_State state, bool native_exception = __isOurExceptionClass(unwind_exception); -#if !defined(LIBCXXABI_USE_LLVM_UNWINDER) +#if !defined(_LIBUNWIND_VERSION) // Copy the address of _Unwind_Control_Block to r12 so that // _Unwind_GetLanguageSpecificData() and _Unwind_GetRegionStart() can // return correct address. diff --git a/libunwind/include/__libunwind_config.h b/libunwind/include/__libunwind_config.h index e87bcf4..30f5e0a 100644 --- a/libunwind/include/__libunwind_config.h +++ b/libunwind/include/__libunwind_config.h @@ -9,6 +9,8 @@ #ifndef ____LIBUNWIND_CONFIG_H__ #define ____LIBUNWIND_CONFIG_H__ +#define _LIBUNWIND_VERSION 15000 + #if defined(__arm__) && !defined(__USING_SJLJ_EXCEPTIONS__) && \ !defined(__ARM_DWARF_EH__) #define _LIBUNWIND_ARM_EHABI -- 2.7.4