@@ -133,7 +133,7 @@ static inline void initPageSize()
133133 2) check that dlsym("malloc") found something different from our replacement malloc
134134*/
135135
136- extern " C" void *__TBB_malloc_proxy (size_t ) __TBB_ALIAS_ATTR_COPY(malloc);
136+ extern " C" TBBMALLOCPROXY_EXPORT void *__TBB_malloc_proxy (size_t ) __TBB_ALIAS_ATTR_COPY(malloc);
137137
138138static void *orig_msize;
139139
@@ -184,23 +184,23 @@ inline void InitOrigPointers() {}
184184
185185#endif // MALLOC_UNIXLIKE_OVERLOAD_ENABLED and MALLOC_ZONE_OVERLOAD_ENABLED
186186
187- void *PREFIX (malloc)(ZONE_ARG size_t size) __THROW
187+ TBBMALLOCPROXY_EXPORT void *PREFIX (malloc)(ZONE_ARG size_t size) __THROW
188188{
189189 return scalable_malloc (size);
190190}
191191
192- void *PREFIX (calloc)(ZONE_ARG size_t num, size_t size) __THROW
192+ TBBMALLOCPROXY_EXPORT void *PREFIX (calloc)(ZONE_ARG size_t num, size_t size) __THROW
193193{
194194 return scalable_calloc (num, size);
195195}
196196
197- void PREFIX (free)(ZONE_ARG void *object) __THROW
197+ TBBMALLOCPROXY_EXPORT void PREFIX (free)(ZONE_ARG void *object) __THROW
198198{
199199 InitOrigPointers ();
200200 __TBB_malloc_safer_free (object, (void (*)(void *))orig_free);
201201}
202202
203- void *PREFIX (realloc)(ZONE_ARG void * ptr, size_t sz) __THROW
203+ TBBMALLOCPROXY_EXPORT void *PREFIX (realloc)(ZONE_ARG void * ptr, size_t sz) __THROW
204204{
205205 InitOrigPointers ();
206206 return __TBB_malloc_safer_realloc (ptr, sz, orig_realloc);
@@ -209,13 +209,13 @@ void *PREFIX(realloc)(ZONE_ARG void* ptr, size_t sz) __THROW
209209/* The older *NIX interface for aligned allocations;
210210 it's formally substituted by posix_memalign and deprecated,
211211 so we do not expect it to cause cyclic dependency with C RTL. */
212- void *PREFIX (memalign)(ZONE_ARG size_t alignment, size_t size) __THROW
212+ TBBMALLOCPROXY_EXPORT void *PREFIX (memalign)(ZONE_ARG size_t alignment, size_t size) __THROW
213213{
214214 return scalable_aligned_malloc (size, alignment);
215215}
216216
217217/* valloc allocates memory aligned on a page boundary */
218- void *PREFIX (valloc)(ZONE_ARG size_t size) __THROW
218+ TBBMALLOCPROXY_EXPORT void *PREFIX (valloc)(ZONE_ARG size_t size) __THROW
219219{
220220 if (! memoryPageSize) initPageSize ();
221221
@@ -229,23 +229,23 @@ void *PREFIX(valloc)(ZONE_ARG size_t size) __THROW
229229
230230// match prototype from system headers
231231#if __ANDROID__
232- size_t malloc_usable_size (const void *ptr) __THROW
232+ TBBMALLOCPROXY_EXPORT size_t malloc_usable_size (const void *ptr) __THROW
233233#else
234- size_t malloc_usable_size (void *ptr) __THROW
234+ TBBMALLOCPROXY_EXPORT size_t malloc_usable_size (void *ptr) __THROW
235235#endif
236236{
237237 InitOrigPointers ();
238238 return __TBB_malloc_safer_msize (const_cast <void *>(ptr), (size_t (*)(void *))orig_msize);
239239}
240240
241- int posix_memalign (void **memptr, size_t alignment, size_t size) __THROW
241+ TBBMALLOCPROXY_EXPORT int posix_memalign (void **memptr, size_t alignment, size_t size) __THROW
242242{
243243 return scalable_posix_memalign (memptr, alignment, size);
244244}
245245
246246/* pvalloc allocates smallest set of complete pages which can hold
247247 the requested number of bytes. Result is aligned on page boundary. */
248- void *pvalloc (size_t size) __THROW
248+ TBBMALLOCPROXY_EXPORT void *pvalloc (size_t size) __THROW
249249{
250250 if (! memoryPageSize) initPageSize ();
251251 // align size up to the page size,
@@ -255,13 +255,13 @@ void *pvalloc(size_t size) __THROW
255255 return scalable_aligned_malloc (size, memoryPageSize);
256256}
257257
258- int mallopt (int /* param*/ , int /* value*/ ) __THROW
258+ TBBMALLOCPROXY_EXPORT int mallopt (int /* param*/ , int /* value*/ ) __THROW
259259{
260260 return 1 ;
261261}
262262
263263#if defined(__GLIBC__) || defined(__ANDROID__)
264- struct mallinfo mallinfo () __THROW
264+ TBBMALLOCPROXY_EXPORT struct mallinfo mallinfo () __THROW
265265{
266266 struct mallinfo m;
267267 memset (&m, 0 , sizeof (struct mallinfo ));
@@ -274,30 +274,30 @@ struct mallinfo mallinfo() __THROW
274274// Android doesn't have malloc_usable_size, provide it to be compatible
275275// with Linux, in addition overload dlmalloc_usable_size() that presented
276276// under Android.
277- size_t dlmalloc_usable_size (const void *ptr) __TBB_ALIAS_ATTR_COPY(malloc_usable_size);
277+ TBBMALLOCPROXY_EXPORT size_t dlmalloc_usable_size (const void *ptr) __TBB_ALIAS_ATTR_COPY(malloc_usable_size);
278278#else // __ANDROID__
279279// TODO: consider using __typeof__ to guarantee the correct declaration types
280280// C11 function, supported starting GLIBC 2.16
281- void *aligned_alloc (size_t alignment, size_t size) __TBB_ALIAS_ATTR_COPY(memalign);
281+ TBBMALLOCPROXY_EXPORT void *aligned_alloc (size_t alignment, size_t size) __TBB_ALIAS_ATTR_COPY(memalign);
282282// Those non-standard functions are exported by GLIBC, and might be used
283283// in conjunction with standard malloc/free, so we must overload them.
284284// Bionic doesn't have them. Not removing from the linker scripts,
285285// as absent entry points are ignored by the linker.
286286
287- void *__libc_malloc (size_t size) __TBB_ALIAS_ATTR_COPY(malloc);
288- void *__libc_calloc (size_t num, size_t size) __TBB_ALIAS_ATTR_COPY(calloc);
289- void *__libc_memalign (size_t alignment, size_t size) __TBB_ALIAS_ATTR_COPY(memalign);
290- void *__libc_pvalloc (size_t size) __TBB_ALIAS_ATTR_COPY(pvalloc);
291- void *__libc_valloc (size_t size) __TBB_ALIAS_ATTR_COPY(valloc);
287+ TBBMALLOCPROXY_EXPORT void *__libc_malloc (size_t size) __TBB_ALIAS_ATTR_COPY(malloc);
288+ TBBMALLOCPROXY_EXPORT void *__libc_calloc (size_t num, size_t size) __TBB_ALIAS_ATTR_COPY(calloc);
289+ TBBMALLOCPROXY_EXPORT void *__libc_memalign (size_t alignment, size_t size) __TBB_ALIAS_ATTR_COPY(memalign);
290+ TBBMALLOCPROXY_EXPORT void *__libc_pvalloc (size_t size) __TBB_ALIAS_ATTR_COPY(pvalloc);
291+ TBBMALLOCPROXY_EXPORT void *__libc_valloc (size_t size) __TBB_ALIAS_ATTR_COPY(valloc);
292292
293293// call original __libc_* to support naive replacement of free via __libc_free etc
294- void __libc_free (void *ptr)
294+ TBBMALLOCPROXY_EXPORT void __libc_free (void *ptr)
295295{
296296 InitOrigPointers ();
297297 __TBB_malloc_safer_free (ptr, (void (*)(void *))orig_libc_free);
298298}
299299
300- void *__libc_realloc (void *ptr, size_t size)
300+ TBBMALLOCPROXY_EXPORT void *__libc_realloc (void *ptr, size_t size)
301301{
302302 InitOrigPointers ();
303303 return __TBB_malloc_safer_realloc (ptr, size, orig_libc_realloc);
@@ -308,31 +308,31 @@ void *__libc_realloc(void *ptr, size_t size)
308308
309309/* ** replacements for global operators new and delete ***/
310310
311- void * operator new (size_t sz) {
311+ TBBMALLOCPROXY_EXPORT void * operator new (size_t sz) {
312312 return InternalOperatorNew (sz);
313313}
314- void * operator new [](size_t sz) {
314+ TBBMALLOCPROXY_EXPORT void * operator new [](size_t sz) {
315315 return InternalOperatorNew (sz);
316316}
317- void operator delete (void * ptr) noexcept {
317+ TBBMALLOCPROXY_EXPORT void operator delete (void * ptr) noexcept {
318318 InitOrigPointers ();
319319 __TBB_malloc_safer_free (ptr, (void (*)(void *))orig_free);
320320}
321- void operator delete[] (void * ptr) noexcept {
321+ TBBMALLOCPROXY_EXPORT void operator delete[] (void * ptr) noexcept {
322322 InitOrigPointers ();
323323 __TBB_malloc_safer_free (ptr, (void (*)(void *))orig_free);
324324}
325- void * operator new (size_t sz, const std::nothrow_t &) noexcept {
325+ TBBMALLOCPROXY_EXPORT void * operator new (size_t sz, const std::nothrow_t &) noexcept {
326326 return scalable_malloc (sz);
327327}
328- void * operator new [](std::size_t sz, const std::nothrow_t &) noexcept {
328+ TBBMALLOCPROXY_EXPORT void * operator new [](std::size_t sz, const std::nothrow_t &) noexcept {
329329 return scalable_malloc (sz);
330330}
331- void operator delete (void * ptr, const std::nothrow_t &) noexcept {
331+ TBBMALLOCPROXY_EXPORT void operator delete (void * ptr, const std::nothrow_t &) noexcept {
332332 InitOrigPointers ();
333333 __TBB_malloc_safer_free (ptr, (void (*)(void *))orig_free);
334334}
335- void operator delete[] (void * ptr, const std::nothrow_t &) noexcept {
335+ TBBMALLOCPROXY_EXPORT void operator delete[] (void * ptr, const std::nothrow_t &) noexcept {
336336 InitOrigPointers ();
337337 __TBB_malloc_safer_free (ptr, (void (*)(void *))orig_free);
338338}
0 commit comments