55 *
66 */
77
8+ #include " shared/source/device_binary_format/patchtokens_decoder.h"
89#include " shared/test/common/helpers/debug_manager_state_restore.h"
910#include " shared/test/common/helpers/kernel_binary_helper.h"
1011#include " shared/test/common/helpers/kernel_filename_helper.h"
1112#include " shared/test/common/libult/global_environment.h"
1213#include " shared/test/common/mocks/mock_source_level_debugger.h"
1314#include " shared/test/common/test_macros/test.h"
15+ #include " shared/test/unit_test/device_binary_format/elf/elf_tests_data.h"
1416#include " shared/test/unit_test/helpers/gtest_helpers.h"
1517
1618#include " opencl/test/unit_test/fixtures/program_fixture.h"
2022
2123#include " compiler_options.h"
2224#include " gtest/gtest.h"
25+ #include " program_debug_data.h"
2326
2427#include < algorithm>
2528#include < memory>
@@ -300,6 +303,11 @@ TEST_F(ProgramWithKernelDebuggingTest, givenEnabledKernelDebugWhenProgramIsLinke
300303}
301304
302305TEST_F (ProgramWithKernelDebuggingTest, givenProgramWithKernelDebugEnabledWhenBuiltThenPatchTokenAllocateSipSurfaceHasSizeGreaterThanZero) {
306+ auto &refBin = pProgram->buildInfos [pDevice->getRootDeviceIndex ()].unpackedDeviceBinary ;
307+ auto refBinSize = pProgram->buildInfos [pDevice->getRootDeviceIndex ()].unpackedDeviceBinarySize ;
308+ if (NEO::isDeviceBinaryFormat<NEO::DeviceBinaryFormat::Zebin>(ArrayRef<const uint8_t >::fromAny (refBin.get (), refBinSize))) {
309+ GTEST_SKIP ();
310+ }
303311 auto retVal = pProgram->build (pProgram->getDevices (), CompilerOptions::debugKernelEnable.data (), false );
304312 EXPECT_EQ (CL_SUCCESS, retVal);
305313
@@ -313,9 +321,7 @@ TEST_F(ProgramWithKernelDebuggingTest, givenGtpinInitializedWhenCreatingProgramF
313321 auto retVal = pProgram->build (pProgram->getDevices (), CompilerOptions::debugKernelEnable.data (), false );
314322 EXPECT_EQ (CL_SUCCESS, retVal);
315323
316- auto kernelInfo = pProgram->getKernelInfo (" CopyBuffer" , pDevice->getRootDeviceIndex ());
317- EXPECT_NE (kernelInfo->debugData .vIsa , nullptr );
318- EXPECT_NE (0u , kernelInfo->debugData .vIsaSize );
324+ EXPECT_TRUE (pProgram->wasDebuggerNotified );
319325
320326 NEO::isGTPinInitialized = gtpinInitializedBackup;
321327}
@@ -327,9 +333,7 @@ TEST_F(ProgramWithKernelDebuggingTest, givenGtpinNotInitializedWhenCreatingProgr
327333 auto retVal = pProgram->build (pProgram->getDevices (), CompilerOptions::debugKernelEnable.data (), false );
328334 EXPECT_EQ (CL_SUCCESS, retVal);
329335
330- auto kernelInfo = pProgram->getKernelInfo (" CopyBuffer" , pDevice->getRootDeviceIndex ());
331- EXPECT_EQ (kernelInfo->debugData .vIsa , nullptr );
332- EXPECT_EQ (0u , kernelInfo->debugData .vIsaSize );
336+ EXPECT_FALSE (pProgram->wasDebuggerNotified );
333337
334338 NEO::isGTPinInitialized = gtpinInitializedBackup;
335339}
@@ -344,25 +348,67 @@ TEST_F(ProgramWithKernelDebuggingTest, givenKernelDebugEnabledWhenProgramIsBuilt
344348}
345349
346350TEST_F (ProgramWithKernelDebuggingTest, givenProgramWithKernelDebugEnabledWhenProcessDebugDataIsCalledThenKernelInfosAreFilledWithDebugData) {
347- auto retVal = pProgram-> build (pProgram-> getDevices (), nullptr , false ) ;
348- EXPECT_EQ (CL_SUCCESS, retVal) ;
351+ iOpenCL::SProgramDebugDataHeaderIGC debugDataHeader{} ;
352+ debugDataHeader. NumberOfKernels = 1u ;
349353
350- pProgram->processDebugData (pDevice->getRootDeviceIndex ());
354+ char mockKernelName[] = " CopyBuffer" ;
355+ constexpr size_t mockKernelDebugDataSize = 0x10 ;
356+ PatchTokenBinary::SKernelDebugDataHeaderIGC mockKernelDebugHeader{};
357+ mockKernelDebugHeader.KernelNameSize = sizeof (mockKernelName);
358+ mockKernelDebugHeader.SizeVisaDbgInBytes = mockKernelDebugDataSize;
351359
352- auto kernelInfo = pProgram->getKernelInfo (" CopyBuffer" , pDevice->getRootDeviceIndex ());
360+ char mockKerneDebugData[mockKernelDebugDataSize];
361+ memset (mockKerneDebugData, ' \x01 ' , mockKernelDebugDataSize);
362+
363+ KernelInfo *mockKernelInfo = new KernelInfo{};
364+ mockKernelInfo->kernelDescriptor .kernelMetadata .kernelName = " CopyBuffer" ;
365+ pProgram->addKernelInfo (mockKernelInfo, pDevice->getRootDeviceIndex ());
366+
367+ constexpr size_t mockDebugDataSize = sizeof (iOpenCL::SProgramDebugDataHeaderIGC) + sizeof (PatchTokenBinary::KernelFromPatchtokens) + sizeof (mockKernelName) + mockKernelDebugDataSize;
368+
369+ char *mockDebugData = new char [mockDebugDataSize];
370+ auto dataPtr = mockDebugData;
353371
354- EXPECT_NE (0u , kernelInfo->debugData .vIsaSize );
355- EXPECT_NE (nullptr , kernelInfo->debugData .vIsa );
372+ memcpy_s (dataPtr, mockDebugDataSize, &debugDataHeader, sizeof (iOpenCL::SProgramDebugDataHeaderIGC));
373+ dataPtr = ptrOffset (dataPtr, sizeof (iOpenCL::SProgramDebugDataHeaderIGC));
374+ memcpy_s (dataPtr, mockDebugDataSize, &mockKernelDebugHeader, sizeof (PatchTokenBinary::SKernelDebugDataHeaderIGC));
375+ dataPtr = ptrOffset (dataPtr, sizeof (PatchTokenBinary::SKernelDebugDataHeaderIGC));
376+ memcpy_s (dataPtr, mockDebugDataSize, &mockKernelName, sizeof (mockKernelName));
377+ dataPtr = ptrOffset (dataPtr, sizeof (mockKernelName));
378+ memcpy_s (dataPtr, mockDebugDataSize, mockKerneDebugData, mockKernelDebugDataSize);
379+ pProgram->buildInfos [pDevice->getRootDeviceIndex ()].debugData .reset (mockDebugData);
380+
381+ pProgram->processDebugData (pDevice->getRootDeviceIndex ());
382+ auto receivedKernelInfo = pProgram->getKernelInfo (" CopyBuffer" , pDevice->getRootDeviceIndex ());
383+
384+ EXPECT_NE (0u , receivedKernelInfo->debugData .vIsaSize );
385+ EXPECT_NE (nullptr , receivedKernelInfo->debugData .vIsa );
356386}
357387
358388TEST_F (ProgramWithKernelDebuggingTest, givenProgramWithNonZebinaryFormatAndKernelDebugEnabledWhenProgramIsBuiltThenProcessDebugDataIsCalledAndDebuggerNotified) {
359389 MockSourceLevelDebugger *sourceLevelDebugger = new MockSourceLevelDebugger;
360390 pDevice->executionEnvironment ->rootDeviceEnvironments [pDevice->getRootDeviceIndex ()]->debugger .reset (sourceLevelDebugger);
361391 pProgram->enableKernelDebug ();
362392
363- cl_int retVal = pProgram->build (pProgram->getDevices (), nullptr , false );
364- EXPECT_EQ (CL_SUCCESS, retVal);
365- EXPECT_FALSE (pProgram->wasCreateDebugZebinCalled );
366- EXPECT_TRUE (pProgram->wasProcessDebugDataCalled );
367- EXPECT_EQ (1u , sourceLevelDebugger->notifyKernelDebugDataCalled );
393+ auto mockElf = std::make_unique<MockElfBinaryPatchtokens<>>(pDevice->getHardwareInfo ());
394+ auto mockElfSize = mockElf->storage .size ();
395+ auto mockElfData = mockElf->storage .data ();
396+
397+ pProgram->buildInfos [pDevice->getRootDeviceIndex ()].unpackedDeviceBinarySize = mockElfSize;
398+ pProgram->buildInfos [pDevice->getRootDeviceIndex ()].unpackedDeviceBinary .reset (new char [mockElfSize]);
399+ memcpy_s (pProgram->buildInfos [pDevice->getRootDeviceIndex ()].unpackedDeviceBinary .get (), pProgram->buildInfos [pDevice->getRootDeviceIndex ()].unpackedDeviceBinarySize ,
400+ mockElfData, mockElfSize);
401+
402+ KernelInfo *mockKernelInfo = new KernelInfo{};
403+ mockKernelInfo->kernelDescriptor .kernelMetadata .kernelName = " CopyBuffer" ;
404+ pProgram->addKernelInfo (mockKernelInfo, pDevice->getRootDeviceIndex ());
405+
406+ auto counter = 0u ;
407+ for (const auto &device : pProgram->getDevices ()) {
408+ pProgram->notifyDebuggerWithDebugData (device);
409+
410+ EXPECT_FALSE (pProgram->wasCreateDebugZebinCalled );
411+ EXPECT_TRUE (pProgram->wasProcessDebugDataCalled );
412+ EXPECT_EQ (++counter, sourceLevelDebugger->notifyKernelDebugDataCalled );
413+ }
368414}
0 commit comments