Add DebuggerLogBitmask debug variable to switch log levels

Signed-off-by: Mateusz Hoppe <mateusz.hoppe@intel.com>
This commit is contained in:
Mateusz Hoppe 2021-03-31 19:39:04 +00:00 committed by Compute-Runtime-Automation
parent 8db55b246b
commit e93dc9c61a
5 changed files with 99 additions and 1 deletions

View File

@ -7,6 +7,7 @@
#include "shared/source/command_container/cmdcontainer.h"
#include "shared/source/device/device.h"
#include "shared/source/helpers/file_io.h"
#include "shared/source/os_interface/os_interface.h"
#include "shared/source/source_level_debugger/source_level_debugger.h"
#include "shared/test/common/helpers/debug_manager_state_restore.h"
@ -730,3 +731,79 @@ TEST(SourceLevelDebugger, givenMode2InEnableMockSourceLevelDebuggerWhenDebuggerC
auto sld = std::unique_ptr<SourceLevelDebugger>(SourceLevelDebugger::create());
EXPECT_FALSE(sld->isOptimizationDisabled());
}
TEST(SourceLevelDebugger, givenDebugVarDumpElfWhenNotifyKernelDebugDataIsCalledThenElfFileIsCreated) {
DebugManagerStateRestore stateRestore;
DebugManager.flags.DebuggerLogBitmask.set(NEO::DebugVariables::DEBUGGER_LOG_BITMASK::DUMP_ELF);
DebuggerLibraryRestorer restorer;
DebuggerLibraryInterceptor interceptor;
DebuggerLibrary::setLibraryAvailable(true);
DebuggerLibrary::setDebuggerActive(true);
DebuggerLibrary::injectDebuggerLibraryInterceptor(&interceptor);
MockSourceLevelDebugger debugger;
char isa[8];
char dbgIsa[10];
char visa[12];
KernelInfo info;
info.debugData.genIsa = dbgIsa;
info.debugData.vIsa = visa;
info.debugData.genIsaSize = sizeof(dbgIsa);
info.debugData.vIsaSize = sizeof(visa);
info.kernelDescriptor.kernelMetadata.kernelName = "debugKernel";
info.heapInfo.KernelHeapSize = sizeof(isa);
info.heapInfo.pKernelHeap = isa;
std::string fileName = info.kernelDescriptor.kernelMetadata.kernelName + ".elf";
EXPECT_FALSE(fileExists(fileName));
debugger.notifyKernelDebugData(&info.debugData, info.kernelDescriptor.kernelMetadata.kernelName, info.heapInfo.pKernelHeap, info.heapInfo.KernelHeapSize);
EXPECT_TRUE(fileExists(fileName));
std::remove(fileName.c_str());
}
TEST(SourceLevelDebugger, givenDebugVarDumpElfWhenElfFileExistsWhileNotifyingDebugDataThenSuffixIsAppendedToFileName) {
DebugManagerStateRestore stateRestore;
DebugManager.flags.DebuggerLogBitmask.set(NEO::DebugVariables::DEBUGGER_LOG_BITMASK::DUMP_ELF);
DebuggerLibraryRestorer restorer;
DebuggerLibraryInterceptor interceptor;
DebuggerLibrary::setLibraryAvailable(true);
DebuggerLibrary::setDebuggerActive(true);
DebuggerLibrary::injectDebuggerLibraryInterceptor(&interceptor);
MockSourceLevelDebugger debugger;
char isa[8];
char dbgIsa[10];
char visa[12];
KernelInfo info;
info.debugData.genIsa = dbgIsa;
info.debugData.vIsa = visa;
info.debugData.genIsaSize = sizeof(dbgIsa);
info.debugData.vIsaSize = sizeof(visa);
info.kernelDescriptor.kernelMetadata.kernelName = "debugKernel";
info.heapInfo.KernelHeapSize = sizeof(isa);
info.heapInfo.pKernelHeap = isa;
std::string fileName = info.kernelDescriptor.kernelMetadata.kernelName + ".elf";
char data[4];
writeDataToFile(fileName.c_str(), data, 4);
EXPECT_TRUE(fileExists(fileName));
std::string fileName2 = info.kernelDescriptor.kernelMetadata.kernelName + "_0.elf";
debugger.notifyKernelDebugData(&info.debugData, info.kernelDescriptor.kernelMetadata.kernelName, info.heapInfo.pKernelHeap, info.heapInfo.KernelHeapSize);
EXPECT_TRUE(fileExists(fileName2));
std::remove(fileName.c_str());
std::remove(fileName2.c_str());
}

