Skip to content

Commit d3deb21

Browse files
Jeffrey Tanclayborg
authored andcommitted
Fix AMD live debugging regression for shadow thread
1 parent c1a00ac commit d3deb21

File tree

4 files changed

+11
-7
lines changed

4 files changed

+11
-7
lines changed

lldb/source/Plugins/Process/Utility/RegisterContextAmdGpuImpl.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ std::unordered_map<uint64_t,
2828
static std::unordered_map<uint64_t, std::once_flag> s_register_info_init_flags;
2929

3030
RegisterContextAmdGpuImpl::RegisterContextAmdGpuImpl(
31-
amd_dbgapi_architecture_id_t architecture_id)
32-
: m_architecture_id(architecture_id) {
31+
amd_dbgapi_architecture_id_t architecture_id, bool is_shadow_thread)
32+
: m_architecture_id(architecture_id), m_is_shadow_thread(is_shadow_thread) {
3333
InitializeRegisterInfo();
3434
InitializeRegisterData();
3535
}
@@ -365,8 +365,8 @@ Status RegisterContextAmdGpuImpl::ReadRegister(
365365

366366
auto amd_reg_id = arch_info.lldb_num_to_amd_reg_id.at(lldb_reg_num);
367367

368-
if (!wave_id) {
369-
// No wave ID, return without error (dummy values)
368+
if (!wave_id || m_is_shadow_thread) {
369+
// No wave ID or shawdown thread, return without error (dummy values)
370370
return error;
371371
}
372372

lldb/source/Plugins/Process/Utility/RegisterContextAmdGpuImpl.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ class RegisterValue;
2828
/// register information and reading/writing register values.
2929
class RegisterContextAmdGpuImpl {
3030
public:
31-
RegisterContextAmdGpuImpl(amd_dbgapi_architecture_id_t architecture_id);
31+
RegisterContextAmdGpuImpl(amd_dbgapi_architecture_id_t architecture_id,
32+
bool is_shadow_thread);
3233
~RegisterContextAmdGpuImpl() = default;
3334

3435
/// Invalidate all register values.
@@ -94,6 +95,7 @@ class RegisterContextAmdGpuImpl {
9495
// AMD dbgapi architecture ID
9596
amd_dbgapi_architecture_id_t m_architecture_id;
9697

98+
bool m_is_shadow_thread;
9799
// Register data and validity tracking (per-instance)
98100
std::vector<uint8_t> m_register_data;
99101
std::vector<bool> m_register_valid;

lldb/source/Plugins/Process/amdgpu-core/RegisterContextAmdGpu.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ RegisterContextAmdGpu::RegisterContextAmdGpu(Thread &thread)
2121
amd_dbgapi_architecture_id_t architecture_id =
2222
amdgpu_thread->GetArchitectureId();
2323

24-
m_impl = std::make_unique<RegisterContextAmdGpuImpl>(architecture_id);
24+
m_impl = std::make_unique<RegisterContextAmdGpuImpl>(
25+
architecture_id, /*is_shawdow_thread=*/false);
2526
}
2627

2728
void RegisterContextAmdGpu::InvalidateAllRegisters() {

lldb/tools/lldb-server/Plugins/AMDGPU/RegisterContextAmdGpu.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ RegisterContextAmdGpu::RegisterContextAmdGpu(
2525
amd_dbgapi_architecture_id_t architecture_id =
2626
thread->GetProcess().m_debugger->m_architecture_id;
2727

28-
m_impl = std::make_unique<RegisterContextAmdGpuImpl>(architecture_id);
28+
m_impl = std::make_unique<RegisterContextAmdGpuImpl>(
29+
architecture_id, /*is_shawdow_thread=*/thread->IsShadowThread());
2930
}
3031

3132
void RegisterContextAmdGpu::InvalidateAllRegisters() {

0 commit comments

Comments
 (0)