Skip to content

Commit 90bcfaa

Browse files
committed
[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 1f9bc28 commit 90bcfaa

File tree

1 file changed

+10
-7
lines changed

1 file changed

+10
-7
lines changed

libunwind/src/libunwind.cpp

+10-7
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@
1414
#ifndef NDEBUG
1515
#include <cstdlib> // getenv
1616
#endif
17-
#include <new>
18-
#include <algorithm>
1917

2018
#include "libunwind_ext.h"
2119
#include "config.h"
@@ -122,12 +120,14 @@ static bool is64bit(task_t task) {
122120
_LIBUNWIND_EXPORT unw_addr_space_t unw_create_addr_space_for_task(task_t task) {
123121
#if __i386__
124122
if (is64bit(task)) {
125-
unw_addr_space_x86_64 *as = new unw_addr_space_x86_64(task);
123+
unw_addr_space_x86_64 *as = malloc(sizeof(unw_addr_space_x86_64));
124+
new (as) unw_addr_space_x86_64(task);
126125
as->taskPort = task;
127126
as->cpuType = CPU_TYPE_X86_64;
128127
//as->oas
129128
} else {
130-
unw_addr_space_i386 *as = new unw_addr_space_i386(task);
129+
unw_addr_space_i386 *as = malloc(sizeof(unw_addr_space_i386));
130+
new (as) unw_addr_space_i386(task);
131131
as->taskPort = task;
132132
as->cpuType = CPU_TYPE_I386;
133133
//as->oas
@@ -144,18 +144,21 @@ _LIBUNWIND_EXPORT void unw_destroy_addr_space(unw_addr_space_t asp) {
144144
#if __i386__ || __x86_64__
145145
case CPU_TYPE_I386: {
146146
unw_addr_space_i386 *as = (unw_addr_space_i386 *)asp;
147-
delete as;
147+
as->~unw_addr_space_i386();
148+
free(as);
148149
}
149150
break;
150151
case CPU_TYPE_X86_64: {
151152
unw_addr_space_x86_64 *as = (unw_addr_space_x86_64 *)asp;
152-
delete as;
153+
as->~unw_addr_space_x86_64();
154+
free(as);
153155
}
154156
break;
155157
#endif
156158
case CPU_TYPE_POWERPC: {
157159
unw_addr_space_ppc *as = (unw_addr_space_ppc *)asp;
158-
delete as;
160+
as->~unw_addr_space_ppc();
161+
free(as);
159162
}
160163
break;
161164
}

0 commit comments

Comments
 (0)