1 //===----------- JITSymbol.cpp - JITSymbol class implementation -----------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // JITSymbol class implementation plus helper functions. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #include "llvm/ExecutionEngine/JITSymbol.h" 15 #include "llvm/IR/GlobalValue.h" 16 #include "llvm/Object/SymbolicFile.h" 17 18 using namespace llvm; 19 20 JITSymbolFlags llvm::JITSymbolFlags::fromGlobalValue(const GlobalValue &GV) { 21 JITSymbolFlags Flags = JITSymbolFlags::None; 22 if (GV.hasWeakLinkage() || GV.hasLinkOnceLinkage()) 23 Flags |= JITSymbolFlags::Weak; 24 if (GV.hasCommonLinkage()) 25 Flags |= JITSymbolFlags::Common; 26 if (!GV.hasLocalLinkage() && !GV.hasHiddenVisibility()) 27 Flags |= JITSymbolFlags::Exported; 28 return Flags; 29 } 30 31 JITSymbolFlags 32 llvm::JITSymbolFlags::fromObjectSymbol(const object::BasicSymbolRef &Symbol) { 33 JITSymbolFlags Flags = JITSymbolFlags::None; 34 if (Symbol.getFlags() & object::BasicSymbolRef::SF_Weak) 35 Flags |= JITSymbolFlags::Weak; 36 if (Symbol.getFlags() & object::BasicSymbolRef::SF_Common) 37 Flags |= JITSymbolFlags::Common; 38 if (Symbol.getFlags() & object::BasicSymbolRef::SF_Exported) 39 Flags |= JITSymbolFlags::Exported; 40 return Flags; 41 } 42