Windows debugger access to SLM

Resolves: NEO-7382

Signed-off-by: Matias Cabral <matias.a.cabral@intel.com>
This commit is contained in:
Matias Cabral
2022-10-17 19:44:28 +00:00
committed by Compute-Runtime-Automation
parent 51fa04fc60
commit 0772d32a76
3 changed files with 52 additions and 4 deletions

View File

@@ -456,10 +456,18 @@ ze_result_t DebugSessionWindows::readMemory(ze_device_thread_t thread, const zet
return status;
}
if (desc->type != ZET_DEBUG_MEMORY_SPACE_TYPE_DEFAULT) {
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
if (desc->type == ZET_DEBUG_MEMORY_SPACE_TYPE_DEFAULT) {
status = readDefaultMemory(thread, desc, size, buffer);
} else {
auto threadId = convertToThreadId(thread);
status = readSLMMemory(threadId, desc, size, buffer);
}
return status;
}
ze_result_t DebugSessionWindows::readDefaultMemory(ze_device_thread_t thread, const zet_debug_memory_space_desc_t *desc, size_t size, void *buffer) {
if (isVAElf(desc, size)) {
return readElfSpace(desc, size, buffer);
}
@@ -493,10 +501,18 @@ ze_result_t DebugSessionWindows::writeMemory(ze_device_thread_t thread, const ze
return status;
}
if (desc->type != ZET_DEBUG_MEMORY_SPACE_TYPE_DEFAULT) {
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
if (desc->type == ZET_DEBUG_MEMORY_SPACE_TYPE_DEFAULT) {
status = writeDefaultMemory(thread, desc, size, buffer);
} else {
auto threadId = convertToThreadId(thread);
status = writeSLMMemory(threadId, desc, size, buffer);
}
return status;
}
ze_result_t DebugSessionWindows::writeDefaultMemory(ze_device_thread_t thread, const zet_debug_memory_space_desc_t *desc, size_t size, const void *buffer) {
uint64_t memoryHandle = DebugSessionWindows::invalidHandle;
if (DebugSession::isThreadAll(thread)) {

View File

@@ -31,7 +31,10 @@ struct DebugSessionWindows : DebugSessionImp {
bool closeConnection() override;
ze_result_t readMemory(ze_device_thread_t thread, const zet_debug_memory_space_desc_t *desc, size_t size, void *buffer) override;
ze_result_t readDefaultMemory(ze_device_thread_t thread, const zet_debug_memory_space_desc_t *desc, size_t size, void *buffer);
ze_result_t writeMemory(ze_device_thread_t thread, const zet_debug_memory_space_desc_t *desc, size_t size, const void *buffer) override;
ze_result_t writeDefaultMemory(ze_device_thread_t thread, const zet_debug_memory_space_desc_t *desc, size_t size, const void *buffer);
ze_result_t acknowledgeEvent(const zet_debug_event_t *event) override;
static ze_result_t translateNtStatusToZeResult(NTSTATUS status);

View File

@@ -1613,6 +1613,35 @@ TEST_F(DebugApiWindowsTest, WhenCallingReadMemoryForExpectedFailureCasesThenErro
EXPECT_EQ(ZE_RESULT_ERROR_NOT_AVAILABLE, retVal);
}
TEST_F(DebugApiWindowsTest, GivenSipNotUpdatingSipCmdThenAccessToSlmFailsGracefully) {
auto session = std::make_unique<MockDebugSessionWindows>(zet_debug_config_t{0x1234}, device);
ASSERT_NE(nullptr, session);
SIP::version version = {2, 0, 0};
initStateSaveArea(session->stateSaveAreaHeader, version);
session->stateSaveAreaVA = reinterpret_cast<uint64_t>(session->stateSaveAreaHeader.data());
session->debugHandle = MockDebugSessionWindows::mockDebugHandle;
mockWddm->srcReadBuffer = mockWddm->dstWriteBuffer = session->stateSaveAreaHeader.data();
mockWddm->srcReadBufferBaseAddress = mockWddm->dstWriteBufferBaseAddress = session->stateSaveAreaVA;
session->wddm = mockWddm;
ze_device_thread_t thread = {0, 0, 0, 0};
session->allThreads[EuThread::ThreadId(0, thread)]->stopThread(1u);
zet_debug_memory_space_desc_t desc;
desc.type = ZET_DEBUG_MEMORY_SPACE_TYPE_SLM;
desc.address = 0x10000000;
char output[bufferSize];
auto retVal = session->readMemory(thread, &desc, bufferSize, output);
EXPECT_EQ(ZE_RESULT_ERROR_NOT_AVAILABLE, retVal);
retVal = session->writeMemory(thread, &desc, bufferSize, output);
EXPECT_EQ(ZE_RESULT_ERROR_NOT_AVAILABLE, retVal);
}
TEST_F(DebugApiWindowsTest, GivenModuleDebugAreaVaWhenReadingModuleDebugAreaThenGpuMemoryIsRead) {
auto session = std::make_unique<MockDebugSessionWindows>(zet_debug_config_t{0x1234}, device);
ASSERT_NE(nullptr, session);