#ifndef LLVM_TOOLS_LLVM_READOBJ_ARMEHABIPRINTER_H
#define LLVM_TOOLS_LLVM_READOBJ_ARMEHABIPRINTER_H
#include "llvm-readobj.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/Object/ELF.h"
#include "llvm/Object/ELFTypes.h"
#include "llvm/Support/ARMEHABI.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/Endian.h"
#include "llvm/Support/Format.h"
#include "llvm/Support/ScopedPrinter.h"
#include "llvm/Support/type_traits.h"
namespace llvm {
namespace ARM {
namespace EHABI {
class OpcodeDecoder { … };
inline ArrayRef<OpcodeDecoder::RingEntry> OpcodeDecoder::ring() { … }
inline void OpcodeDecoder::Decode_00xxxxxx(const uint8_t *Opcodes,
unsigned &OI) { … }
inline void OpcodeDecoder::Decode_01xxxxxx(const uint8_t *Opcodes,
unsigned &OI) { … }
inline void OpcodeDecoder::Decode_1000iiii_iiiiiiii(const uint8_t *Opcodes,
unsigned &OI) { … }
inline void OpcodeDecoder::Decode_10011101(const uint8_t *Opcodes,
unsigned &OI) { … }
inline void OpcodeDecoder::Decode_10011111(const uint8_t *Opcodes,
unsigned &OI) { … }
inline void OpcodeDecoder::Decode_1001nnnn(const uint8_t *Opcodes,
unsigned &OI) { … }
inline void OpcodeDecoder::Decode_10100nnn(const uint8_t *Opcodes,
unsigned &OI) { … }
inline void OpcodeDecoder::Decode_10101nnn(const uint8_t *Opcodes,
unsigned &OI) { … }
inline void OpcodeDecoder::Decode_10110000(const uint8_t *Opcodes,
unsigned &OI) { … }
inline void OpcodeDecoder::Decode_10110001_0000iiii(const uint8_t *Opcodes,
unsigned &OI) { … }
inline void OpcodeDecoder::Decode_10110010_uleb128(const uint8_t *Opcodes,
unsigned &OI) { … }
inline void OpcodeDecoder::Decode_10110011_sssscccc(const uint8_t *Opcodes,
unsigned &OI) { … }
inline void OpcodeDecoder::Decode_101101nn(const uint8_t *Opcodes,
unsigned &OI) { … }
inline void OpcodeDecoder::Decode_10111nnn(const uint8_t *Opcodes,
unsigned &OI) { … }
inline void OpcodeDecoder::Decode_11000110_sssscccc(const uint8_t *Opcodes,
unsigned &OI) { … }
inline void OpcodeDecoder::Decode_11000111_0000iiii(const uint8_t *Opcodes,
unsigned &OI) { … }
inline void OpcodeDecoder::Decode_11001000_sssscccc(const uint8_t *Opcodes,
unsigned &OI) { … }
inline void OpcodeDecoder::Decode_11001001_sssscccc(const uint8_t *Opcodes,
unsigned &OI) { … }
inline void OpcodeDecoder::Decode_11001yyy(const uint8_t *Opcodes,
unsigned &OI) { … }
inline void OpcodeDecoder::Decode_11000nnn(const uint8_t *Opcodes,
unsigned &OI) { … }
inline void OpcodeDecoder::Decode_11010nnn(const uint8_t *Opcodes,
unsigned &OI) { … }
inline void OpcodeDecoder::Decode_11xxxyyy(const uint8_t *Opcodes,
unsigned &OI) { … }
inline void OpcodeDecoder::PrintGPR(uint16_t GPRMask) { … }
inline void OpcodeDecoder::PrintRegisters(uint32_t VFPMask, StringRef Prefix) { … }
inline void OpcodeDecoder::Decode(const uint8_t *Opcodes, off_t Offset,
size_t Length) { … }
template <typename ET>
class PrinterContext { … };
template <typename ET>
const size_t PrinterContext<ET>::IndexTableEntrySize = …;
template <typename ET>
ErrorOr<StringRef> PrinterContext<ET>::FunctionAtAddress(
uint64_t Address, std::optional<unsigned> SectionIndex) const { … }
template <typename ET>
const typename ET::Shdr *
PrinterContext<ET>::FindExceptionTable(unsigned IndexSectionIndex,
off_t IndexTableOffset) const { … }
template <typename ET>
static const typename ET::Shdr *
findSectionContainingAddress(const object::ELFFile<ET> &Obj, StringRef FileName,
uint64_t Address) { … }
template <typename ET>
void PrinterContext<ET>::PrintExceptionTable(const Elf_Shdr &EHT,
uint64_t TableEntryOffset) const { … }
template <typename ET>
void PrinterContext<ET>::PrintOpcodes(const uint8_t *Entry,
size_t Length, off_t Offset) const { … }
template <typename ET>
void PrinterContext<ET>::PrintIndexTable(unsigned SectionIndex,
const Elf_Shdr *IT) const { … }
template <typename ET>
void PrinterContext<ET>::PrintUnwindInformation() const { … }
}
}
}
#endif