[libcxx-commits] [libcxx] f29002a - [libunwind] Add a _LIBUNWIND_VERSION macro

Louis Dionne via libcxx-commits libcxx-commits at lists.llvm.org
Wed Mar 30 08:23:40 PDT 2022


Author: Louis Dionne
Date: 2022-03-30T11:23:36-04:00
New Revision: f29002a4b71b7734dfc4bd0e62eec2d341edb3fd

URL: https://github.com/llvm/llvm-project/commit/f29002a4b71b7734dfc4bd0e62eec2d341edb3fd
DIFF: https://github.com/llvm/llvm-project/commit/f29002a4b71b7734dfc4bd0e62eec2d341edb3fd.diff

LOG: [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

Added: 
    

Modified: 
    libcxx/docs/Contributing.rst
    libcxxabi/CMakeLists.txt
    libcxxabi/src/cxa_personality.cpp
    libunwind/include/__libunwind_config.h

Removed: 
    


################################################################################
diff  --git a/libcxx/docs/Contributing.rst b/libcxx/docs/Contributing.rst
index 771c653e914bf..d2bb76eb46dd4 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 bf9f112d16237..a7d6d1902158d 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 f6e135f137c09..b7ff4c217e16e 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 <windows.h>
 #include <winnt.h>
@@ -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 e87bcf40034f3..30f5e0a23d08e 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


        


More information about the libcxx-commits mailing list