diff options
author | Petr Hosek <phosek@chromium.org> | 2019-01-28 16:44:56 +0000 |
---|---|---|
committer | Petr Hosek <phosek@chromium.org> | 2019-01-28 16:44:56 +0000 |
commit | e050272d2eb57eb4e56a37b429a61df2ebb8aa3e (patch) | |
tree | 11d2191cbd6beadbec81ce982975018e0e8a3169 | |
parent | 6bf0ba16c3b196d6ca7f323e92538686ad6f8ea9 (diff) | |
download | libunwind_llvm-e050272d2eb57eb4e56a37b429a61df2ebb8aa3e.tar.gz |
[libunwind] Drop the dependency on <algorithm>, add placement new inline
We haven't eliminated C++ library dependency altogether in D57251,
UnwindCursor.hpp had an unused dependency on <algorithm> which was
pulling in other C++ headers. Removing that dependency also revealed
(correctly) that we need our own global placement new declaration. Now
libunwind should be independent of the C++ library.
Differential Revision: https://reviews.llvm.org/D57262
git-svn-id: https://llvm.org/svn/llvm-project/libunwind/trunk@352384 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | CMakeLists.txt | 25 | ||||
-rw-r--r-- | src/Unwind-seh.cpp | 4 | ||||
-rw-r--r-- | src/UnwindCursor.hpp | 1 | ||||
-rw-r--r-- | src/libunwind.cpp | 8 |
4 files changed, 11 insertions, 27 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index b03adaa..46e7ce1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -287,6 +287,9 @@ unwind_append_if(LIBUNWIND_CXX_FLAGS LIBUNWIND_HAS_EHSC_FLAG -EHsc) unwind_append_if(LIBUNWIND_C_FLAGS LIBUNWIND_HAS_FUNWIND_TABLES -funwind-tables) +# Ensure that we don't depend on C++ standard library. +unwind_append_if(LIBUNWIND_CXX_FLAGS LIBUNWIND_HAS_NOSTDINCXX_FLAG -nostdinc++) + # Assert string(TOUPPER "${CMAKE_BUILD_TYPE}" uppercase_CMAKE_BUILD_TYPE) if (LIBUNWIND_ENABLE_ASSERTIONS) @@ -341,28 +344,6 @@ endif() include_directories(include) -find_path( - LIBUNWIND_LIBCXX_INCLUDES_INTERNAL - __libcpp_version - PATHS ${LLVM_MAIN_SRC_DIR}/projects/libcxx/include - ${LLVM_MAIN_SRC_DIR}/runtimes/libcxx/include - ${LLVM_MAIN_SRC_DIR}/../libcxx/include - NO_DEFAULT_PATH - NO_CMAKE_FIND_ROOT_PATH - ) -if ((NOT LIBUNWIND_STANDALONE_BUILD OR HAVE_LIBCXX) AND - IS_DIRECTORY "${LIBUNWIND_LIBCXX_INCLUDES_INTERNAL}") - set(LIBUNWIND_CXX_INCLUDE_PATHS_DEFAULT "${LIBUNWIND_LIBCXX_INCLUDES_INTERNAL}") -endif() - -set(LIBUNWIND_CXX_INCLUDE_PATHS "${LIBUNWIND_CXX_INCLUDE_PATHS_DEFAULT}" CACHE PATH - "Paths to C++ header directories separated by ';'.") - -if (NOT LIBUNWIND_CXX_INCLUDE_PATHS STREQUAL "") - list(APPEND LIBUNWIND_CXX_FLAGS -nostdinc++) - include_directories("${LIBUNWIND_CXX_INCLUDE_PATHS}") -endif() - add_subdirectory(src) if (LIBUNWIND_INCLUDE_DOCS) diff --git a/src/Unwind-seh.cpp b/src/Unwind-seh.cpp index f55d624..26eb0ef 100644 --- a/src/Unwind-seh.cpp +++ b/src/Unwind-seh.cpp @@ -49,6 +49,10 @@ using namespace libunwind; /// Class of foreign exceptions based on unrecognized SEH exceptions. static const uint64_t kSEHExceptionClass = 0x434C4E4753454800; // CLNGSEH\0 +// libunwind does not and should not depend on C++ library which means that we +// need our own declaration of global placement new. +void *operator new(size_t, void*); + /// Exception cleanup routine used by \c _GCC_specific_handler to /// free foreign exceptions. static void seh_exc_cleanup(_Unwind_Reason_Code urc, _Unwind_Exception *exc) { diff --git a/src/UnwindCursor.hpp b/src/UnwindCursor.hpp index 497ff84..62efe77 100644 --- a/src/UnwindCursor.hpp +++ b/src/UnwindCursor.hpp @@ -11,7 +11,6 @@ #ifndef __UNWINDCURSOR_HPP__ #define __UNWINDCURSOR_HPP__ -#include <algorithm> #include <stdint.h> #include <stdio.h> #include <stdlib.h> diff --git a/src/libunwind.cpp b/src/libunwind.cpp index a2496a0..cfa9112 100644 --- a/src/libunwind.cpp +++ b/src/libunwind.cpp @@ -11,10 +11,6 @@ #include <libunwind.h> -#ifndef NDEBUG -#include <cstdlib> // getenv -#endif - #include "libunwind_ext.h" #include "config.h" @@ -27,6 +23,10 @@ using namespace libunwind; +// libunwind does not and should not depend on C++ library which means that we +// need our own declaration of global placement new. +void *operator new(size_t, void*); + /// internal object to represent this processes address space LocalAddressSpace LocalAddressSpace::sThisAddressSpace; |