Skip to content

Commit 8358f49

Browse files
committed
[Symbol Names] Use compat::getExecutionEngine for data layout and then Global Prefix
- Use global prefix by default to retrieve symbols Signed-off-by: Shreyas Atre <[email protected]>
1 parent cfafa48 commit 8358f49

File tree

2 files changed

+18
-17
lines changed

2 files changed

+18
-17
lines changed

lib/Interpreter/Compatibility.h

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -210,25 +210,24 @@ getSymbolAddress(clang::Interpreter& I, llvm::StringRef IRName) {
210210

211211
inline llvm::Expected<llvm::JITTargetAddress>
212212
getSymbolAddress(clang::Interpreter& I, clang::GlobalDecl GD) {
213-
std::string MangledName;
214-
#if __APPLE__
215-
return getSymbolAddress(I, llvm::StringRef("_" + MangledName));
216-
#else
213+
auto& DL = getExecutionEngine(I)->getDataLayout();
214+
char GlobalPrefix = DL.getGlobalPrefix();
215+
std::string MangledName = std::string(1, GlobalPrefix);
217216
compat::maybeMangleDeclName(GD, MangledName);
218217
return getSymbolAddress(I, llvm::StringRef(MangledName));
219-
#endif
220218
}
221219

222220
inline llvm::Expected<llvm::JITTargetAddress>
223-
getSymbolAddressFromLinkerName(const clang::Interpreter& I,
224-
llvm::StringRef LinkerName) {
221+
getSymbolAddressFromLinkerName(clang::Interpreter& I,
222+
llvm::StringRef LinkerName_) {
225223
#if CLANG_VERSION_MAJOR >= 14
226-
#if __APPLE__
227-
/// https://github.com/llvm/llvm-project/blob/0f8615f4dc568f4d7cbf73580eef3e78f64f3bd0/llvm/lib/ExecutionEngine/Orc/ExecutionUtils.cpp#L252-L259
228-
auto AddrOrErr = I.getSymbolAddressFromLinkerName(("_" + LinkerName).str());
229-
#else
224+
auto& DL = getExecutionEngine(I)->getDataLayout();
225+
char GlobalPrefix = DL.getGlobalPrefix();
226+
std::string LinkerName(LinkerName_);
227+
if(GlobalPrefix != '\0'){
228+
LinkerName = std::string(1, GlobalPrefix) + LinkerName;
229+
}
230230
auto AddrOrErr = I.getSymbolAddressFromLinkerName(LinkerName);
231-
#endif
232231
if (llvm::Error Err = AddrOrErr.takeError())
233232
return std::move(Err);
234233
return AddrOrErr->getValue();

lib/Interpreter/CppInterOp.cpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2661,11 +2661,13 @@ namespace Cpp {
26612661
// Let's inject it.
26622662
SymbolMap::iterator It;
26632663
llvm::orc::SymbolMap InjectedSymbols;
2664-
#if __APPLE__
2665-
auto Name = ES.intern("_" + std::string(linker_mangled_name));
2666-
#else
2667-
auto Name = ES.intern(linker_mangled_name);
2668-
#endif
2664+
auto& DL = compat::getExecutionEngine(I)->getDataLayout();
2665+
char GlobalPrefix = DL.getGlobalPrefix();
2666+
std::string tmp(linker_mangled_name);
2667+
if (GlobalPrefix != '\0') {
2668+
tmp = std::string(1, GlobalPrefix) + tmp;
2669+
}
2670+
auto Name = ES.intern(tmp);
26692671
InjectedSymbols[Name] =
26702672
#if CLANG_VERSION_MAJOR < 17
26712673
JITEvaluatedSymbol(address,

0 commit comments

Comments
 (0)