mirror of
https://github.com/JuliaLang/julia.git
synced 2026-05-28 03:10:33 +08:00
Privatize duplicate CI funcs properly on macOS (demangle)
This commit is contained in:
@@ -875,13 +875,15 @@ public:
|
||||
Syms[Unique.specptr] = JITSymbolFlags::Callable | JITSymbolFlags::Exported;
|
||||
}
|
||||
|
||||
for (auto &[CI, Funcs] : DeadCIs) {
|
||||
auto Privatize = [&](const orc::SymbolStringPtr &S) JL_NOTSAFEPOINT {
|
||||
Function *F;
|
||||
if (S && (F = Out.module->getFunction(JIT.demangle(*S))))
|
||||
F->setLinkage(Function::PrivateLinkage);
|
||||
};
|
||||
for (auto &[CI, Funcs] : DeadCIs) {
|
||||
Out.linker_info->ci_funcs.erase(CI);
|
||||
if (Funcs.invoke && (F = Out.module->getFunction(*Funcs.invoke)))
|
||||
F->setLinkage(Function::PrivateLinkage);
|
||||
if (Funcs.specptr && (F = Out.module->getFunction(*Funcs.specptr)))
|
||||
F->setLinkage(Function::PrivateLinkage);
|
||||
Privatize(Funcs.invoke);
|
||||
Privatize(Funcs.specptr);
|
||||
}
|
||||
|
||||
// Tell ORC about all the other definition in this module. When
|
||||
@@ -1943,6 +1945,15 @@ orc::SymbolStringPtr JuliaOJIT::mangle(StringRef Name)
|
||||
return ES.intern(MangleName);
|
||||
}
|
||||
|
||||
StringRef JuliaOJIT::demangle(StringRef Name)
|
||||
{
|
||||
#if defined(_OS_WINDOWS_) && !defined(_CPU_X86_64_) || defined(_OS_DARWIN_)
|
||||
if (Name.size() > 0 && Name[0] == '_')
|
||||
return Name.drop_front();
|
||||
#endif
|
||||
return Name;
|
||||
}
|
||||
|
||||
void JuliaOJIT::addGlobalMapping(StringRef Name, uint64_t Addr)
|
||||
{
|
||||
cantFail(JD.define(orc::absoluteSymbols({{mangle(Name), {ExecutorAddr::fromPtr((void*)Addr), JITSymbolFlags::Exported}}})));
|
||||
|
||||
@@ -794,6 +794,7 @@ public:
|
||||
void enablePerfJITEventListener() JL_NOTSAFEPOINT;
|
||||
|
||||
orc::SymbolStringPtr mangle(StringRef Name) JL_NOTSAFEPOINT;
|
||||
StringRef demangle(StringRef Name) JL_NOTSAFEPOINT;
|
||||
void addGlobalMapping(StringRef Name, uint64_t Addr) JL_NOTSAFEPOINT;
|
||||
void addOutput(jl_emitted_output_t O) JL_NOTSAFEPOINT;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user