diff --git a/level_zero/tools/source/debug/linux/xe/debug_session.h b/level_zero/tools/source/debug/linux/xe/debug_session.h index ac1f0612a4..46a4f963aa 100644 --- a/level_zero/tools/source/debug/linux/xe/debug_session.h +++ b/level_zero/tools/source/debug/linux/xe/debug_session.h @@ -121,8 +121,8 @@ struct DebugSessionLinuxXe : DebugSessionLinux { struct ClientConnectionXe : public ClientConnection { drm_xe_eudebug_event_client client = {}; - size_t getElfSize(uint64_t elfHandle) override { return 0; }; - char *getElfData(uint64_t elfHandle) override { return nullptr; }; + size_t getElfSize(uint64_t elfHandle) override { return metaDataMap[elfHandle].metadata.len; }; + char *getElfData(uint64_t elfHandle) override { return metaDataMap[elfHandle].data.get(); }; std::unordered_map execQueues; std::unordered_map lrcHandleToVmHandle; diff --git a/level_zero/tools/test/unit_tests/sources/debug/linux/xe/test_debug_api_linux_xe.cpp b/level_zero/tools/test/unit_tests/sources/debug/linux/xe/test_debug_api_linux_xe.cpp index e6d92b79b7..f70b7c071a 100644 --- a/level_zero/tools/test/unit_tests/sources/debug/linux/xe/test_debug_api_linux_xe.cpp +++ b/level_zero/tools/test/unit_tests/sources/debug/linux/xe/test_debug_api_linux_xe.cpp @@ -2013,14 +2013,35 @@ TEST_F(DebugApiLinuxTestXe, GivenInterruptedThreadsWhenAttentionEventReceivedThe TEST_F(DebugApiLinuxTestXe, GivenNoElfDataImplementationThenGetElfDataReturnsNullptr) { zet_debug_config_t config = {}; config.pid = 0x1234; - uint64_t elfHandle = 0; auto sessionMock = std::make_unique(config, device, 10); ASSERT_NE(nullptr, sessionMock); - auto clientConnection = sessionMock->getClientConnection(MockDebugSessionLinuxXe::mockClientHandle); + auto clientConnection = sessionMock->clientHandleToConnection[MockDebugSessionLinuxXe::mockClientHandle]; + drm_xe_eudebug_event_metadata metadata{}; + metadata.base.type = DRM_XE_EUDEBUG_EVENT_METADATA; + metadata.base.flags = DRM_XE_EUDEBUG_EVENT_CREATE; + metadata.base.len = sizeof(drm_xe_eudebug_event_metadata); + metadata.client_handle = MockDebugSessionLinuxXe::mockClientHandle; + metadata.metadata_handle = 10; + metadata.type = DRM_XE_DEBUG_METADATA_PROGRAM_MODULE; + metadata.len = 1000; + clientConnection->metaDataMap[10].metadata = metadata; + clientConnection->metaDataMap[10].metadata.len = 1000; + auto ptr = std::make_unique(metadata.len); + clientConnection->metaDataMap[10].data = std::move(ptr); + + metadata.metadata_handle = 11; + metadata.type = DRM_XE_DEBUG_METADATA_ELF_BINARY; + metadata.len = 2000; + clientConnection->metaDataMap[11].metadata = metadata; + clientConnection->metaDataMap[11].metadata.len = 2000; + ASSERT_NE(nullptr, clientConnection); - ASSERT_EQ(nullptr, clientConnection->getElfData(elfHandle)); - ASSERT_EQ(0u, clientConnection->getElfSize(elfHandle)); + ASSERT_EQ(reinterpret_cast(clientConnection->metaDataMap[10].data.get()), sessionMock->getClientConnection(MockDebugSessionLinuxXe::mockClientHandle)->getElfData(10)); + ASSERT_EQ(clientConnection->metaDataMap[10].metadata.len, sessionMock->getClientConnection(MockDebugSessionLinuxXe::mockClientHandle)->getElfSize(10)); + + ASSERT_EQ(reinterpret_cast(clientConnection->metaDataMap[11].data.get()), sessionMock->getClientConnection(MockDebugSessionLinuxXe::mockClientHandle)->getElfData(11)); + ASSERT_EQ(clientConnection->metaDataMap[11].metadata.len, sessionMock->getClientConnection(MockDebugSessionLinuxXe::mockClientHandle)->getElfSize(11)); } } // namespace ult