@@ -34,6 +34,7 @@ const char *SourceLevelDebugger::getDebuggerOptionSymbol = "getDebuggerOption";
34
34
const char *SourceLevelDebugger::notifyKernelDebugDataSymbol = " notifyKernelDebugData" ;
35
35
const char *SourceLevelDebugger::initSymbol = " init" ;
36
36
const char *SourceLevelDebugger::isDebuggerActiveSymbol = " isDebuggerActive" ;
37
+ const char *SourceLevelDebugger::notifyDeviceDestructionSymbol = " notifyDeviceDestruction" ;
37
38
38
39
class SourceLevelDebugger ::SourceLevelDebuggerInterface {
39
40
public:
@@ -46,13 +47,15 @@ class SourceLevelDebugger::SourceLevelDebuggerInterface {
46
47
typedef int (*NotifyKernelDebugDataFunction)(GfxDbgKernelDebugData *data);
47
48
typedef int (*InitFunction)(GfxDbgTargetCaps *data);
48
49
typedef int (*IsDebuggerActiveFunction)(void );
50
+ typedef int (*NotifyDeviceDestructionFunction)(GfxDbgDeviceDestructionData *data);
49
51
50
52
NotifyNewDeviceFunction notifyNewDeviceFunc = nullptr ;
51
53
NotifySourceCodeFunction notifySourceCodeFunc = nullptr ;
52
54
GetDebuggerOptionFunction getDebuggerOptionFunc = nullptr ;
53
55
NotifyKernelDebugDataFunction notifyKernelDebugDataFunc = nullptr ;
54
56
InitFunction initFunc = nullptr ;
55
57
IsDebuggerActiveFunction isDebuggerActive = nullptr ;
58
+ NotifyDeviceDestructionFunction notifyDeviceDestructionFunc = nullptr ;
56
59
};
57
60
58
61
SourceLevelDebugger *SourceLevelDebugger::create () {
@@ -88,6 +91,7 @@ SourceLevelDebugger::SourceLevelDebugger(OsLibrary *library) {
88
91
UNRECOVERABLE_IF (sourceLevelDebuggerInterface->notifyKernelDebugDataFunc == nullptr );
89
92
UNRECOVERABLE_IF (sourceLevelDebuggerInterface->notifyNewDeviceFunc == nullptr );
90
93
UNRECOVERABLE_IF (sourceLevelDebuggerInterface->notifySourceCodeFunc == nullptr );
94
+ UNRECOVERABLE_IF (sourceLevelDebuggerInterface->notifyDeviceDestructionFunc == nullptr );
91
95
isActive = true ;
92
96
}
93
97
}
@@ -111,31 +115,55 @@ void SourceLevelDebugger::getFunctions() {
111
115
sourceLevelDebuggerInterface->notifyKernelDebugDataFunc = reinterpret_cast <SourceLevelDebuggerInterface::NotifyKernelDebugDataFunction>(debuggerLibrary->getProcAddress (notifyKernelDebugDataSymbol));
112
116
sourceLevelDebuggerInterface->initFunc = reinterpret_cast <SourceLevelDebuggerInterface::InitFunction>(debuggerLibrary->getProcAddress (initSymbol));
113
117
sourceLevelDebuggerInterface->isDebuggerActive = reinterpret_cast <SourceLevelDebuggerInterface::IsDebuggerActiveFunction>(debuggerLibrary->getProcAddress (isDebuggerActiveSymbol));
118
+ sourceLevelDebuggerInterface->notifyDeviceDestructionFunc = reinterpret_cast <SourceLevelDebuggerInterface::NotifyDeviceDestructionFunction>(debuggerLibrary->getProcAddress (notifyDeviceDestructionSymbol));
114
119
}
115
120
116
- void SourceLevelDebugger::notifyNewDevice (uint32_t deviceHandle) const {
121
+ bool SourceLevelDebugger::notifyNewDevice (uint32_t deviceHandle) {
117
122
if (isActive) {
118
123
GfxDbgNewDeviceData newDevice;
119
124
newDevice.version = IGFXDBG_CURRENT_VERSION;
120
125
newDevice.dh = reinterpret_cast <GfxDeviceHandle>(static_cast <uint64_t >(deviceHandle));
121
126
newDevice.udh = GfxDeviceHandle (0 );
122
- sourceLevelDebuggerInterface->notifyNewDeviceFunc (&newDevice);
127
+ int result = sourceLevelDebuggerInterface->notifyNewDeviceFunc (&newDevice);
128
+ DEBUG_BREAK_IF (static_cast <IgfxdbgRetVal>(result) != IgfxdbgRetVal::IGFXDBG_SUCCESS);
129
+ static_cast <void >(result);
130
+ this ->deviceHandle = deviceHandle;
123
131
}
132
+ return false ;
133
+ }
134
+
135
+ bool SourceLevelDebugger::notifyDeviceDestruction () {
136
+ if (isActive) {
137
+ GfxDbgDeviceDestructionData deviceDestruction;
138
+ deviceDestruction.version = IGFXDBG_CURRENT_VERSION;
139
+ deviceDestruction.dh = reinterpret_cast <GfxDeviceHandle>(static_cast <uint64_t >(this ->deviceHandle ));
140
+ int result = sourceLevelDebuggerInterface->notifyDeviceDestructionFunc (&deviceDestruction);
141
+ DEBUG_BREAK_IF (static_cast <IgfxdbgRetVal>(result) != IgfxdbgRetVal::IGFXDBG_SUCCESS);
142
+ static_cast <void >(result);
143
+ this ->deviceHandle = 0 ;
144
+ return true ;
145
+ }
146
+ return false ;
124
147
}
125
- void SourceLevelDebugger::notifySourceCode (uint32_t deviceHandle, const char *source, size_t sourceSize) const {
148
+
149
+ bool SourceLevelDebugger::notifySourceCode (const char *source, size_t sourceSize, std::string &file) const {
126
150
if (isActive) {
127
151
GfxDbgSourceCode sourceCode;
128
152
char fileName[FILENAME_MAX] = " " ;
129
153
130
154
sourceCode.version = IGFXDBG_CURRENT_VERSION;
131
- sourceCode.hDevice = reinterpret_cast <GfxDeviceHandle>(static_cast <uint64_t >(deviceHandle));
155
+ sourceCode.hDevice = reinterpret_cast <GfxDeviceHandle>(static_cast <uint64_t >(this -> deviceHandle ));
132
156
sourceCode.sourceCode = source;
133
157
sourceCode.sourceCodeSize = static_cast <unsigned int >(sourceSize);
134
158
sourceCode.sourceName = &fileName[0 ];
135
159
sourceCode.sourceNameMaxLen = sizeof (fileName);
136
160
137
- sourceLevelDebuggerInterface->notifySourceCodeFunc (&sourceCode);
161
+ int result = sourceLevelDebuggerInterface->notifySourceCodeFunc (&sourceCode);
162
+ DEBUG_BREAK_IF (static_cast <IgfxdbgRetVal>(result) != IgfxdbgRetVal::IGFXDBG_SUCCESS);
163
+ static_cast <void >(result);
164
+ file = fileName;
138
165
}
166
+ return false ;
139
167
}
140
168
141
169
bool SourceLevelDebugger::isOptimizationDisabled () const {
@@ -157,10 +185,10 @@ bool SourceLevelDebugger::isOptimizationDisabled() const {
157
185
return false ;
158
186
}
159
187
160
- void SourceLevelDebugger::notifyKernelDebugData (uint32_t deviceHandle, const KernelInfo *kernelInfo) const {
188
+ bool SourceLevelDebugger::notifyKernelDebugData (const KernelInfo *kernelInfo) const {
161
189
if (isActive) {
162
190
GfxDbgKernelDebugData kernelDebugData;
163
- kernelDebugData.hDevice = reinterpret_cast <GfxDeviceHandle>(static_cast <uint64_t >(deviceHandle));
191
+ kernelDebugData.hDevice = reinterpret_cast <GfxDeviceHandle>(static_cast <uint64_t >(this -> deviceHandle ));
164
192
kernelDebugData.version = IGFXDBG_CURRENT_VERSION;
165
193
kernelDebugData.hProgram = reinterpret_cast <GenRtProgramHandle>(0 );
166
194
@@ -173,17 +201,21 @@ void SourceLevelDebugger::notifyKernelDebugData(uint32_t deviceHandle, const Ker
173
201
kernelDebugData.dbgGenIsaBuffer = kernelInfo->debugData .genIsa ;
174
202
kernelDebugData.dbgGenIsaSize = kernelInfo->debugData .genIsaSize ;
175
203
176
- sourceLevelDebuggerInterface->notifyKernelDebugDataFunc (&kernelDebugData);
204
+ int result = sourceLevelDebuggerInterface->notifyKernelDebugDataFunc (&kernelDebugData);
205
+ DEBUG_BREAK_IF (static_cast <IgfxdbgRetVal>(result) != IgfxdbgRetVal::IGFXDBG_SUCCESS);
206
+ static_cast <void >(result);
177
207
}
208
+ return false ;
178
209
}
179
210
180
- void SourceLevelDebugger::initialize (bool useLocalMemory) {
211
+ bool SourceLevelDebugger::initialize (bool useLocalMemory) {
181
212
if (isActive) {
182
213
GfxDbgTargetCaps caps = {IGFXDBG_CURRENT_VERSION, useLocalMemory};
183
214
int result = sourceLevelDebuggerInterface->initFunc (&caps);
184
215
if (static_cast <IgfxdbgRetVal>(result) != IgfxdbgRetVal::IGFXDBG_SUCCESS) {
185
216
isActive = false ;
186
217
}
187
218
}
219
+ return false ;
188
220
}
189
221
} // namespace OCLRT
0 commit comments