23 #ifndef __CLRX_DISASSEMBLER_H__
24 #define __CLRX_DISASSEMBLER_H__
26 #include <CLRX/Config.h>
72 typedef std::vector<size_t>::const_iterator
LabelIter;
75 typedef std::vector<std::pair<size_t, Relocation> >::const_iterator
RelocIter;
78 typedef std::vector<std::pair<size_t, CString> >::const_iterator
NamedLabelIter;
118 {
namedLabels.push_back(std::make_pair(pos, name)); }
121 {
namedLabels.push_back(std::make_pair(pos, name)); }
141 struct GCNDisasmUtils;
149 friend struct GCNDisasmUtils;
252 std::vector<GalliumDisasmKernelInput>
kernels;
270 std::unique_ptr<ISADisassembler> isaDisassembler;
279 std::ostream& output;
332 std::ostream& output,
Flags flags = 0);
345 std::ostream& output,
Flags flags = 0);
357 { this->flags = flags; }
368 {
return amdCL2Input; }
372 {
return galliumInput; }
Disassembler(const AmdMainGPUBinary32 &binary, std::ostream &output, Flags flags=0)
constructor for 32-bit GPU binary
~GCNDisassembler()
destructor
common definitions for assembler and disassembler
dump datas
Definition: Disassembler.h:51
non copyable and non movable base structure (class)
Definition: Utilities.h:43
void beforeDisassemble()
routine called before main disassemblying
int64_t addend
relocation addend
Definition: Disassembler.h:69
main class for
Definition: Disassembler.h:61
uint32_t Flags
type for declaring various flags
Definition: Utilities.h:97
void disassemble()
disassembles input
internal relocation structure
Definition: Disassembler.h:65
dump code
Definition: Disassembler.h:49
void setInput(size_t inputSize, const cxbyte *input)
set input code
Definition: Disassembler.h:105
fast and direct output buffer
Definition: InputOutput.h:350
size_t offset
offset
Definition: Disassembler.h:196
BinaryFormat
binary for Disassembler
Definition: Commons.h:33
FastOutputBuffer output
output buffer
Definition: Disassembler.h:87
AMD OpenCL 2.0 binaries handling.
void writeLabelsToPosition(size_t pos, LabelIter &labelIter, NamedLabelIter &namedLabelIter)
write all labels before specified position
void clearRelocations()
clear all relocations
Definition: Disassembler.h:134
void writeLabelsToEnd(size_t start, LabelIter labelIter, NamedLabelIter namedLabelIter)
write all labels to end
void addNamedLabel(size_t pos, CString &&name)
add named label to list (must be called before disassembly)
Definition: Disassembler.h:120
void setFlags(Flags flags)
get disassemblers flags
Definition: Disassembler.h:356
std::vector< CString > relSymbols
symbols used by relocations
Definition: Disassembler.h:85
RelocType type
relocation type
Definition: Disassembler.h:68
const AmdCL2DisasmInput * getAmdCL2Input() const
get disassembler input
Definition: Disassembler.h:367
void addNamedLabel(size_t pos, const CString &name)
add named label to list (must be called before disassembly)
Definition: Disassembler.h:117
GCN architectur dissassembler.
Definition: Disassembler.h:144
std::vector< size_t >::const_iterator LabelIter
label iterator
Definition: Disassembler.h:72
Definition: GalliumBinaries.h:235
std::vector< size_t > labels
list of local labels
Definition: Disassembler.h:83
std::vector< std::pair< size_t, Relocation > > relocations
relocations
Definition: Disassembler.h:86
virtual void beforeDisassemble()=0
makes some things before disassemblying
virtual void disassemble()=0
disassembles input code
cxuint RelocType
relocation type
Definition: Commons.h:32
size_t inputSize
size of input
Definition: Disassembler.h:81
AMD OpenCL 2.0 main binary for GPU for 64-bit mode.
Definition: AmdCL2Binaries.h:314
GalliumCompute binaries handling (only with LLVM 3.6)
const AmdDisasmInput * getAmdInput() const
get disassembler input
Definition: Disassembler.h:363
GCNDisassembler(Disassembler &disassembler)
constructor
ISADisassembler(Disassembler &disassembler, cxuint outBufSize=500)
constructor
dump metadatas
Definition: Disassembler.h:50
AMD main binary for GPU for 64-bit mode.
Definition: AmdBinaries.h:595
std::ostream & getOutput()
get output stream
Definition: Disassembler.h:378
Disassembler & disassembler
disassembler instance
Definition: Disassembler.h:80
const std::ostream & getOutput() const
get output stream
Definition: Disassembler.h:375
void addRelocation(size_t offset, RelocType type, size_t symIndex, int64_t addend)
add relocation
Definition: Disassembler.h:131
void writeLocation(size_t pos)
write location in the code
int64_t addend
addend
Definition: Disassembler.h:199
const cxbyte * input
input code
Definition: Disassembler.h:82
bool writeRelocation(size_t pos, RelocIter &relocIter)
write relocation to current place in instruction
std::vector< std::pair< size_t, CString > > namedLabels
named labels
Definition: Disassembler.h:84
std::vector< std::pair< size_t, CString > >::const_iterator NamedLabelIter
named label iterator
Definition: Disassembler.h:78
GPUDeviceType
type of GPU device
Definition: GPUId.h:38
print in comments float literals
Definition: Disassembler.h:53
const GalliumDisasmInput * getGalliumInput() const
get disassembler input
Definition: Disassembler.h:371
cxuint symbol
symbol
Definition: Disassembler.h:198
all disassembler flags (without config)
Definition: Disassembler.h:57
dump ATI CAL notes
Definition: Disassembler.h:52
utilities for other libraries and programs
AMD main binary for GPU for 32-bit mode.
Definition: AmdBinaries.h:554
RelocType type
relocation type
Definition: Disassembler.h:197
GPUDeviceType getDeviceType() const
get deviceType
size_t symbol
symbol index
Definition: Disassembler.h:67
Flags getFlags() const
get disassemblers flags
Definition: Disassembler.h:353
void disassemble()
disassemble code
std::vector< std::pair< size_t, Relocation > >::const_iterator RelocIter
relocation iterator
Definition: Disassembler.h:75
size_t addRelSymbol(const CString &symName)
add symbol to relocations
Definition: Disassembler.h:124
disassembler class
Definition: Disassembler.h:266
relocation with addend
Definition: Disassembler.h:194
print on left side hexadecimal code
Definition: Disassembler.h:54
simple C-string container
Definition: CString.h:38
print kernel configuration instead raw data
Definition: Disassembler.h:56