diff options
Diffstat (limited to 'llvm/lib/ExecutionEngine/RuntimeDyld/JITSymbol.cpp')
-rw-r--r-- | llvm/lib/ExecutionEngine/RuntimeDyld/JITSymbol.cpp | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/llvm/lib/ExecutionEngine/RuntimeDyld/JITSymbol.cpp b/llvm/lib/ExecutionEngine/RuntimeDyld/JITSymbol.cpp index 18eb0e46192..88b0cd0e336 100644 --- a/llvm/lib/ExecutionEngine/RuntimeDyld/JITSymbol.cpp +++ b/llvm/lib/ExecutionEngine/RuntimeDyld/JITSymbol.cpp @@ -12,8 +12,9 @@ //===----------------------------------------------------------------------===// #include "llvm/ExecutionEngine/JITSymbol.h" +#include "llvm/IR/Function.h" #include "llvm/IR/GlobalValue.h" -#include "llvm/Object/SymbolicFile.h" +#include "llvm/Object/ObjectFile.h" using namespace llvm; @@ -25,11 +26,13 @@ JITSymbolFlags llvm::JITSymbolFlags::fromGlobalValue(const GlobalValue &GV) { Flags |= JITSymbolFlags::Common; if (!GV.hasLocalLinkage() && !GV.hasHiddenVisibility()) Flags |= JITSymbolFlags::Exported; + if (isa<Function>(GV)) + Flags |= JITSymbolFlags::Callable; return Flags; } -JITSymbolFlags -llvm::JITSymbolFlags::fromObjectSymbol(const object::BasicSymbolRef &Symbol) { +Expected<JITSymbolFlags> +llvm::JITSymbolFlags::fromObjectSymbol(const object::SymbolRef &Symbol) { JITSymbolFlags Flags = JITSymbolFlags::None; if (Symbol.getFlags() & object::BasicSymbolRef::SF_Weak) Flags |= JITSymbolFlags::Weak; @@ -37,11 +40,19 @@ llvm::JITSymbolFlags::fromObjectSymbol(const object::BasicSymbolRef &Symbol) { Flags |= JITSymbolFlags::Common; if (Symbol.getFlags() & object::BasicSymbolRef::SF_Exported) Flags |= JITSymbolFlags::Exported; + + auto SymbolType = Symbol.getType(); + if (!SymbolType) + return SymbolType.takeError(); + + if (*SymbolType & object::SymbolRef::ST_Function) + Flags |= JITSymbolFlags::Callable; + return Flags; } -ARMJITSymbolFlags llvm::ARMJITSymbolFlags::fromObjectSymbol( - const object::BasicSymbolRef &Symbol) { +ARMJITSymbolFlags +llvm::ARMJITSymbolFlags::fromObjectSymbol(const object::SymbolRef &Symbol) { ARMJITSymbolFlags Flags; if (Symbol.getFlags() & object::BasicSymbolRef::SF_Thumb) Flags |= ARMJITSymbolFlags::Thumb; |