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