CLRX  1
An unofficial OpenCL extensions designed for Radeon GPUs
Disassembler.h
Go to the documentation of this file.
1 /*
2  * CLRadeonExtender - Unofficial OpenCL Radeon Extensions Library
3  * Copyright (C) 2014-2018 Mateusz Szpakowski
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2.1 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18  */
23 #ifndef __CLRX_DISASSEMBLER_H__
24 #define __CLRX_DISASSEMBLER_H__
25 
26 #include <CLRX/Config.h>
27 #include <string>
28 #include <istream>
29 #include <ostream>
30 #include <vector>
31 #include <utility>
32 #include <memory>
37 #include <CLRX/amdbin/AmdBinGen.h>
38 #include <CLRX/amdasm/Commons.h>
39 #include <CLRX/utils/Utilities.h>
40 #include <CLRX/utils/InputOutput.h>
41 
43 namespace CLRX
44 {
45 
48 {
49 public:
51  DisasmException() = default;
53  explicit DisasmException(const std::string& message);
55  virtual ~DisasmException() noexcept = default;
56 };
57 
58 class Disassembler;
59 
60 enum: Flags
61 {
68  DISASM_SETUP = 64,
69  DISASM_CONFIG = 128,
70  DISASM_BUGGYFPLIT = 0x100,
71  DISASM_CODEPOS = 0x200,
72  DISASM_HSACONFIG = 0x400,
73  DISASM_HSALAYOUT = 0x800,
74 
76  DISASM_ALL = FLAGS_ALL&(~(DISASM_CONFIG|DISASM_BUGGYFPLIT|
78 };
79 
80 struct GCNDisasmUtils;
81 
84 {
85 private:
86  friend struct GCNDisasmUtils; // INTERNAL LOGIC
87 public:
88  typedef std::vector<size_t>::const_iterator LabelIter;
89 
91  typedef std::vector<std::pair<size_t, CString> >::const_iterator NamedLabelIter;
92 protected:
94  struct Relocation
95  {
96  size_t symbol;
98  int64_t addend;
99  };
100 
102  typedef std::vector<std::pair<size_t, Relocation> >::const_iterator RelocIter;
103 
105  size_t startOffset;
106  size_t labelStartOffset;
107  size_t inputSize;
108  const cxbyte* input;
109  bool dontPrintLabelsAfterCode;
110  std::vector<size_t> labels;
111  std::vector<std::pair<size_t, CString> > namedLabels;
112  std::vector<CString> relSymbols;
113  std::vector<std::pair<size_t, Relocation> > relocations;
115 
117  explicit ISADisassembler(Disassembler& disassembler, cxuint outBufSize = 600);
118 
120  void writeLocation(size_t pos);
122  bool writeRelocation(size_t pos, RelocIter& relocIter);
123 
124 public:
125  virtual ~ISADisassembler();
126 
128  void writeLabelsToPosition(size_t pos, LabelIter& labelIter,
129  NamedLabelIter& namedLabelIter);
131  void writeLabelsToEnd(size_t start, LabelIter labelIter, NamedLabelIter namedLabelIter);
132 
134  void setInput(size_t inputSize, const cxbyte* input, size_t startOffset = 0,
135  size_t labelStartOffset = 0)
136  {
137  this->inputSize = inputSize;
138  this->input = input;
139  this->startOffset = startOffset;
140  this->labelStartOffset = labelStartOffset;
141  }
142 
143  void setDontPrintLabels(bool after)
144  { dontPrintLabelsAfterCode = after; }
145 
147  virtual void analyzeBeforeDisassemble() = 0;
148 
150  void clearNumberedLabels();
152  void prepareLabelsAndRelocations();
154  void beforeDisassemble();
156  virtual void disassemble() = 0;
157 
159  void addNamedLabel(size_t pos, const CString& name)
160  { namedLabels.push_back(std::make_pair(pos, name)); }
162  void addNamedLabel(size_t pos, CString&& name)
163  { namedLabels.push_back(std::make_pair(pos, name)); }
164 
166  size_t addRelSymbol(const CString& symName)
167  {
168  size_t index = relSymbols.size();
169  relSymbols.push_back(symName);
170  return index;
171  }
173  void addRelocation(size_t offset, RelocType type, size_t symIndex, int64_t addend)
174  { relocations.push_back(std::make_pair(offset, Relocation{symIndex, type, addend})); }
177  {
178  relSymbols.clear();
179  relocations.clear();
180  }
182  const std::vector<size_t>& getLabels() const
183  { return labels; }
185  const std::vector<std::pair<size_t, CString> >& getNamedLabels() const
186  { return namedLabels; }
188  void flushOutput()
189  { return output.flush(); }
190 };
191 
194 {
195 private:
196  bool instrOutOfCode;
197 
198  friend struct GCNDisasmUtils; // INTERNAL LOGIC
199 public:
201  GCNDisassembler(Disassembler& disassembler);
203  ~GCNDisassembler();
204 
206  void analyzeBeforeDisassemble();
208  void disassemble();
209 };
210 
212 
215 {
217  size_t metadataSize;
218  const char* metadata;
219  size_t headerSize;
220  const cxbyte* header;
221  std::vector<CALNoteInput> calNotes;
222  size_t dataSize;
223  const cxbyte* data;
224  size_t codeSize;
225  const cxbyte* code;
226 };
227 
229 
232 {
234  bool is64BitMode;
237  size_t globalDataSize;
239  std::vector<AmdDisasmKernelInput> kernels;
240 };
241 
244 {
245  size_t offset;
248  int64_t addend;
249 };
250 
252 
255 {
257  size_t metadataSize;
258  const cxbyte* metadata;
261  size_t setupSize;
262  const cxbyte* setup;
263  size_t stubSize;
264  const cxbyte* stub;
265  std::vector<AmdCL2RelaEntry> textRelocs;
266  size_t codeSize;
267  const cxbyte* code;
268 };
269 
271 
274 {
276  uint32_t archMinor;
277  uint32_t archStepping;
278  bool is64BitMode;
282  size_t globalDataSize;
284  size_t rwDataSize;
285  const cxbyte* rwData;
286  size_t bssAlignment;
287  size_t bssSize;
290  size_t codeSize;
291  const cxbyte* code;
292  std::vector<AmdCL2RelaEntry> textRelocs;
293 
295  std::vector<std::pair<size_t, size_t> > samplerRelocs;
296  std::vector<AmdCL2DisasmKernelInput> kernels;
297 };
298 
301 {
303  const cxbyte* setup;
304  size_t codeSize;
305  size_t offset;
306 };
307 
310 {
312  size_t size;
313  size_t offset;
315 };
316 
319 {
321  uint32_t archMinor;
322  uint32_t archStepping;
323  uint32_t eflags;
325  std::vector<ROCmDisasmRegionInput> regions;
326  size_t codeSize;
327  const cxbyte* code;
328  size_t globalDataSize;
331  size_t metadataSize;
332  const char* metadata;
334 };
335 
338 {
340  GalliumProgInfoEntry progInfo[5];
341  uint32_t offset;
342  std::vector<GalliumArgInfo> argInfos;
343 };
344 
347 {
349  bool is64BitMode;
350  bool isLLVM390;
351  bool isMesa170;
352  bool isAMDHSA;
353  size_t globalDataSize;
355  std::vector<GalliumDisasmKernelInput> kernels;
356  size_t codeSize;
357  const cxbyte* code;
358  std::vector<GalliumScratchReloc> scratchRelocs;
359 };
360 
363 {
365  size_t codeSize;
366  const cxbyte* code;
367 };
368 
371 {
372 private:
373  friend class ISADisassembler;
374  std::unique_ptr<ISADisassembler> isaDisassembler;
375  bool fromBinary;
376  BinaryFormat binaryFormat;
377  union {
378  const AmdDisasmInput* amdInput;
379  const AmdCL2DisasmInput* amdCL2Input;
380  const GalliumDisasmInput* galliumInput;
381  const ROCmDisasmInput* rocmInput;
382  const RawCodeInput* rawInput;
383  };
384  std::ostream& output;
385  Flags flags;
386  size_t sectionCount;
387 public:
389 
394  Disassembler(const AmdMainGPUBinary32& binary, std::ostream& output,
395  Flags flags = 0);
397 
402  Disassembler(const AmdMainGPUBinary64& binary, std::ostream& output,
403  Flags flags = 0);
405 
411  Disassembler(const AmdCL2MainGPUBinary32& binary, std::ostream& output,
412  Flags flags = 0, cxuint driverVersion = 0);
414 
420  Disassembler(const AmdCL2MainGPUBinary64& binary, std::ostream& output,
421  Flags flags = 0, cxuint driverVersion = 0);
423 
428  Disassembler(const ROCmBinary& binary, std::ostream& output, Flags flags = 0);
430 
435  Disassembler(const AmdDisasmInput* disasmInput, std::ostream& output,
436  Flags flags = 0);
438 
443  Disassembler(const AmdCL2DisasmInput* disasmInput, std::ostream& output,
444  Flags flags = 0);
446 
451  Disassembler(const ROCmDisasmInput* disasmInput, std::ostream& output,
452  Flags flags = 0);
453 
455 
462  Disassembler(GPUDeviceType deviceType, const GalliumBinary& binary,
463  std::ostream& output, Flags flags = 0, cxuint llvmVersion = 0);
464 
466 
471  Disassembler(const GalliumDisasmInput* disasmInput, std::ostream& output,
472  Flags flags = 0);
473 
475  Disassembler(GPUDeviceType deviceType, size_t rawCodeSize, const cxbyte* rawCode,
476  std::ostream& output, Flags flags = 0);
477 
478  ~Disassembler();
479 
481  void disassemble();
482 
484  Flags getFlags() const
485  { return flags; }
487  void setFlags(Flags flags)
488  { this->flags = flags; }
489 
491  GPUDeviceType getDeviceType() const;
492 
495  { return amdInput; }
496 
499  { return amdCL2Input; }
500 
503  { return galliumInput; }
504 
506  const std::ostream& getOutput() const
507  { return output; }
509  std::ostream& getOutput()
510  { return output; }
511 };
512 
513 // routines to get binary config inputs
514 
517  const AmdMainGPUBinary32& binary, Flags flags);
520  const AmdMainGPUBinary64& binary, Flags flags);
523  const AmdCL2MainGPUBinary32& binary, cxuint driverVersion,
524  bool hsaLayout = false);
527  const AmdCL2MainGPUBinary64& binary, cxuint driverVersion,
528  bool hsaLayout = false);
531  const ROCmBinary& binary);
534  GPUDeviceType deviceType, const GalliumBinary& binary, cxuint llvmVersion);
535 
536 };
537 
538 #endif
CString target
LLVM target triple.
Definition: Disassembler.h:330
common definitions for assembler and disassembler
const cxbyte * globalData
global data
Definition: Disassembler.h:329
size_t metadataSize
metadata size
Definition: Disassembler.h:257
GalliumDisasmInput * getGalliumDisasmInputFromBinary(GPUDeviceType deviceType, const GalliumBinary &binary, cxuint llvmVersion)
prepare Gallium input from Gallium binary
const cxbyte * code
code
Definition: Disassembler.h:357
non copyable and non movable base structure (class)
Definition: Utilities.h:46
const cxbyte * header
kernel header size
Definition: Disassembler.h:220
size_t rwDataSize
global rw data size
Definition: Disassembler.h:284
bool is64BitMode
true if 64-bit mode of addressing
Definition: Disassembler.h:278
uint32_t archMinor
GPU arch minor.
Definition: Disassembler.h:321
int64_t addend
relocation addend
Definition: Disassembler.h:98
disasm kernel info structure (Gallium binaries)
Definition: Disassembler.h:337
AmdDisasmInput * getAmdDisasmInputFromBinary32(const AmdMainGPUBinary32 &binary, Flags flags)
prepare AMD OpenCL input from AMD 32-bit binary
main class for
Definition: Disassembler.h:83
print on left side hexadecimal code
Definition: Disassembler.h:67
uint32_t Flags
type for declaring various flags
Definition: Utilities.h:100
CString kernelName
kernel&#39;s name
Definition: Disassembler.h:339
internal relocation structure
Definition: Disassembler.h:94
void setInput(size_t inputSize, const cxbyte *input, size_t startOffset=0, size_t labelStartOffset=0)
set input code
Definition: Disassembler.h:134
uint32_t archStepping
GPU arch stepping.
Definition: Disassembler.h:277
size_t isaMetadataSize
metadata size
Definition: Disassembler.h:259
size_t dataSize
data (from inner binary) size
Definition: Disassembler.h:222
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:245
BinaryFormat
binary format for Assembler/Disassembler
Definition: Commons.h:38
FastOutputBuffer output
output buffer
Definition: Disassembler.h:114
print in HSA layout (like Gallium or ROCm)
Definition: Disassembler.h:73
const cxbyte * code
code
Definition: Disassembler.h:366
size_t setupSize
data (from inner binary) size
Definition: Disassembler.h:261
size_t codeSize
code size
Definition: Disassembler.h:290
AMD OpenCL 2.0 binaries handling.
CString kernelName
kernel name
Definition: Disassembler.h:302
size_t codeSize
code size
Definition: Disassembler.h:356
CString driverInfo
driver info (for AMD Catalyst drivers)
Definition: Disassembler.h:235
size_t globalDataSize
global (constants for kernels) data size
Definition: Disassembler.h:237
CString aclVersionString
acl version string
Definition: Disassembler.h:281
const cxbyte * data
data from inner binary
Definition: Disassembler.h:223
void clearRelocations()
clear all relocations
Definition: Disassembler.h:176
void addNamedLabel(size_t pos, CString &&name)
add named label to list (must be called before disassembly)
Definition: Disassembler.h:162
void setFlags(Flags flags)
get disassemblers flags
Definition: Disassembler.h:487
disasm ROCm region
Definition: Disassembler.h:309
std::vector< CString > relSymbols
symbols used by relocations
Definition: Disassembler.h:112
RelocType type
relocation type
Definition: Disassembler.h:97
const AmdCL2DisasmInput * getAmdCL2Input() const
get disassembler input
Definition: Disassembler.h:498
void addNamedLabel(size_t pos, const CString &name)
add named label to list (must be called before disassembly)
Definition: Disassembler.h:159
GPUDeviceType deviceType
GPU device type.
Definition: Disassembler.h:320
const char * metadata
kernel&#39;s metadata
Definition: Disassembler.h:218
GCN architectur dissassembler.
Definition: Disassembler.h:193
const cxbyte * globalData
global (constants for kernels) data
Definition: Disassembler.h:283
size_t bssSize
size of global bss section
Definition: Disassembler.h:287
std::vector< GalliumDisasmKernelInput > kernels
list of input kernels
Definition: Disassembler.h:355
std::vector< size_t >::const_iterator LabelIter
label iterator
Definition: Disassembler.h:88
std::vector< std::pair< size_t, size_t > > samplerRelocs
sampler relocations
Definition: Disassembler.h:295
ROCm binaries handling.
Array< std::pair< CString, size_t > > gotSymbols
GOT symbols names.
Definition: Disassembler.h:333
GPUDeviceType deviceType
GPU device type.
Definition: Disassembler.h:364
bool isAMDHSA
if AMDHSA (LLVM 4.0)
Definition: Disassembler.h:352
AmdCL2DisasmInput * getAmdCL2DisasmInputFromBinary64(const AmdCL2MainGPUBinary64 &binary, cxuint driverVersion, bool hsaLayout=false)
prepare AMD OpenCL 2.0 input from AMD 64-bit binary
whole disassembler input (for Gallium driver GPU binaries)
Definition: Disassembler.h:346
whole disassembler input (for AMD Catalyst driver GPU binaries)
Definition: Disassembler.h:231
Definition: GalliumBinaries.h:294
std::vector< size_t > labels
list of local labels
Definition: Disassembler.h:110
an array class
Definition: Containers.h:41
CString kernelName
kernel name
Definition: Disassembler.h:256
std::vector< std::pair< size_t, Relocation > > relocations
relocations
Definition: Disassembler.h:113
Configuration header.
ROCmDisasmInput * getROCmDisasmInputFromBinary(const ROCmBinary &binary)
prepare ROCM input from ROCM binary
size_t codeSize
code size
Definition: Disassembler.h:326
cxuint RelocType
relocation type
Definition: Commons.h:33
const cxbyte * rwData
global rw data data
Definition: Disassembler.h:285
const cxbyte * metadata
kernel&#39;s metadata
Definition: Disassembler.h:258
std::vector< CALNoteInput > calNotes
ATI CAL notes.
Definition: Disassembler.h:221
const cxbyte * setup
setup
Definition: Disassembler.h:303
std::vector< AmdCL2RelaEntry > textRelocs
text relocations
Definition: Disassembler.h:292
size_t inputSize
< start offset of labels
Definition: Disassembler.h:107
const cxbyte * stub
data from inner binary
Definition: Disassembler.h:264
const cxbyte * globalData
global (constants for kernels) data
Definition: Disassembler.h:238
AmdDisasmInput * getAmdDisasmInputFromBinary64(const AmdMainGPUBinary64 &binary, Flags flags)
prepare AMD OpenCL input from AMD 64-bit binary
const cxbyte * isaMetadata
kernel&#39;s metadata
Definition: Disassembler.h:260
ROCm main binary for GPU for 64-bit mode.
Definition: ROCmBinaries.h:201
bool is64BitMode
true if 64-bit mode of addressing
Definition: Disassembler.h:234
CString compileOptions
compile options which used by in clBuildProgram
Definition: Disassembler.h:280
const char * metadata
metadata
Definition: Disassembler.h:332
bool isMesa170
if >=Mesa3D 17.0
Definition: Disassembler.h:351
GPUDeviceType deviceType
GPU device type.
Definition: Disassembler.h:275
void flushOutput()
flush output
Definition: Disassembler.h:188
size_t metadataSize
metadata size
Definition: Disassembler.h:217
GalliumCompute binaries handling (only with LLVM 3.6)
const cxbyte * code
code
Definition: Disassembler.h:291
input output utilities
const AmdDisasmInput * getAmdInput() const
get disassembler input
Definition: Disassembler.h:494
GPUDeviceType deviceType
GPU device type.
Definition: Disassembler.h:348
AMD binaries handling.
unsigned char cxbyte
unsigned byte
Definition: Config.h:229
print HSA configuration
Definition: Disassembler.h:72
size_t size
region size
Definition: Disassembler.h:312
const cxbyte * globalData
global (constants for kernels) data
Definition: Disassembler.h:354
cxuint driverVersion
driver version
Definition: Disassembler.h:279
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
disasm ROCm input
Definition: Disassembler.h:318
AMD main binary for GPU for 64-bit mode.
Definition: AmdBinaries.h:612
std::ostream & getOutput()
get output stream
Definition: Disassembler.h:509
print code position
Definition: Disassembler.h:71
Disassembler & disassembler
disassembler instance
Definition: Disassembler.h:104
const cxbyte * code
code of kernel
Definition: Disassembler.h:225
const std::ostream & getOutput() const
get output stream
Definition: Disassembler.h:506
unsigned int cxuint
unsigned int
Definition: Config.h:237
std::vector< AmdDisasmKernelInput > kernels
kernel inputs
Definition: Disassembler.h:239
const cxbyte * code
code of kernel
Definition: Disassembler.h:267
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:173
size_t codeSize
size of code of kernel
Definition: Disassembler.h:224
size_t codeSize
code size
Definition: Disassembler.h:304
size_t offset
region offset in code
Definition: Disassembler.h:313
int64_t addend
addend
Definition: Disassembler.h:248
CString regionName
region name
Definition: Disassembler.h:311
const cxbyte * input
input code
Definition: Disassembler.h:108
const std::vector< size_t > & getLabels() const
get numbered labels
Definition: Disassembler.h:182
std::vector< std::pair< size_t, CString > > namedLabels
named labels
Definition: Disassembler.h:111
std::vector< std::pair< size_t, CString > >::const_iterator NamedLabelIter
named label iterator
Definition: Disassembler.h:91
size_t startOffset
start offset
Definition: Disassembler.h:105
bool isLLVM390
if >=LLVM3.9
Definition: Disassembler.h:350
GPUDeviceType
type of GPU device
Definition: GPUId.h:51
virtual ~DisasmException() noexcept=default
destructor
const GalliumDisasmInput * getGalliumInput() const
get disassembler input
Definition: Disassembler.h:502
cxuint symbol
symbol
Definition: Disassembler.h:247
dump datas
Definition: Disassembler.h:64
size_t bssAlignment
alignment of global bss section
Definition: Disassembler.h:286
bool is64BitMode
true if 64-bit mode of addressing
Definition: Disassembler.h:349
size_t headerSize
kernel header size
Definition: Disassembler.h:219
print in comments float literals
Definition: Disassembler.h:66
utilities for other libraries and programs
dump ATI CAL notes
Definition: Disassembler.h:65
size_t offset
kernel offset
Definition: Disassembler.h:305
std::string message
message
Definition: Utilities.h:64
AMD main binary for GPU for 32-bit mode.
Definition: AmdBinaries.h:568
CString kernelName
kernel name
Definition: Disassembler.h:216
exception class
Definition: Utilities.h:61
const std::vector< std::pair< size_t, CString > > & getNamedLabels() const
get named labels
Definition: Disassembler.h:185
AMD binaries generator.
size_t globalDataSize
global data size
Definition: Disassembler.h:328
RelocType type
relocation type
Definition: Disassembler.h:246
print kernel configuration instead raw data
Definition: Disassembler.h:69
whole disassembler input (for AMD Catalyst driver GPU binaries)
Definition: Disassembler.h:273
size_t stubSize
data (from inner binary) size
Definition: Disassembler.h:263
ROCmRegionType type
type
Definition: Disassembler.h:314
single kernel input for disassembler
Definition: Disassembler.h:254
size_t samplerInitSize
sampler init data size
Definition: Disassembler.h:288
bool newBinFormat
new binary format
Definition: Disassembler.h:324
GPUDeviceType deviceType
GPU device type.
Definition: Disassembler.h:233
std::vector< ROCmDisasmRegionInput > regions
regions
Definition: Disassembler.h:325
size_t globalDataSize
global (constants for kernels) data size
Definition: Disassembler.h:282
const cxbyte * setup
data from inner binary
Definition: Disassembler.h:262
std::vector< AmdCL2RelaEntry > textRelocs
text relocations
Definition: Disassembler.h:265
disassembler input for raw code
Definition: Disassembler.h:362
const cxbyte * samplerInit
sampler init data
Definition: Disassembler.h:289
size_t globalDataSize
global (constants for kernels) data size
Definition: Disassembler.h:353
size_t codeSize
code size
Definition: Disassembler.h:365
std::vector< GalliumArgInfo > argInfos
arguments
Definition: Disassembler.h:342
CString compileOptions
compile options which used by in clBuildProgram
Definition: Disassembler.h:236
single kernel input for disassembler
Definition: Disassembler.h:214
uint32_t archStepping
GPU arch stepping.
Definition: Disassembler.h:322
size_t symbol
symbol index
Definition: Disassembler.h:96
Flags getFlags() const
get disassemblers flags
Definition: Disassembler.h:484
void flush()
write output buffer
Definition: InputOutput.h:379
DisasmException()=default
empty constructor
uint32_t archMinor
GPU arch minor.
Definition: Disassembler.h:276
std::vector< std::pair< size_t, Relocation > >::const_iterator RelocIter
relocation iterator
Definition: Disassembler.h:102
disasm ROCm kernel input
Definition: Disassembler.h:300
const cxbyte * code
code
Definition: Disassembler.h:327
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:166
disassembler class
Definition: Disassembler.h:370
size_t codeSize
size of code of kernel
Definition: Disassembler.h:266
relocation with addend
Definition: Disassembler.h:243
std::vector< AmdCL2DisasmKernelInput > kernels
kernel inputs
Definition: Disassembler.h:296
Disassembler exception class.
Definition: Disassembler.h:47
uint32_t eflags
ELF header e_flags field.
Definition: Disassembler.h:323
size_t metadataSize
metadata size
Definition: Disassembler.h:331
simple C-string container
Definition: CString.h:38
dump code
Definition: Disassembler.h:62
std::vector< GalliumScratchReloc > scratchRelocs
scratch buffer text relocations
Definition: Disassembler.h:358
dump metadatas
Definition: Disassembler.h:63
uint32_t offset
offset of kernel code
Definition: Disassembler.h:341