Skip to content

Commit e93dc9c

Browse files
Add DebuggerLogBitmask debug variable to switch log levels
Signed-off-by: Mateusz Hoppe <[email protected]>
1 parent 8db55b2 commit e93dc9c

File tree

5 files changed

+99
-1
lines changed

5 files changed

+99
-1
lines changed

opencl/test/unit_test/source_level_debugger/source_level_debugger_tests.cpp

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
#include "shared/source/command_container/cmdcontainer.h"
99
#include "shared/source/device/device.h"
10+
#include "shared/source/helpers/file_io.h"
1011
#include "shared/source/os_interface/os_interface.h"
1112
#include "shared/source/source_level_debugger/source_level_debugger.h"
1213
#include "shared/test/common/helpers/debug_manager_state_restore.h"
@@ -730,3 +731,79 @@ TEST(SourceLevelDebugger, givenMode2InEnableMockSourceLevelDebuggerWhenDebuggerC
730731
auto sld = std::unique_ptr<SourceLevelDebugger>(SourceLevelDebugger::create());
731732
EXPECT_FALSE(sld->isOptimizationDisabled());
732733
}
734+
735+
TEST(SourceLevelDebugger, givenDebugVarDumpElfWhenNotifyKernelDebugDataIsCalledThenElfFileIsCreated) {
736+
DebugManagerStateRestore stateRestore;
737+
DebugManager.flags.DebuggerLogBitmask.set(NEO::DebugVariables::DEBUGGER_LOG_BITMASK::DUMP_ELF);
738+
739+
DebuggerLibraryRestorer restorer;
740+
741+
DebuggerLibraryInterceptor interceptor;
742+
DebuggerLibrary::setLibraryAvailable(true);
743+
DebuggerLibrary::setDebuggerActive(true);
744+
DebuggerLibrary::injectDebuggerLibraryInterceptor(&interceptor);
745+
746+
MockSourceLevelDebugger debugger;
747+
char isa[8];
748+
char dbgIsa[10];
749+
char visa[12];
750+
751+
KernelInfo info;
752+
info.debugData.genIsa = dbgIsa;
753+
info.debugData.vIsa = visa;
754+
info.debugData.genIsaSize = sizeof(dbgIsa);
755+
info.debugData.vIsaSize = sizeof(visa);
756+
757+
info.kernelDescriptor.kernelMetadata.kernelName = "debugKernel";
758+
759+
info.heapInfo.KernelHeapSize = sizeof(isa);
760+
info.heapInfo.pKernelHeap = isa;
761+
762+
std::string fileName = info.kernelDescriptor.kernelMetadata.kernelName + ".elf";
763+
EXPECT_FALSE(fileExists(fileName));
764+
765+
debugger.notifyKernelDebugData(&info.debugData, info.kernelDescriptor.kernelMetadata.kernelName, info.heapInfo.pKernelHeap, info.heapInfo.KernelHeapSize);
766+
EXPECT_TRUE(fileExists(fileName));
767+
std::remove(fileName.c_str());
768+
}
769+
770+
TEST(SourceLevelDebugger, givenDebugVarDumpElfWhenElfFileExistsWhileNotifyingDebugDataThenSuffixIsAppendedToFileName) {
771+
DebugManagerStateRestore stateRestore;
772+
DebugManager.flags.DebuggerLogBitmask.set(NEO::DebugVariables::DEBUGGER_LOG_BITMASK::DUMP_ELF);
773+
774+
DebuggerLibraryRestorer restorer;
775+
776+
DebuggerLibraryInterceptor interceptor;
777+
DebuggerLibrary::setLibraryAvailable(true);
778+
DebuggerLibrary::setDebuggerActive(true);
779+
DebuggerLibrary::injectDebuggerLibraryInterceptor(&interceptor);
780+
781+
MockSourceLevelDebugger debugger;
782+
char isa[8];
783+
char dbgIsa[10];
784+
char visa[12];
785+
786+
KernelInfo info;
787+
info.debugData.genIsa = dbgIsa;
788+
info.debugData.vIsa = visa;
789+
info.debugData.genIsaSize = sizeof(dbgIsa);
790+
info.debugData.vIsaSize = sizeof(visa);
791+
792+
info.kernelDescriptor.kernelMetadata.kernelName = "debugKernel";
793+
794+
info.heapInfo.KernelHeapSize = sizeof(isa);
795+
info.heapInfo.pKernelHeap = isa;
796+
797+
std::string fileName = info.kernelDescriptor.kernelMetadata.kernelName + ".elf";
798+
char data[4];
799+
writeDataToFile(fileName.c_str(), data, 4);
800+
EXPECT_TRUE(fileExists(fileName));
801+
802+
std::string fileName2 = info.kernelDescriptor.kernelMetadata.kernelName + "_0.elf";
803+
debugger.notifyKernelDebugData(&info.debugData, info.kernelDescriptor.kernelMetadata.kernelName, info.heapInfo.pKernelHeap, info.heapInfo.KernelHeapSize);
804+
805+
EXPECT_TRUE(fileExists(fileName2));
806+
807+
std::remove(fileName.c_str());
808+
std::remove(fileName2.c_str());
809+
}

