Don't call source level debugger, when kernel doesn't contain debug info

Change-Id: I0cc0eb35d16fb7f46584781362886aaa44bde3ec
This commit is contained in:
Adam Cetnerowski
2018-11-26 18:35:36 +01:00
committed by sys_ocldev
parent 3b8ff44d55
commit 0a9ea8fbfd
2 changed files with 59 additions and 1 deletions

View File

@@ -176,7 +176,7 @@ bool SourceLevelDebugger::isOptimizationDisabled() const {
}
bool SourceLevelDebugger::notifyKernelDebugData(const KernelInfo *kernelInfo) const {
if (isActive) {
if (isActive && kernelInfo->debugData.vIsa && kernelInfo->debugData.genIsa) {
GfxDbgKernelDebugData kernelDebugData;
kernelDebugData.hDevice = reinterpret_cast<GfxDeviceHandle>(static_cast<uint64_t>(this->deviceHandle));
kernelDebugData.version = IGFXDBG_CURRENT_VERSION;

View File

@@ -313,6 +313,64 @@ TEST(SourceLevelDebugger, givenKernelDebuggerLibraryActiveWhenNotifyKernelDebugD
EXPECT_STREQ(info.name.c_str(), interceptor.kernelDebugDataArgIn.kernelName);
}
TEST(SourceLevelDebugger, givenNoVisaWhenNotifyKernelDebugDataIsCalledThenDebuggerLibraryFunctionIsNotCalled) {
DebuggerLibraryRestorer restorer;
DebuggerLibraryInterceptor interceptor;
DebuggerLibrary::setLibraryAvailable(true);
DebuggerLibrary::setDebuggerActive(true);
DebuggerLibrary::injectDebuggerLibraryInterceptor(&interceptor);
MockSourceLevelDebugger debugger;
char isa[8];
char dbgIsa[10];
KernelInfo info;
info.debugData.genIsa = dbgIsa;
info.debugData.vIsa = nullptr;
info.debugData.genIsaSize = sizeof(dbgIsa);
info.debugData.vIsaSize = 0;
info.name = "debugKernel";
SKernelBinaryHeaderCommon kernelHeader;
kernelHeader.KernelHeapSize = sizeof(isa);
info.heapInfo.pKernelHeader = &kernelHeader;
info.heapInfo.pKernelHeap = isa;
debugger.notifyKernelDebugData(&info);
EXPECT_FALSE(interceptor.kernelDebugDataCalled);
}
TEST(SourceLevelDebugger, givenNoGenIsaWhenNotifyKernelDebugDataIsCalledThenDebuggerLibraryFunctionIsNotCalled) {
DebuggerLibraryRestorer restorer;
DebuggerLibraryInterceptor interceptor;
DebuggerLibrary::setLibraryAvailable(true);
DebuggerLibrary::setDebuggerActive(true);
DebuggerLibrary::injectDebuggerLibraryInterceptor(&interceptor);
MockSourceLevelDebugger debugger;
char isa[8];
char visa[12];
KernelInfo info;
info.debugData.genIsa = nullptr;
info.debugData.vIsa = visa;
info.debugData.genIsaSize = 0;
info.debugData.vIsaSize = sizeof(visa);
info.name = "debugKernel";
SKernelBinaryHeaderCommon kernelHeader;
kernelHeader.KernelHeapSize = sizeof(isa);
info.heapInfo.pKernelHeader = &kernelHeader;
info.heapInfo.pKernelHeap = isa;
debugger.notifyKernelDebugData(&info);
EXPECT_FALSE(interceptor.kernelDebugDataCalled);
}
TEST(SourceLevelDebugger, givenKernelDebuggerLibraryNotActiveWhenNotifyKernelDebugDataIsCalledThenDebuggerLibraryFunctionIsNotCalled) {
DebuggerLibraryRestorer restorer;