LLVM  3.7.0
RuntimeDyldChecker.h
Go to the documentation of this file.
1 //===---- RuntimeDyldChecker.h - RuntimeDyld tester 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_EXECUTIONENGINE_RUNTIMEDYLDCHECKER_H
11 #define LLVM_EXECUTIONENGINE_RUNTIMEDYLDCHECKER_H
12 
13 #include "llvm/ADT/StringRef.h"
14 
15 namespace llvm {
16 
17 class MCDisassembler;
18 class MemoryBuffer;
19 class MCInstPrinter;
20 class RuntimeDyld;
21 class RuntimeDyldCheckerImpl;
22 class raw_ostream;
23 
24 /// \brief RuntimeDyld invariant checker for verifying that RuntimeDyld has
25 /// correctly applied relocations.
26 ///
27 /// The RuntimeDyldChecker class evaluates expressions against an attached
28 /// RuntimeDyld instance to verify that relocations have been applied
29 /// correctly.
30 ///
31 /// The expression language supports basic pointer arithmetic and bit-masking,
32 /// and has limited disassembler integration for accessing instruction
33 /// operands and the next PC (program counter) address for each instruction.
34 ///
35 /// The language syntax is:
36 ///
37 /// check = expr '=' expr
38 ///
39 /// expr = binary_expr
40 /// | sliceable_expr
41 ///
42 /// sliceable_expr = '*{' number '}' load_addr_expr [slice]
43 /// | '(' expr ')' [slice]
44 /// | ident_expr [slice]
45 /// | number [slice]
46 ///
47 /// slice = '[' high-bit-index ':' low-bit-index ']'
48 ///
49 /// load_addr_expr = symbol
50 /// | '(' symbol '+' number ')'
51 /// | '(' symbol '-' number ')'
52 ///
53 /// ident_expr = 'decode_operand' '(' symbol ',' operand-index ')'
54 /// | 'next_pc' '(' symbol ')'
55 /// | 'stub_addr' '(' file-name ',' section-name ',' symbol ')'
56 /// | symbol
57 ///
58 /// binary_expr = expr '+' expr
59 /// | expr '-' expr
60 /// | expr '&' expr
61 /// | expr '|' expr
62 /// | expr '<<' expr
63 /// | expr '>>' expr
64 ///
66 public:
67  RuntimeDyldChecker(RuntimeDyld &RTDyld, MCDisassembler *Disassembler,
68  MCInstPrinter *InstPrinter, raw_ostream &ErrStream);
70 
71  // \brief Get the associated RTDyld instance.
73 
74  // \brief Get the associated RTDyld instance.
75  const RuntimeDyld& getRTDyld() const;
76 
77  /// \brief Check a single expression against the attached RuntimeDyld
78  /// instance.
79  bool check(StringRef CheckExpr) const;
80 
81  /// \brief Scan the given memory buffer for lines beginning with the string
82  /// in RulePrefix. The remainder of the line is passed to the check
83  /// method to be evaluated as an expression.
84  bool checkAllRulesInBuffer(StringRef RulePrefix, MemoryBuffer *MemBuf) const;
85 
86  /// \brief Returns the address of the requested section (or an error message
87  /// in the second element of the pair if the address cannot be found).
88  ///
89  /// if 'LocalAddress' is true, this returns the address of the section
90  /// within the linker's memory. If 'LocalAddress' is false it returns the
91  /// address within the target process (i.e. the load address).
92  std::pair<uint64_t, std::string> getSectionAddr(StringRef FileName,
93  StringRef SectionName,
94  bool LocalAddress);
95 
96 private:
97  std::unique_ptr<RuntimeDyldCheckerImpl> Impl;
98 };
99 
100 } // end namespace llvm
101 
102 #endif
Superclass for all disassemblers.
bool checkAllRulesInBuffer(StringRef RulePrefix, MemoryBuffer *MemBuf) const
Scan the given memory buffer for lines beginning with the string in RulePrefix.
std::pair< uint64_t, std::string > getSectionAddr(StringRef FileName, StringRef SectionName, bool LocalAddress)
Returns the address of the requested section (or an error message in the second element of the pair i...
RuntimeDyld invariant checker for verifying that RuntimeDyld has correctly applied relocations...
bool check(StringRef CheckExpr) const
Check a single expression against the attached RuntimeDyld instance.
This interface provides simple read-only access to a block of memory, and provides simple methods for...
Definition: MemoryBuffer.h:37
This is an instance of a target assembly language printer that converts an MCInst to valid target ass...
Definition: MCInstPrinter.h:38
RuntimeDyldChecker(RuntimeDyld &RTDyld, MCDisassembler *Disassembler, MCInstPrinter *InstPrinter, raw_ostream &ErrStream)
This class implements an extremely fast bulk output stream that can only output to a stream...
Definition: raw_ostream.h:38
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:40