xref: /freebsd/contrib/llvm-project/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldCheckerImpl.h (revision 0b57cec536236d46e3dba9bd041533462f33dbb7)
1*0b57cec5SDimitry Andric //===-- RuntimeDyldCheckerImpl.h -- RuntimeDyld test framework --*- C++ -*-===//
2*0b57cec5SDimitry Andric //
3*0b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*0b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
5*0b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*0b57cec5SDimitry Andric //
7*0b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
8*0b57cec5SDimitry Andric 
9*0b57cec5SDimitry Andric #ifndef LLVM_LIB_EXECUTIONENGINE_RUNTIMEDYLD_RUNTIMEDYLDCHECKERIMPL_H
10*0b57cec5SDimitry Andric #define LLVM_LIB_EXECUTIONENGINE_RUNTIMEDYLD_RUNTIMEDYLDCHECKERIMPL_H
11*0b57cec5SDimitry Andric 
12*0b57cec5SDimitry Andric #include "RuntimeDyldImpl.h"
13*0b57cec5SDimitry Andric 
14*0b57cec5SDimitry Andric namespace llvm {
15*0b57cec5SDimitry Andric 
16*0b57cec5SDimitry Andric class RuntimeDyldCheckerImpl {
17*0b57cec5SDimitry Andric   friend class RuntimeDyldChecker;
18*0b57cec5SDimitry Andric   friend class RuntimeDyldCheckerExprEval;
19*0b57cec5SDimitry Andric 
20*0b57cec5SDimitry Andric   using IsSymbolValidFunction =
21*0b57cec5SDimitry Andric     RuntimeDyldChecker::IsSymbolValidFunction;
22*0b57cec5SDimitry Andric   using GetSymbolInfoFunction = RuntimeDyldChecker::GetSymbolInfoFunction;
23*0b57cec5SDimitry Andric   using GetSectionInfoFunction = RuntimeDyldChecker::GetSectionInfoFunction;
24*0b57cec5SDimitry Andric   using GetStubInfoFunction = RuntimeDyldChecker::GetStubInfoFunction;
25*0b57cec5SDimitry Andric   using GetGOTInfoFunction = RuntimeDyldChecker::GetGOTInfoFunction;
26*0b57cec5SDimitry Andric 
27*0b57cec5SDimitry Andric public:
28*0b57cec5SDimitry Andric   RuntimeDyldCheckerImpl(
29*0b57cec5SDimitry Andric       IsSymbolValidFunction IsSymbolValid, GetSymbolInfoFunction GetSymbolInfo,
30*0b57cec5SDimitry Andric       GetSectionInfoFunction GetSectionInfo, GetStubInfoFunction GetStubInfo,
31*0b57cec5SDimitry Andric       GetGOTInfoFunction GetGOTInfo, support::endianness Endianness,
32*0b57cec5SDimitry Andric       MCDisassembler *Disassembler, MCInstPrinter *InstPrinter,
33*0b57cec5SDimitry Andric       llvm::raw_ostream &ErrStream);
34*0b57cec5SDimitry Andric 
35*0b57cec5SDimitry Andric   bool check(StringRef CheckExpr) const;
36*0b57cec5SDimitry Andric   bool checkAllRulesInBuffer(StringRef RulePrefix, MemoryBuffer *MemBuf) const;
37*0b57cec5SDimitry Andric 
38*0b57cec5SDimitry Andric private:
39*0b57cec5SDimitry Andric 
40*0b57cec5SDimitry Andric   // StubMap typedefs.
41*0b57cec5SDimitry Andric 
42*0b57cec5SDimitry Andric   Expected<JITSymbolResolver::LookupResult>
43*0b57cec5SDimitry Andric   lookup(const JITSymbolResolver::LookupSet &Symbols) const;
44*0b57cec5SDimitry Andric 
45*0b57cec5SDimitry Andric   bool isSymbolValid(StringRef Symbol) const;
46*0b57cec5SDimitry Andric   uint64_t getSymbolLocalAddr(StringRef Symbol) const;
47*0b57cec5SDimitry Andric   uint64_t getSymbolRemoteAddr(StringRef Symbol) const;
48*0b57cec5SDimitry Andric   uint64_t readMemoryAtAddr(uint64_t Addr, unsigned Size) const;
49*0b57cec5SDimitry Andric 
50*0b57cec5SDimitry Andric   StringRef getSymbolContent(StringRef Symbol) const;
51*0b57cec5SDimitry Andric 
52*0b57cec5SDimitry Andric   std::pair<uint64_t, std::string> getSectionAddr(StringRef FileName,
53*0b57cec5SDimitry Andric                                                   StringRef SectionName,
54*0b57cec5SDimitry Andric                                                   bool IsInsideLoad) const;
55*0b57cec5SDimitry Andric 
56*0b57cec5SDimitry Andric   std::pair<uint64_t, std::string>
57*0b57cec5SDimitry Andric   getStubOrGOTAddrFor(StringRef StubContainerName, StringRef Symbol,
58*0b57cec5SDimitry Andric                       bool IsInsideLoad, bool IsStubAddr) const;
59*0b57cec5SDimitry Andric 
60*0b57cec5SDimitry Andric   Optional<uint64_t> getSectionLoadAddress(void *LocalAddr) const;
61*0b57cec5SDimitry Andric 
62*0b57cec5SDimitry Andric   IsSymbolValidFunction IsSymbolValid;
63*0b57cec5SDimitry Andric   GetSymbolInfoFunction GetSymbolInfo;
64*0b57cec5SDimitry Andric   GetSectionInfoFunction GetSectionInfo;
65*0b57cec5SDimitry Andric   GetStubInfoFunction GetStubInfo;
66*0b57cec5SDimitry Andric   GetGOTInfoFunction GetGOTInfo;
67*0b57cec5SDimitry Andric   support::endianness Endianness;
68*0b57cec5SDimitry Andric   MCDisassembler *Disassembler;
69*0b57cec5SDimitry Andric   MCInstPrinter *InstPrinter;
70*0b57cec5SDimitry Andric   llvm::raw_ostream &ErrStream;
71*0b57cec5SDimitry Andric };
72*0b57cec5SDimitry Andric }
73*0b57cec5SDimitry Andric 
74*0b57cec5SDimitry Andric #endif
75