1 /*========================== begin_copyright_notice ============================ 2 3 Copyright (C) 2017-2021 Intel Corporation 4 5 SPDX-License-Identifier: MIT 6 7 ============================= end_copyright_notice ===========================*/ 8 9 #pragma once 10 11 #include <stdint.h> 12 13 namespace iOpenCL 14 { 15 // 16 // The layout of the (IGC) program debug data is as follows: 17 // 18 /* 19 -------------------------------------------------------------------------- 20 | SProgramDebugDataHeaderIGC: | 21 -------------------------------------------------------------------------- 22 | Program Kernel Data Table: | 23 | (All kernels have debug data entries in here. If kernel has no debug | 24 | info the debug info size will be zero.) | 25 | ---> (IGC) Program Kernel Data 1 | 26 | ---> ... | 27 | ---> (IGC) Program Kernel Data n | 28 -------------------------------------------------------------------------- 29 */ 30 31 // 32 // The layout of the (IGC) kernel data is as follows: 33 // 34 /* 35 -------------------------------------------------------------------------- 36 | (IGC) Program Kernel Data: | 37 -------------------------------------------------------------------------- 38 | SKernelDebugDataHeaderIGC: | 39 | (All kernels have debug data entries in here. If kernel has no debug | 40 | info the debug info size will be zero.) | 41 -------------------------------------------------------------------------- 42 | Kernel name: | 43 | (NULL terminated string aligned on sizeof(DWORD).) | 44 -------------------------------------------------------------------------- 45 | VISA debug info: | 46 -------------------------------------------------------------------------- 47 | GenISA debug info: | 48 -------------------------------------------------------------------------- 49 */ 50 51 /*****************************************************************************\ 52 STRUCT: SProgramDebugDataHeaderIGC 53 \*****************************************************************************/ 54 typedef struct _SProgramDebugDataHeaderIGC 55 { 56 uint32_t Magic; 57 uint32_t Version; 58 uint32_t Size; 59 uint32_t Device; 60 uint32_t SteppingId; 61 uint32_t GPUPointerSizeInBytes; 62 uint32_t NumberOfKernels; 63 } SProgramDebugDataHeaderIGC; 64 65 66 /*****************************************************************************\ 67 STRUCT: SKernelDebugDataHeaderIGC 68 \*****************************************************************************/ 69 typedef struct _SKernelDebugDataHeaderIGC 70 { 71 uint32_t KernelNameSize; 72 uint32_t SizeVisaDbgInBytes; 73 uint32_t SizeGenIsaDbgInBytes; 74 } SKernelDebugDataHeaderIGC; 75 76 77 // 78 // The layout of the program debug data is as follows: 79 // 80 /* 81 -------------------------------------------------------------------------- 82 | SProgramDebugDataHeader: | 83 -------------------------------------------------------------------------- 84 | Program String Table: | 85 | (This is a sequence of null-terminated strings. The first set of | 86 | strings correspond to the directory table entries appearing in order. | 87 | The second set of strings correspond to the directory table entries | 88 | appearing in order. The third set of strings correspond to the kernel | 89 | names appearing in order. (Note not all kernels may have associated | 90 | debug data. The debug data reader must use the KernelIndex field in | 91 | SKernelDebugDataHeader to check if debug data exist for a kernel that | 92 | is present in kernel binary data). | 93 -------------------------------------------------------------------------- 94 | Program Directory Table: | 95 | ---> SProgramDebugDataDirTableHeader | 96 | (Its string entries appear in order in the string table.) | 97 -------------------------------------------------------------------------- 98 | Program File Table: | 99 | ---> SProgramDebugDataFileTableHeader | 100 | (Its string entries appear in order in the string table.) | 101 | ---> SProgramDebugDataFileTableEntry 1 | 102 | ---> ... | 103 | ---> SProgramDebugDataFileTableEntry n | 104 -------------------------------------------------------------------------- 105 | Program Kernel Data Table: | 106 | (Only kernels that have debug data have entries in here. The | 107 | KernelIndex field is used to specfy the kernel whose debug data | 108 | appears here.) | 109 | ---> Program Kernel Data 1 | 110 | ---> ... | 111 | ---> Program Kernel Data n | 112 -------------------------------------------------------------------------- 113 */ 114 115 // 116 // The layout of the kernel data is as follows: 117 // 118 /* 119 -------------------------------------------------------------------------- 120 | Program Kernel Data: | 121 -------------------------------------------------------------------------- 122 | SKernelDebugDataHeader: | 123 | (Only kernels that have debug data have entries in here. The | 124 | KernelIndex field is used to specfy the kernel whose debug data | 125 | appears here.) | 126 -------------------------------------------------------------------------- 127 | SKernelDebugDataLineTableHeader: | 128 -------------------------------------------------------------------------- 129 | SKernelDebugDataLineTableEntry 1: | 130 -------------------------------------------------------------------------- 131 | ... | 132 -------------------------------------------------------------------------- 133 | SKernelDebugDataLineTableEntry n: | 134 -------------------------------------------------------------------------- 135 */ 136 137 /*****************************************************************************\ 138 STRUCT: SProgramDebugDataHeader 139 \*****************************************************************************/ 140 typedef struct _SProgramDebugDataHeader 141 { 142 uint32_t Magic; 143 uint32_t Version; 144 uint32_t Size; 145 uint32_t StringTableSize; 146 uint32_t DirTableSize; 147 uint32_t FileTableSize; 148 uint32_t Device; 149 uint32_t SteppingId; 150 uint32_t GPUPointerSizeInBytes; 151 uint32_t NumberOfKernels; 152 uint32_t NumberOfKernelsWithDebugData; 153 } SProgramDebugDataHeader; 154 155 /*****************************************************************************\ 156 STRUCT: SProgramProgramDebugDataDirTableHeader 157 \*****************************************************************************/ 158 typedef struct _SProgramDebugDataDirTableHeader 159 { 160 uint32_t NumberOfDirs; 161 } SProgramDebugDataDirTableHeader; 162 163 /*****************************************************************************\ 164 STRUCT: SProgramProgramDebugDataFileTableHeader 165 \*****************************************************************************/ 166 typedef struct _SProgramDebugDataFileTableHeader 167 { 168 uint32_t NumberOfFiles; 169 } SProgramDebugDataFileTableHeader; 170 171 /*****************************************************************************\ 172 STRUCT: SProgramDebugDataFileTableEntry 173 \*****************************************************************************/ 174 typedef struct _SProgramDebugDataFileTableEntry 175 { 176 uint32_t DirIndex; 177 } SProgramDebugDataFileTableEntry; 178 179 /*****************************************************************************\ 180 STRUCT: SKernelDebugDataHeader 181 \*****************************************************************************/ 182 typedef struct _SKernelDebugDataHeader 183 { 184 uint32_t KernelIndex; 185 uint32_t CodeOffset; 186 uint32_t Size; 187 } SKernelDebugDataHeader; 188 189 /*****************************************************************************\ 190 STRUCT: SKernelDebugDataLineTableHeader 191 \*****************************************************************************/ 192 typedef struct _SKernelDebugDataLineTableHeader 193 { 194 uint32_t NumberOfEntries; 195 } SKernelDebugDataLineTableHeader; 196 197 /*****************************************************************************\ 198 STRUCT: SKernelDebugDataLineTableEntry 199 \*****************************************************************************/ 200 typedef struct _SKernelDebugDataLineTableEntry 201 { 202 uint32_t Offset; 203 uint32_t LineColumnNumber; 204 uint32_t FileIndex; 205 } SKernelDebugDataLineTableEntry; 206 207 }; // iOpenCL 208