Skip to content

Commit 3f0f46f

Browse files
petrhosekcuviper
authored andcommitted
[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 llvm-svn: 352245
1 parent 68c1db3 commit 3f0f46f

File tree

1 file changed

+10
-7
lines changed

1 file changed

+10
-7
lines changed

libunwind/src/libunwind.cpp

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@
1515
#ifndef NDEBUG
1616
#include <cstdlib> // getenv
1717
#endif
18-
#include <new>
19-
#include <algorithm>
2018

2119
#include "libunwind_ext.h"
2220
#include "config.h"
@@ -123,12 +121,14 @@ static bool is64bit(task_t task) {
123121
_LIBUNWIND_EXPORT unw_addr_space_t unw_create_addr_space_for_task(task_t task) {
124122
#if __i386__
125123
if (is64bit(task)) {
126-
unw_addr_space_x86_64 *as = new unw_addr_space_x86_64(task);
124+
unw_addr_space_x86_64 *as = malloc(sizeof(unw_addr_space_x86_64));
125+
new (as) unw_addr_space_x86_64(task);
127126
as->taskPort = task;
128127
as->cpuType = CPU_TYPE_X86_64;
129128
//as->oas
130129
} else {
131-
unw_addr_space_i386 *as = new unw_addr_space_i386(task);
130+
unw_addr_space_i386 *as = malloc(sizeof(unw_addr_space_i386));
131+
new (as) unw_addr_space_i386(task);
132132
as->taskPort = task;
133133
as->cpuType = CPU_TYPE_I386;
134134
//as->oas
@@ -145,18 +145,21 @@ _LIBUNWIND_EXPORT void unw_destroy_addr_space(unw_addr_space_t asp) {
145145
#if __i386__ || __x86_64__
146146
case CPU_TYPE_I386: {
147147
unw_addr_space_i386 *as = (unw_addr_space_i386 *)asp;
148-
delete as;
148+
as->~unw_addr_space_i386();
149+
free(as);
149150
}
150151
break;
151152
case CPU_TYPE_X86_64: {
152153
unw_addr_space_x86_64 *as = (unw_addr_space_x86_64 *)asp;
153-
delete as;
154+
as->~unw_addr_space_x86_64();
155+
free(as);
154156
}
155157
break;
156158
#endif
157159
case CPU_TYPE_POWERPC: {
158160
unw_addr_space_ppc *as = (unw_addr_space_ppc *)asp;
159-
delete as;
161+
as->~unw_addr_space_ppc();
162+
free(as);
160163
}
161164
break;
162165
}

0 commit comments

Comments
 (0)