@@ -210,25 +210,24 @@ getSymbolAddress(clang::Interpreter& I, llvm::StringRef IRName) {
210
210
211
211
inline llvm::Expected<llvm::JITTargetAddress>
212
212
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);
217
216
compat::maybeMangleDeclName (GD, MangledName);
218
217
return getSymbolAddress (I, llvm::StringRef (MangledName));
219
- #endif
220
218
}
221
219
222
220
inline llvm::Expected<llvm::JITTargetAddress>
223
- getSymbolAddressFromLinkerName (const clang::Interpreter& I,
224
- llvm::StringRef LinkerName ) {
221
+ getSymbolAddressFromLinkerName (clang::Interpreter& I,
222
+ llvm::StringRef LinkerName_ ) {
225
223
#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
+ }
230
230
auto AddrOrErr = I.getSymbolAddressFromLinkerName (LinkerName);
231
- #endif
232
231
if (llvm::Error Err = AddrOrErr.takeError ())
233
232
return std::move (Err);
234
233
return AddrOrErr->getValue ();
0 commit comments