1 //===-- RuntimeDyldCheckerImpl.h -- RuntimeDyld test framework --*- C++ -*-===// 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 #ifndef LLVM_LIB_EXECUTIONENGINE_RUNTIMEDYLD_RUNTIMEDYLDCHECKERIMPL_H 11 #define LLVM_LIB_EXECUTIONENGINE_RUNTIMEDYLD_RUNTIMEDYLDCHECKERIMPL_H 12 13 #include "RuntimeDyldImpl.h" 14 #include <set> 15 16 namespace llvm { 17 18 class RuntimeDyldCheckerImpl { 19 friend class RuntimeDyldChecker; 20 friend class RuntimeDyldImpl; 21 friend class RuntimeDyldCheckerExprEval; 22 friend class RuntimeDyldELF; 23 24 public: 25 RuntimeDyldCheckerImpl(RuntimeDyld &RTDyld, MCDisassembler *Disassembler, 26 MCInstPrinter *InstPrinter, 27 llvm::raw_ostream &ErrStream); 28 29 bool check(StringRef CheckExpr) const; 30 bool checkAllRulesInBuffer(StringRef RulePrefix, MemoryBuffer *MemBuf) const; 31 32 private: 33 34 // StubMap typedefs. 35 typedef std::map<std::string, uint64_t> StubOffsetsMap; 36 struct SectionAddressInfo { 37 uint64_t SectionID; 38 StubOffsetsMap StubOffsets; 39 }; 40 typedef std::map<std::string, SectionAddressInfo> SectionMap; 41 typedef std::map<std::string, SectionMap> StubMap; 42 43 RuntimeDyldImpl &getRTDyld() const { return *RTDyld.Dyld; } 44 45 bool isSymbolValid(StringRef Symbol) const; 46 uint64_t getSymbolLocalAddr(StringRef Symbol) const; 47 uint64_t getSymbolRemoteAddr(StringRef Symbol) const; 48 uint64_t readMemoryAtAddr(uint64_t Addr, unsigned Size) const; 49 50 std::pair<const SectionAddressInfo*, std::string> findSectionAddrInfo( 51 StringRef FileName, 52 StringRef SectionName) const; 53 54 std::pair<uint64_t, std::string> getSectionAddr(StringRef FileName, 55 StringRef SectionName, 56 bool IsInsideLoad) const; 57 58 std::pair<uint64_t, std::string> getStubAddrFor(StringRef FileName, 59 StringRef SectionName, 60 StringRef Symbol, 61 bool IsInsideLoad) const; 62 StringRef getSubsectionStartingAt(StringRef Name) const; 63 64 void registerSection(StringRef FilePath, unsigned SectionID); 65 void registerStubMap(StringRef FilePath, unsigned SectionID, 66 const RuntimeDyldImpl::StubMap &RTDyldStubs); 67 68 RuntimeDyld &RTDyld; 69 MCDisassembler *Disassembler; 70 MCInstPrinter *InstPrinter; 71 llvm::raw_ostream &ErrStream; 72 73 StubMap Stubs; 74 }; 75 } 76 77 #endif 78