mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-31 12:11:31 +08:00
Windows debugger access to SLM
Resolves: NEO-7382 Signed-off-by: Matias Cabral <matias.a.cabral@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
51fa04fc60
commit
0772d32a76
@@ -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)) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user