137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines//===-- RuntimeDyldCheckerImpl.h -- RuntimeDyld test framework --*- C++ -*-===// 237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines// 337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines// The LLVM Compiler Infrastructure 437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines// 537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines// This file is distributed under the University of Illinois Open Source 637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines// License. See LICENSE.TXT for details. 737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines// 837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines//===----------------------------------------------------------------------===// 937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 1037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#ifndef LLVM_LIB_EXECUTIONENGINE_RUNTIMEDYLD_RUNTIMEDYLDCHECKERIMPL_H 1137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#define LLVM_LIB_EXECUTIONENGINE_RUNTIMEDYLD_RUNTIMEDYLDCHECKERIMPL_H 1237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 1337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#include "RuntimeDyldImpl.h" 1437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 1537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesnamespace llvm { 1637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 1737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesclass RuntimeDyldCheckerImpl { 1837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines friend class RuntimeDyldChecker; 1937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines friend class RuntimeDyldImpl; 2037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines friend class RuntimeDyldCheckerExprEval; 210c7f116bb6950ef819323d855415b2f2b0aad987Pirama Arumuga Nainar friend class RuntimeDyldELF; 2237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 2337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinespublic: 2437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines RuntimeDyldCheckerImpl(RuntimeDyld &RTDyld, MCDisassembler *Disassembler, 2537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines MCInstPrinter *InstPrinter, 2637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines llvm::raw_ostream &ErrStream); 2737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 2837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines bool check(StringRef CheckExpr) const; 2937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines bool checkAllRulesInBuffer(StringRef RulePrefix, MemoryBuffer *MemBuf) const; 3037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 3137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesprivate: 3237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 3337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines // StubMap typedefs. 3437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines typedef std::map<std::string, uint64_t> StubOffsetsMap; 3537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines struct SectionAddressInfo { 3637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines uint64_t SectionID; 3737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines StubOffsetsMap StubOffsets; 3837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines }; 3937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines typedef std::map<std::string, SectionAddressInfo> SectionMap; 4037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines typedef std::map<std::string, SectionMap> StubMap; 4137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 4237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines RuntimeDyldImpl &getRTDyld() const { return *RTDyld.Dyld; } 4337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 4437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines bool isSymbolValid(StringRef Symbol) const; 454c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar uint64_t getSymbolLocalAddr(StringRef Symbol) const; 4637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines uint64_t getSymbolRemoteAddr(StringRef Symbol) const; 4737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines uint64_t readMemoryAtAddr(uint64_t Addr, unsigned Size) const; 4837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 4937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines std::pair<const SectionAddressInfo*, std::string> findSectionAddrInfo( 5037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines StringRef FileName, 5137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines StringRef SectionName) const; 5237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 5337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines std::pair<uint64_t, std::string> getSectionAddr(StringRef FileName, 5437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines StringRef SectionName, 5537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines bool IsInsideLoad) const; 5637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 5737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines std::pair<uint64_t, std::string> getStubAddrFor(StringRef FileName, 5837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines StringRef SectionName, 5937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines StringRef Symbol, 6037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines bool IsInsideLoad) const; 6137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines StringRef getSubsectionStartingAt(StringRef Name) const; 6237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 6337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines void registerSection(StringRef FilePath, unsigned SectionID); 6437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines void registerStubMap(StringRef FilePath, unsigned SectionID, 6537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines const RuntimeDyldImpl::StubMap &RTDyldStubs); 6637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 6737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines RuntimeDyld &RTDyld; 6837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines MCDisassembler *Disassembler; 6937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines MCInstPrinter *InstPrinter; 7037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines llvm::raw_ostream &ErrStream; 7137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 7237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines StubMap Stubs; 7337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines}; 7437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines} 7537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 7637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#endif 77