23 #ifndef __CLRX_DISASSEMBLER_H__ 24 #define __CLRX_DISASSEMBLER_H__ 70 DISASM_BUGGYFPLIT = 0x100,
81 struct GCNDisasmUtils;
87 friend struct GCNDisasmUtils;
89 typedef std::vector<size_t>::const_iterator
LabelIter;
92 typedef std::vector<std::pair<size_t, CString> >::const_iterator
NamedLabelIter;
103 typedef std::vector<std::pair<size_t, Relocation> >::const_iterator
RelocIter;
107 size_t labelStartOffset;
110 bool dontPrintLabelsAfterCode;
121 void writeLocation(
size_t pos);
123 bool writeRelocation(
size_t pos, RelocIter& relocIter);
129 void writeLabelsToPosition(
size_t pos, LabelIter& labelIter,
130 NamedLabelIter& namedLabelIter);
132 void writeLabelsToEnd(
size_t start, LabelIter labelIter, NamedLabelIter namedLabelIter);
136 size_t labelStartOffset = 0)
138 this->inputSize = inputSize;
140 this->startOffset = startOffset;
141 this->labelStartOffset = labelStartOffset;
144 void setDontPrintLabels(
bool after)
145 { dontPrintLabelsAfterCode = after; }
148 virtual void analyzeBeforeDisassemble() = 0;
151 void clearNumberedLabels();
153 void prepareLabelsAndRelocations();
155 void beforeDisassemble();
157 virtual void disassemble() = 0;
161 { namedLabels.push_back(std::make_pair(pos, name)); }
164 { namedLabels.push_back(std::make_pair(pos, name)); }
169 size_t index = relSymbols.size();
170 relSymbols.push_back(symName);
175 { relocations.push_back(std::make_pair(offset,
Relocation{symIndex, type, addend})); }
187 {
return namedLabels; }
190 {
return output.
flush(); }
193 Flags getFlags()
const;
195 void setFlags(
Flags flags);
204 friend struct GCNDisasmUtils;
212 void analyzeBeforeDisassemble();
316 size_t sectionOffset;
361 std::vector<GalliumDisasmKernelInput>
kernels;
380 std::unique_ptr<ISADisassembler> isaDisassembler;
390 std::ostream& output;
469 std::ostream& output,
Flags flags = 0,
cxuint llvmVersion = 0);
482 std::ostream& output,
Flags flags = 0);
494 { this->flags = flags; }
505 {
return amdCL2Input; }
509 {
return galliumInput; }
521 {
return disassembler.getFlags(); }
524 { disassembler.setFlags(flags); }
537 bool hsaLayout =
false);
541 bool hsaLayout =
false);
common definitions for assembler and disassembler
dump code
Definition: Disassembler.h:62
GalliumDisasmInput * getGalliumDisasmInputFromBinary(GPUDeviceType deviceType, const GalliumBinary &binary, cxuint llvmVersion)
prepare Gallium input from Gallium binary
non copyable and non movable base structure (class)
Definition: Utilities.h:46
int64_t addend
relocation addend
Definition: Disassembler.h:99
AmdDisasmInput * getAmdDisasmInputFromBinary32(const AmdMainGPUBinary32 &binary, Flags flags)
prepare AMD OpenCL input from AMD 32-bit binary
main class for
Definition: Disassembler.h:84
uint32_t Flags
type for declaring various flags
Definition: Utilities.h:100
internal relocation structure
Definition: Disassembler.h:95
void setInput(size_t inputSize, const cxbyte *input, size_t startOffset=0, size_t labelStartOffset=0)
set input code
Definition: Disassembler.h:135
fast and direct output buffer
Definition: InputOutput.h:350
AMD OpenCL 2.0 main binary for GPU for 32-bit mode.
Definition: AmdCL2Binaries.h:493
size_t offset
offset
Definition: Disassembler.h:251
BinaryFormat
binary format for Assembler/Disassembler
Definition: Commons.h:38
FastOutputBuffer output
output buffer
Definition: Disassembler.h:115
AMD OpenCL 2.0 binaries handling.
void clearRelocations()
clear all relocations
Definition: Disassembler.h:177
void addNamedLabel(size_t pos, CString &&name)
add named label to list (must be called before disassembly)
Definition: Disassembler.h:163
void setFlags(Flags flags)
set disassemblers flags
Definition: Disassembler.h:493
dump datas
Definition: Disassembler.h:64
std::vector< CString > relSymbols
symbols used by relocations
Definition: Disassembler.h:113
RelocType type
relocation type
Definition: Disassembler.h:98
const AmdCL2DisasmInput * getAmdCL2Input() const
get disassembler input
Definition: Disassembler.h:504
void addNamedLabel(size_t pos, const CString &name)
add named label to list (must be called before disassembly)
Definition: Disassembler.h:160
GCN architectur dissassembler.
Definition: Disassembler.h:199
std::vector< size_t >::const_iterator LabelIter
label iterator
Definition: Disassembler.h:89
use WAVESIZE32
Definition: Disassembler.h:74
AmdCL2DisasmInput * getAmdCL2DisasmInputFromBinary64(const AmdCL2MainGPUBinary64 &binary, cxuint driverVersion, bool hsaLayout=false)
prepare AMD OpenCL 2.0 input from AMD 64-bit binary
Definition: GalliumBinaries.h:294
std::vector< size_t > labels
list of local labels
Definition: Disassembler.h:111
an array class
Definition: Containers.h:41
std::vector< std::pair< size_t, Relocation > > relocations
relocations
Definition: Disassembler.h:114
ROCmDisasmInput * getROCmDisasmInputFromBinary(const ROCmBinary &binary)
prepare ROCM input from ROCM binary
print kernel configuration instead raw data
Definition: Disassembler.h:69
cxuint RelocType
relocation type
Definition: Commons.h:33
size_t inputSize
< start offset of labels
Definition: Disassembler.h:108
AmdDisasmInput * getAmdDisasmInputFromBinary64(const AmdMainGPUBinary64 &binary, Flags flags)
prepare AMD OpenCL input from AMD 64-bit binary
ROCm main binary for GPU for 64-bit mode.
Definition: ROCmBinaries.h:234
void flushOutput()
flush output
Definition: Disassembler.h:189
GalliumCompute binaries handling (only with LLVM 3.6)
print in comments float literals
Definition: Disassembler.h:66
const AmdDisasmInput * getAmdInput() const
get disassembler input
Definition: Disassembler.h:500
Definition: Disassembler.h:314
unsigned char cxbyte
unsigned byte
Definition: Config.h:229
kernel program info entry for Gallium binaries
Definition: GalliumBinaries.h:86
main namespace
Definition: AsmDefs.h:38
ROCmRegionType
ROCm region/symbol type.
Definition: ROCmBinaries.h:53
AMD main binary for GPU for 64-bit mode.
Definition: AmdBinaries.h:612
std::ostream & getOutput()
get output stream
Definition: Disassembler.h:515
Disassembler & disassembler
disassembler instance
Definition: Disassembler.h:105
const std::ostream & getOutput() const
get output stream
Definition: Disassembler.h:512
unsigned int cxuint
unsigned int
Definition: Config.h:237
print on left side hexadecimal code
Definition: Disassembler.h:67
AmdCL2DisasmInput * getAmdCL2DisasmInputFromBinary32(const AmdCL2MainGPUBinary32 &binary, cxuint driverVersion, bool hsaLayout=false)
prepare AMD OpenCL 2.0 input from AMD 32-bit binary
void addRelocation(size_t offset, RelocType type, size_t symIndex, int64_t addend)
add relocation
Definition: Disassembler.h:174
int64_t addend
addend
Definition: Disassembler.h:254
dump ATI CAL notes
Definition: Disassembler.h:65
const cxbyte * input
input code
Definition: Disassembler.h:109
const std::vector< size_t > & getLabels() const
get numbered labels
Definition: Disassembler.h:183
std::vector< std::pair< size_t, CString > > namedLabels
named labels
Definition: Disassembler.h:112
std::vector< std::pair< size_t, CString > >::const_iterator NamedLabelIter
named label iterator
Definition: Disassembler.h:92
size_t startOffset
start offset
Definition: Disassembler.h:106
print code position
Definition: Disassembler.h:71
GPUDeviceType
type of GPU device
Definition: GPUId.h:51
Flags getFlags() const
get disassemblers flags
Definition: Disassembler.h:520
virtual ~DisasmException() noexcept=default
destructor
const GalliumDisasmInput * getGalliumInput() const
get disassembler input
Definition: Disassembler.h:508
cxuint symbol
symbol
Definition: Disassembler.h:253
utilities for other libraries and programs
std::string message
message
Definition: Utilities.h:64
print HSA configuration
Definition: Disassembler.h:72
AMD main binary for GPU for 32-bit mode.
Definition: AmdBinaries.h:568
exception class
Definition: Utilities.h:61
const std::vector< std::pair< size_t, CString > > & getNamedLabels() const
get named labels
Definition: Disassembler.h:186
print in HSA layout (like Gallium or ROCm)
Definition: Disassembler.h:73
RelocType type
relocation type
Definition: Disassembler.h:252
void setFlags(Flags flags)
set disassemblers flags
Definition: Disassembler.h:523
size_t symbol
symbol index
Definition: Disassembler.h:97
Flags getFlags() const
get disassemblers flags
Definition: Disassembler.h:490
void flush()
write output buffer
Definition: InputOutput.h:379
dump metadatas
Definition: Disassembler.h:63
DisasmException()=default
empty constructor
std::vector< std::pair< size_t, Relocation > >::const_iterator RelocIter
relocation iterator
Definition: Disassembler.h:103
Definition: ROCmBinaries.h:204
AMD OpenCL 2.0 main binary for GPU for 64-bit mode.
Definition: AmdCL2Binaries.h:529
size_t addRelSymbol(const CString &symName)
add symbol to relocations
Definition: Disassembler.h:167
disassembler class
Definition: Disassembler.h:376
relocation with addend
Definition: Disassembler.h:249
Disassembler exception class.
Definition: Disassembler.h:47
simple C-string container
Definition: CString.h:38