Use #ifdefs for MANGLE_PREFIX.

This commit is contained in:
Frederich Munch 2017-02-21 23:05:02 -05:00 committed by sftnight
parent 7c1fbfcf9f
commit 3eb05a2c20

View File

@ -18,8 +18,6 @@
#ifdef __APPLE__
// Apple adds an extra '_'
# define MANGLE_PREFIX "_"
#else
# define MANGLE_PREFIX ""
#endif
using namespace llvm;
@ -318,7 +316,9 @@ IncrementalJIT::lookupSymbol(llvm::StringRef Name, void *InAddr, bool Jit) {
if (InAddr && (!Addr || Jit)) {
if (Jit) {
std::string Key(Name);
#ifdef MANGLE_PREFIX
Key.insert(0, MANGLE_PREFIX);
#endif
m_SymbolMap[Key] = llvm::orc::TargetAddress(InAddr);
}
llvm::sys::DynamicLibrary::AddSymbol(Name, InAddr);
@ -373,25 +373,26 @@ size_t IncrementalJIT::addModules(std::vector<llvm::Module*>&& modules) {
return m_ExeMM->findSymbol(S);
},
[&](const std::string &Name) {
if (auto Sym = getSymbolAddressWithoutMangling(Name, true)
/*was: findSymbol(Name)*/)
if (auto Sym = getSymbolAddressWithoutMangling(Name, true))
return RuntimeDyld::SymbolInfo(Sym.getAddress(),
Sym.getFlags());
const std::string* NameNP = &Name;
#ifdef MANGLE_PREFIX
std::string NameNoPrefix;
const size_t PrfxLen = strlen(MANGLE_PREFIX);
if (!Name.compare(0, PrfxLen, MANGLE_PREFIX)) {
NameNoPrefix = Name.substr(PrfxLen);
NameNP = &NameNoPrefix;
}
#endif
/// This method returns the address of the specified function or variable
/// that could not be resolved by getSymbolAddress() or by resolving
/// possible weak symbols by the ExecutionEngine.
/// It is used to resolve symbols during module linking.
std::string NameNoPrefix;
if (MANGLE_PREFIX[0]
&& !Name.compare(0, strlen(MANGLE_PREFIX), MANGLE_PREFIX))
NameNoPrefix = Name.substr(strlen(MANGLE_PREFIX), -1);
else
NameNoPrefix = std::move(Name);
uint64_t addr
= (uint64_t) getParent().NotifyLazyFunctionCreators(NameNoPrefix);
uint64_t addr = uint64_t(getParent().NotifyLazyFunctionCreators(*NameNP));
return RuntimeDyld::SymbolInfo(addr, llvm::JITSymbolFlags::Weak);
});