File tree Expand file tree Collapse file tree 1 file changed +12
-4
lines changed Expand file tree Collapse file tree 1 file changed +12
-4
lines changed Original file line number Diff line number Diff line change @@ -3552,15 +3552,23 @@ namespace Cpp {
3552
3552
static inline std::string DemangleNameForDlsym (const std::string& name) {
3553
3553
std::string nameForDlsym = name;
3554
3554
3555
- #if defined(R__MACOSX) || defined(R__WIN32)
3555
+ static bool is_demangle_active = false ;
3556
+ static bool demangle = false ;
3557
+ if (!is_demangle_active) {
3558
+ auto & I = getInterp ();
3559
+ llvm::orc::LLJIT& EE = *compat::getExecutionEngine (I);
3560
+ auto t = EE.getTargetMachine ().getTargetTriple ();
3561
+ demangle = t.isOSDarwin () || t.isWindows ();
3562
+ is_demangle_active = true ;
3563
+ }
3564
+
3556
3565
// The JIT gives us a mangled name which has an additional leading underscore
3557
3566
// on macOS and Windows, for instance __ZN8TRandom34RndmEv. However, dlsym
3558
3567
// requires us to remove it.
3559
3568
// FIXME: get this information from the DataLayout via getGlobalPrefix()!
3560
- if (nameForDlsym[0 ] == ' _' )
3569
+ if (demangle && nameForDlsym[0 ] == ' _' )
3561
3570
nameForDlsym.erase (0 , 1 );
3562
- #endif // R__MACOSX
3563
-
3571
+ }
3564
3572
return nameForDlsym;
3565
3573
}
3566
3574
You can’t perform that action at this time.
0 commit comments