fix: Take regset_desc from correct SSH based on version major

Related-To: NEO-7988
Signed-off-by: Jitendra Sharma <jitendra.sharma@intel.com>
This commit is contained in:
Jitendra Sharma
2024-09-24 16:06:21 +00:00
committed by Compute-Runtime-Automation
parent ede98e3d2c
commit 0b3a6df5db
2 changed files with 34 additions and 1 deletions

View File

@@ -1495,7 +1495,14 @@ ze_result_t DebugSessionImp::registersAccessHelper(const EuThread *thread, const
ze_result_t DebugSessionImp::cmdRegisterAccessHelper(const EuThread::ThreadId &threadId, SIP::sip_command &command, bool write) {
auto stateSaveAreaHeader = getStateSaveAreaHeader();
auto *regdesc = &stateSaveAreaHeader->regHeader.cmd;
const SIP::regset_desc *regdesc = nullptr;
if (stateSaveAreaHeader->versionHeader.version.major == 3) {
regdesc = &stateSaveAreaHeader->regHeaderV3.cmd;
} else if (stateSaveAreaHeader->versionHeader.version.major < 3) {
regdesc = &stateSaveAreaHeader->regHeader.cmd;
} else {
UNRECOVERABLE_IF(true);
}
PRINT_DEBUGGER_INFO_LOG("Access CMD %d for thread %s\n", command.command, EuThread::toString(threadId).c_str());

View File

@@ -2500,6 +2500,32 @@ TEST_F(MultiTileDebugSessionTest, GivenMultitileDeviceWhenCallingAreRequestedThr
using DebugSessionRegistersAccessTestV3 = Test<DebugSessionRegistersAccessV3>;
TEST_F(DebugSessionRegistersAccessTestV3, GivenSipVersion3WhenCallingResumeThenResumeInCmdRegisterIsWritten) {
session->debugArea.reserved1 = 1u;
{
auto pStateSaveAreaHeader = session->getStateSaveAreaHeader();
auto size = pStateSaveAreaHeader->versionHeader.size * 8 +
pStateSaveAreaHeader->regHeaderV3.state_area_offset +
pStateSaveAreaHeader->regHeaderV3.state_save_size * 16;
session->stateSaveAreaHeader.resize(size);
}
session->skipWriteResumeCommand = false;
ze_device_thread_t thread = {0, 0, 0, 0};
EuThread::ThreadId threadId(0, thread);
session->allThreads[threadId]->stopThread(1u);
dumpRegisterState();
auto result = session->resume(thread);
EXPECT_EQ(result, ZE_RESULT_SUCCESS);
EXPECT_EQ(0u, session->readRegistersCallCount);
EXPECT_EQ(0u, session->writeRegistersCallCount);
EXPECT_EQ(1u, session->writeResumeCommandCalled);
}
TEST_F(DebugSessionRegistersAccessTestV3, givenV3StateSaveHeaderWhenCalculatingSrMagicOffsetResultIsCorrect) {
auto pStateSaveAreaHeader = session->getStateSaveAreaHeader();