View File

@ -227,3 +227,4 @@ OverrideSlmAllocationSize = -1
OverrideSlmSize = -1
UseCyclesPerSecondTimer = 0
WaitLoopCount = -1
DebuggerLogBitmask = 0

View File

@ -68,6 +68,12 @@ struct DebugVarBase {
};
struct DebugVariables {
struct DEBUGGER_LOG_BITMASK {
constexpr static int32_t LOG_INFO{1};
constexpr static int32_t LOG_ERROR{1 << 1};
constexpr static int32_t DUMP_ELF{1 << 10};
};
#define DECLARE_DEBUG_VARIABLE(dataType, variableName, defaultValue, description) \
DebugVarBase<dataType> variableName{defaultValue};
#include "debug_variables.inl"

View File

@ -93,6 +93,7 @@ DECLARE_DEBUG_VARIABLE(int32_t, GpuScratchRegWriteAfterWalker, -1, "-1: disabled
DECLARE_DEBUG_VARIABLE(int32_t, GpuScratchRegWriteRegisterOffset, 0, "register offset for GPU scratch register write after walker")
DECLARE_DEBUG_VARIABLE(int32_t, GpuScratchRegWriteRegisterData, 0, "register data for GPU scratch register write after walker")
DECLARE_DEBUG_VARIABLE(int32_t, OverrideSlmAllocationSize, -1, "-1: default, >=0: program value for shared local memory size")
DECLARE_DEBUG_VARIABLE(int32_t, DebuggerLogBitmask, 0, "0: logs disabled, != 0: see DebugVariables::DEBUGGER_LOG_BITMASK")
/*LOGGING FLAGS*/
DECLARE_DEBUG_VARIABLE(int32_t, PrintDriverDiagnostics, -1, "prints driver diagnostics messages to standard output, value corresponds to hint level")

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2018-2020 Intel Corporation
* Copyright (C) 2018-2021 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
@ -10,6 +10,7 @@
#include "shared/source/debug_settings/debug_settings_manager.h"
#include "shared/source/debugger/debugger.h"
#include "shared/source/helpers/debug_helpers.h"
#include "shared/source/helpers/file_io.h"
#include "shared/source/kernel/debug_data.h"
#include "shared/source/os_interface/os_interface.h"
@ -213,6 +214,18 @@ bool SourceLevelDebugger::notifyKernelDebugData(const DebugData *debugData, cons
kernelDebugData.dbgVisaSize = debugData->vIsaSize;
kernelDebugData.dbgGenIsaBuffer = debugData->genIsa;
kernelDebugData.dbgGenIsaSize = debugData->genIsaSize;
if (NEO::DebugManager.flags.DebuggerLogBitmask.get() & NEO::DebugVariables::DEBUGGER_LOG_BITMASK::DUMP_ELF) {
std::ofstream elfFile;
std::string fileName = name + ".elf";
int suffix = 0;
while (fileExists(fileName)) {
fileName = name + "_" + std::to_string(suffix) + ".elf";
suffix++;
}
writeDataToFile(fileName.c_str(), kernelDebugData.dbgVisaBuffer, kernelDebugData.dbgVisaSize);
}
}
if (sourceLevelDebuggerInterface) {