| 1 | //===- bolt/Target/X86/X86MCSymbolizer.h ------------------------*- C++ -*-===// |
| 2 | // |
| 3 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| 4 | // See https://llvm.org/LICENSE.txt for license information. |
| 5 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| 6 | // |
| 7 | //===----------------------------------------------------------------------===// |
| 8 | |
| 9 | #ifndef BOLT_CORE_X86MCSYMBOLIZER_H |
| 10 | #define BOLT_CORE_X86MCSYMBOLIZER_H |
| 11 | |
| 12 | #include "bolt/Core/BinaryFunction.h" |
| 13 | #include "llvm/MC/MCDisassembler/MCSymbolizer.h" |
| 14 | |
| 15 | namespace llvm { |
| 16 | namespace bolt { |
| 17 | |
| 18 | class X86MCSymbolizer : public MCSymbolizer { |
| 19 | protected: |
| 20 | BinaryFunction &Function; |
| 21 | bool CreateNewSymbols{true}; |
| 22 | |
| 23 | Expected<std::pair<MCSymbol *, uint64_t>> handleGOTPC64(const Relocation &R, |
| 24 | uint64_t InstrAddr); |
| 25 | |
| 26 | public: |
| 27 | X86MCSymbolizer(BinaryFunction &Function, bool CreateNewSymbols = true) |
| 28 | : MCSymbolizer(*Function.getBinaryContext().Ctx, nullptr), |
| 29 | Function(Function), CreateNewSymbols(CreateNewSymbols) {} |
| 30 | |
| 31 | X86MCSymbolizer(const X86MCSymbolizer &) = delete; |
| 32 | X86MCSymbolizer &operator=(const X86MCSymbolizer &) = delete; |
| 33 | virtual ~X86MCSymbolizer(); |
| 34 | |
| 35 | bool tryAddingSymbolicOperand(MCInst &Inst, raw_ostream &CStream, |
| 36 | int64_t Value, uint64_t Address, bool IsBranch, |
| 37 | uint64_t Offset, uint64_t OpSize, |
| 38 | uint64_t InstSize) override; |
| 39 | |
| 40 | void (raw_ostream &CStream, int64_t Value, |
| 41 | uint64_t Address) override; |
| 42 | }; |
| 43 | |
| 44 | } // namespace bolt |
| 45 | } // namespace llvm |
| 46 | |
| 47 | #endif |
| 48 | |