Commit 9a47ba11 authored by Christopher Dykes's avatar Christopher Dykes Committed by Facebook Github Bot 0

Fix the weak references to JEMalloc under MSVC

Summary: While the previous version did compile, it would generate warnings about symbols being defined in multiple places.

Reviewed By: yfeldblum

Differential Revision: D3255815

fb-gh-sync-id: 72f5079a3973a04bdc0b469b97ba46181e40353b
fbshipit-source-id: 72f5079a3973a04bdc0b469b97ba46181e40353b
parent f79d6393
......@@ -35,39 +35,6 @@ int mallctl(const char*, void*, size_t*, void*, size_t)
int mallctlnametomib(const char*, size_t*, size_t*) __attribute__((__weak__));
int mallctlbymib(const size_t*, size_t, void*, size_t*, void*, size_t)
__attribute__((__weak__));
#elif defined(_MSC_VER)
// MSVC doesn't have weak symbols, so do some linker magic
// to emulate them.
extern void* (*mallocx)(size_t, int);
extern const char* mallocxWeak = nullptr;
#pragma comment(linker, "/alternatename:_mallocx=_mallocxWeak")
extern void* (*rallocx)(void*, size_t, int);
extern const char* rallocxWeak = nullptr;
#pragma comment(linker, "/alternatename:_rallocx=_rallocxWeak")
extern size_t(*xallocx)(void*, size_t, size_t, int);
extern const char* xallocxWeak = nullptr;
#pragma comment(linker, "/alternatename:_xallocx=_xallocxWeak")
extern size_t(*sallocx)(const void*, int);
extern const char* sallocxWeak = nullptr;
#pragma comment(linker, "/alternatename:_sallocx=_sallocxWeak")
extern void(*dallocx)(void*, int);
extern const char* dallocxWeak = nullptr;
#pragma comment(linker, "/alternatename:_dallocx=_dallocxWeak")
extern void(*sdallocx)(void*, size_t, int);
extern const char* sdallocxWeak = nullptr;
#pragma comment(linker, "/alternatename:_sdallocx=_sdallocxWeak")
extern size_t(*nallocx)(size_t, int);
extern const char* nallocxWeak = nullptr;
#pragma comment(linker, "/alternatename:_nallocx=_nallocxWeak")
extern int(*mallctl)(const char*, void*, size_t*, void*, size_t);
extern const char* mallctlWeak = nullptr;
#pragma comment(linker, "/alternatename:_mallctl=_mallctlWeak")
extern int(*mallctlnametomib)(const char*, size_t*, size_t*);
extern const char* mallctlnametomibWeak = nullptr;
#pragma comment(linker, "/alternatename:_mallctlnametomib=_mallctlnametomibWeak")
extern int(*mallctlbymib)(const size_t*, size_t, void*, size_t*, void*, size_t);
extern const char* mallctlbymibWeak = nullptr;
#pragma comment(linker, "/alternatename:_mallctlbymib=_mallctlbymibWeak")
#else
extern void* (*mallocx)(size_t, int);
extern void* (*rallocx)(void*, size_t, int);
......
......@@ -18,7 +18,30 @@
extern "C" {
#if !FOLLY_HAVE_WEAK_SYMBOLS
#ifdef _MSC_VER
// MSVC doesn't have weak symbols, so do some linker magic
// to emulate them.
const char* mallocxWeak = nullptr;
#pragma comment(linker, "/alternatename:_mallocx=_mallocxWeak")
const char* rallocxWeak = nullptr;
#pragma comment(linker, "/alternatename:_rallocx=_rallocxWeak")
const char* xallocxWeak = nullptr;
#pragma comment(linker, "/alternatename:_xallocx=_xallocxWeak")
const char* sallocxWeak = nullptr;
#pragma comment(linker, "/alternatename:_sallocx=_sallocxWeak")
const char* dallocxWeak = nullptr;
#pragma comment(linker, "/alternatename:_dallocx=_dallocxWeak")
const char* sdallocxWeak = nullptr;
#pragma comment(linker, "/alternatename:_sdallocx=_sdallocxWeak")
const char* nallocxWeak = nullptr;
#pragma comment(linker, "/alternatename:_nallocx=_nallocxWeak")
const char* mallctlWeak = nullptr;
#pragma comment(linker, "/alternatename:_mallctl=_mallctlWeak")
const char* mallctlnametomibWeak = nullptr;
#pragma comment(linker, "/alternatename:_mallctlnametomib=_mallctlnametomibWeak")
const char* mallctlbymibWeak = nullptr;
#pragma comment(linker, "/alternatename:_mallctlbymib=_mallctlbymibWeak")
#elif !FOLLY_HAVE_WEAK_SYMBOLS
void* (*mallocx)(size_t, int) = nullptr;
void* (*rallocx)(void*, size_t, int) = nullptr;
size_t (*xallocx)(void*, size_t, size_t, int) = nullptr;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment