diff options
author | Petr Hosek <phosek@chromium.org> | 2019-01-25 21:39:46 +0000 |
---|---|---|
committer | Petr Hosek <phosek@chromium.org> | 2019-01-25 21:39:46 +0000 |
commit | 34a45c630d4c79af403661d267db42fbe7de1178 (patch) | |
tree | 04faca738e835ea6c25abd6fbb70636c076d691a | |
parent | 216d7214f8b99a575883e5b8bec871ab1a6ea42e (diff) | |
download | libunwind_llvm-34a45c630d4c79af403661d267db42fbe7de1178.tar.gz |
[libunwind] Use placement new to avoid dependency C++ library
The rest of libunwind already uses placement new, these are the only
places where non-placement new is being used introducing undesirable
C++ library dependency.
Differential Revision: https://reviews.llvm.org/D57251
git-svn-id: https://llvm.org/svn/llvm-project/libunwind/trunk@352245 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | src/libunwind.cpp | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/src/libunwind.cpp b/src/libunwind.cpp index 8267b9e..a2496a0 100644 --- a/src/libunwind.cpp +++ b/src/libunwind.cpp @@ -14,8 +14,6 @@ #ifndef NDEBUG #include <cstdlib> // getenv #endif -#include <new> -#include <algorithm> #include "libunwind_ext.h" #include "config.h" @@ -122,12 +120,14 @@ static bool is64bit(task_t task) { _LIBUNWIND_EXPORT unw_addr_space_t unw_create_addr_space_for_task(task_t task) { #if __i386__ if (is64bit(task)) { - unw_addr_space_x86_64 *as = new unw_addr_space_x86_64(task); + unw_addr_space_x86_64 *as = malloc(sizeof(unw_addr_space_x86_64)); + new (as) unw_addr_space_x86_64(task); as->taskPort = task; as->cpuType = CPU_TYPE_X86_64; //as->oas } else { - unw_addr_space_i386 *as = new unw_addr_space_i386(task); + unw_addr_space_i386 *as = malloc(sizeof(unw_addr_space_i386)); + new (as) unw_addr_space_i386(task); as->taskPort = task; as->cpuType = CPU_TYPE_I386; //as->oas @@ -144,18 +144,21 @@ _LIBUNWIND_EXPORT void unw_destroy_addr_space(unw_addr_space_t asp) { #if __i386__ || __x86_64__ case CPU_TYPE_I386: { unw_addr_space_i386 *as = (unw_addr_space_i386 *)asp; - delete as; + as->~unw_addr_space_i386(); + free(as); } break; case CPU_TYPE_X86_64: { unw_addr_space_x86_64 *as = (unw_addr_space_x86_64 *)asp; - delete as; + as->~unw_addr_space_x86_64(); + free(as); } break; #endif case CPU_TYPE_POWERPC: { unw_addr_space_ppc *as = (unw_addr_space_ppc *)asp; - delete as; + as->~unw_addr_space_ppc(); + free(as); } break; } |