Privatize duplicate CI funcs properly on macOS (demangle)

This commit is contained in:
Sam Schweigel
2026-05-26 11:41:48 -07:00
parent e93d6c5182
commit 19213d7e5a
2 changed files with 17 additions and 5 deletions

View File

@@ -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}}})));

View File

@@ -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;