opencl/test/unit_test/test_files/igdrcl.config

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,3 +227,4 @@ OverrideSlmAllocationSize = -1
227227
OverrideSlmSize = -1
228228
UseCyclesPerSecondTimer = 0
229229
WaitLoopCount = -1
230+
DebuggerLogBitmask = 0

shared/source/debug_settings/debug_settings_manager.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,12 @@ struct DebugVarBase {
6868
};
6969

7070
struct DebugVariables {
71+
struct DEBUGGER_LOG_BITMASK {
72+
constexpr static int32_t LOG_INFO{1};
73+
constexpr static int32_t LOG_ERROR{1 << 1};
74+
constexpr static int32_t DUMP_ELF{1 << 10};
75+
};
76+
7177
#define DECLARE_DEBUG_VARIABLE(dataType, variableName, defaultValue, description) \
7278
DebugVarBase<dataType> variableName{defaultValue};
7379
#include "debug_variables.inl"

shared/source/debug_settings/debug_variables_base.inl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ DECLARE_DEBUG_VARIABLE(int32_t, GpuScratchRegWriteAfterWalker, -1, "-1: disabled
9393
DECLARE_DEBUG_VARIABLE(int32_t, GpuScratchRegWriteRegisterOffset, 0, "register offset for GPU scratch register write after walker")
9494
DECLARE_DEBUG_VARIABLE(int32_t, GpuScratchRegWriteRegisterData, 0, "register data for GPU scratch register write after walker")
9595
DECLARE_DEBUG_VARIABLE(int32_t, OverrideSlmAllocationSize, -1, "-1: default, >=0: program value for shared local memory size")
96+
DECLARE_DEBUG_VARIABLE(int32_t, DebuggerLogBitmask, 0, "0: logs disabled, != 0: see DebugVariables::DEBUGGER_LOG_BITMASK")
9697

9798
/*LOGGING FLAGS*/
9899
DECLARE_DEBUG_VARIABLE(int32_t, PrintDriverDiagnostics, -1, "prints driver diagnostics messages to standard output, value corresponds to hint level")

shared/source/source_level_debugger/source_level_debugger.cpp

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2018-2020 Intel Corporation
2+
* Copyright (C) 2018-2021 Intel Corporation
33
*
44
* SPDX-License-Identifier: MIT
55
*
@@ -10,6 +10,7 @@
1010
#include "shared/source/debug_settings/debug_settings_manager.h"
1111
#include "shared/source/debugger/debugger.h"
1212
#include "shared/source/helpers/debug_helpers.h"
13+
#include "shared/source/helpers/file_io.h"
1314
#include "shared/source/kernel/debug_data.h"
1415
#include "shared/source/os_interface/os_interface.h"
1516

@@ -213,6 +214,18 @@ bool SourceLevelDebugger::notifyKernelDebugData(const DebugData *debugData, cons
213214
kernelDebugData.dbgVisaSize = debugData->vIsaSize;
214215
kernelDebugData.dbgGenIsaBuffer = debugData->genIsa;
215216
kernelDebugData.dbgGenIsaSize = debugData->genIsaSize;
217+
218+
if (NEO::DebugManager.flags.DebuggerLogBitmask.get() & NEO::DebugVariables::DEBUGGER_LOG_BITMASK::DUMP_ELF) {
219+
std::ofstream elfFile;
220+
std::string fileName = name + ".elf";
221+
222+
int suffix = 0;
223+
while (fileExists(fileName)) {
224+
fileName = name + "_" + std::to_string(suffix) + ".elf";
225+
suffix++;
226+
}
227+
writeDataToFile(fileName.c_str(), kernelDebugData.dbgVisaBuffer, kernelDebugData.dbgVisaSize);
228+
}
216229
}
217230

218231
if (sourceLevelDebuggerInterface) {

0 commit comments

Comments
 (0)