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