feature: Implement getElfSize and getElfData methods for XE eudebug

Related-To: NEO-8407
Signed-off-by: Jitendra Sharma <jitendra.sharma@intel.com>
This commit is contained in:
Jitendra Sharma
2024-03-28 10:10:31 +00:00
committed by Compute-Runtime-Automation
parent e3f50e8aa9
commit 96abe38c6d
2 changed files with 27 additions and 6 deletions

View File

@@ -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<ExecQueueHandle, ExecQueueParams> execQueues;
std::unordered_map<uint64_t, uint64_t> lrcHandleToVmHandle;

View File

@@ -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<MockDebugSessionLinuxXe>(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<char[]>(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<char *>(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<char *>(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