23 #ifndef __CLRX_DISASSEMBLER_H__ 24 #define __CLRX_DISASSEMBLER_H__ 58 DISASM_BUGGYFPLIT = 0x100,
66 struct GCNDisasmUtils;
72 friend struct GCNDisasmUtils;
74 typedef std::vector<size_t>::const_iterator
LabelIter;
77 typedef std::vector<std::pair<size_t, CString> >::const_iterator
NamedLabelIter;
88 typedef std::vector<std::pair<size_t, Relocation> >::const_iterator
RelocIter;
92 size_t labelStartOffset;
95 bool dontPrintLabelsAfterCode;
115 NamedLabelIter& namedLabelIter);
117 void writeLabelsToEnd(
size_t start, LabelIter labelIter, NamedLabelIter namedLabelIter);
121 size_t labelStartOffset = 0)
126 this->labelStartOffset = labelStartOffset;
129 void setDontPrintLabels(
bool after)
130 { dontPrintLabelsAfterCode = after; }
146 { namedLabels.push_back(std::make_pair(pos, name)); }
149 { namedLabels.push_back(std::make_pair(pos, name)); }
154 size_t index = relSymbols.size();
155 relSymbols.push_back(symName);
160 { relocations.push_back(std::make_pair(offset,
Relocation{symIndex,
type, addend})); }
175 {
return output.
flush(); }
184 friend struct GCNDisasmUtils;
330 std::vector<GalliumDisasmKernelInput>
kernels;
348 std::unique_ptr<ISADisassembler> isaDisassembler;
437 std::ostream& output,
Flags flags = 0,
cxuint llvmVersion = 0);
450 std::ostream& output,
Flags flags = 0);
462 { this->flags = flags; }
473 {
return amdCL2Input; }
477 {
return galliumInput; }
common definitions for assembler and disassembler
void beforeDisassemble()
makes some things before disassemblying
non copyable and non movable base structure (class)
Definition: Utilities.h:43
int64_t addend
relocation addend
Definition: Disassembler.h:84
print code position
Definition: Disassembler.h:59
main class for
Definition: Disassembler.h:69
uint32_t Flags
type for declaring various flags
Definition: Utilities.h:97
internal relocation structure
Definition: Disassembler.h:80
void setInput(size_t inputSize, const cxbyte *input, size_t startOffset=0, size_t labelStartOffset=0)
set input code
Definition: Disassembler.h:120
virtual void analyzeBeforeDisassemble()=0
analyze code before disassemblying
void clearNumberedLabels()
first part before disassemble - clear numbered labels
fast and direct output buffer
Definition: InputOutput.h:350
AMD OpenCL 2.0 main binary for GPU for 32-bit mode.
Definition: AmdCL2Binaries.h:478
size_t offset
offset
Definition: Disassembler.h:231
BinaryFormat
binary for Disassembler
Definition: Commons.h:33
print kernel configuration instead raw data
Definition: Disassembler.h:57
FastOutputBuffer output
output buffer
Definition: Disassembler.h:100
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:162
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:148
void setFlags(Flags flags)
get disassemblers flags
Definition: Disassembler.h:461
std::vector< CString > relSymbols
symbols used by relocations
Definition: Disassembler.h:98
RelocType type
relocation type
Definition: Disassembler.h:83
const AmdCL2DisasmInput * getAmdCL2Input() const
get disassembler input
Definition: Disassembler.h:472
void addNamedLabel(size_t pos, const CString &name)
add named label to list (must be called before disassembly)
Definition: Disassembler.h:145
ISADisassembler(Disassembler &disassembler, cxuint outBufSize=600)
constructor
GCN architectur dissassembler.
Definition: Disassembler.h:179
dump code
Definition: Disassembler.h:50
std::vector< size_t >::const_iterator LabelIter
label iterator
Definition: Disassembler.h:74
Definition: GalliumBinaries.h:246
std::vector< size_t > labels
list of local labels
Definition: Disassembler.h:96
std::vector< std::pair< size_t, Relocation > > relocations
relocations
Definition: Disassembler.h:99
virtual void disassemble()=0
disassembles input code
cxuint RelocType
relocation type
Definition: Commons.h:33
dump metadatas
Definition: Disassembler.h:51
void prepareLabelsAndRelocations()
last part before disassemble - prepare labels (sorting)
size_t inputSize
< start offset of labels
Definition: Disassembler.h:93
dump datas
Definition: Disassembler.h:52
ROCm main binary for GPU for 64-bit mode.
Definition: ROCmBinaries.h:70
print in comments float literals
Definition: Disassembler.h:54
void flushOutput()
flush output
Definition: Disassembler.h:174
GalliumCompute binaries handling (only with LLVM 3.6)
const AmdDisasmInput * getAmdInput() const
get disassembler input
Definition: Disassembler.h:468
unsigned char cxbyte
unsigned byte
Definition: Config.h:213
print on left side hexadecimal code
Definition: Disassembler.h:55
kernel program info entry for Gallium binaries
Definition: GalliumBinaries.h:85
main namespace
Definition: AsmDefs.h:38
ROCmRegionType
ROCm region/symbol type.
Definition: ROCmBinaries.h:50
AMD main binary for GPU for 64-bit mode.
Definition: AmdBinaries.h:611
std::ostream & getOutput()
get output stream
Definition: Disassembler.h:483
Disassembler & disassembler
disassembler instance
Definition: Disassembler.h:90
const std::ostream & getOutput() const
get output stream
Definition: Disassembler.h:480
unsigned int cxuint
unsigned int
Definition: Config.h:221
dump ATI CAL notes
Definition: Disassembler.h:53
void addRelocation(size_t offset, RelocType type, size_t symIndex, int64_t addend)
add relocation
Definition: Disassembler.h:159
void writeLocation(size_t pos)
write location in the code
int64_t addend
addend
Definition: Disassembler.h:234
const cxbyte * input
input code
Definition: Disassembler.h:94
bool writeRelocation(size_t pos, RelocIter &relocIter)
write relocation to current place in instruction
print HSA configuration
Definition: Disassembler.h:60
const std::vector< size_t > & getLabels() const
get numbered labels
Definition: Disassembler.h:168
std::vector< std::pair< size_t, CString > > namedLabels
named labels
Definition: Disassembler.h:97
std::vector< std::pair< size_t, CString > >::const_iterator NamedLabelIter
named label iterator
Definition: Disassembler.h:77
size_t startOffset
start offset
Definition: Disassembler.h:91
GPUDeviceType
type of GPU device
Definition: GPUId.h:38
const GalliumDisasmInput * getGalliumInput() const
get disassembler input
Definition: Disassembler.h:476
cxuint symbol
symbol
Definition: Disassembler.h:233
utilities for other libraries and programs
AMD main binary for GPU for 32-bit mode.
Definition: AmdBinaries.h:567
const std::vector< std::pair< size_t, CString > > & getNamedLabels() const
get named labels
Definition: Disassembler.h:171
RelocType type
relocation type
Definition: Disassembler.h:232
size_t symbol
symbol index
Definition: Disassembler.h:82
Flags getFlags() const
get disassemblers flags
Definition: Disassembler.h:458
void flush()
write output buffer
Definition: InputOutput.h:379
std::vector< std::pair< size_t, Relocation > >::const_iterator RelocIter
relocation iterator
Definition: Disassembler.h:88
AMD OpenCL 2.0 main binary for GPU for 64-bit mode.
Definition: AmdCL2Binaries.h:514
size_t addRelSymbol(const CString &symName)
add symbol to relocations
Definition: Disassembler.h:152
disassembler class
Definition: Disassembler.h:344
relocation with addend
Definition: Disassembler.h:229
simple C-string container
Definition: CString.h:38