55using namespace llvm ;
66using namespace lldb ;
77
8- lldb_private::ThreadTask::ThreadTask (tid_t tid, addr_t async_ctx,
9- ExecutionContext &exe_ctx)
8+ namespace lldb_private {
9+
10+ ThreadTask::ThreadTask (tid_t tid, addr_t async_ctx, ExecutionContext &exe_ctx)
1011 : Thread(exe_ctx.GetProcessRef(), tid, true ),
11- m_concrete_reg_ctx_sp (exe_ctx.GetFrameSP()->GetRegisterContext()) {
12+ m_reg_info_sp (exe_ctx.GetFrameSP()->GetRegisterContext()) {
1213 m_async_ctx = async_ctx;
13- auto ptr_size = exe_ctx.GetTargetRef ().GetArchitecture ().GetAddressByteSize ();
14+ uint32_t ptr_size =
15+ exe_ctx.GetTargetRef ().GetArchitecture ().GetAddressByteSize ();
1416 // A simplified description of AsyncContext. See swift/Task/ABI.h
1517 // struct AsyncContext {
1618 // AsyncContext *Parent; // offset 0
1719 // TaskContinuationFunction *ResumeParent; // offset 8
1820 // };
19- auto resume_offset = ptr_size; // offsetof(AsyncContext, ResumeParent)
20- auto resume_ptr = async_ctx + resume_offset;
21+ uint32_t resume_offset = ptr_size; // offsetof(AsyncContext, ResumeParent)
22+ uint32_t resume_ptr = async_ctx + resume_offset;
2123 Status status;
22- m_pc = exe_ctx.GetProcessRef ().ReadPointerFromMemory (resume_ptr, status);
24+ m_resume_fn =
25+ exe_ctx.GetProcessRef ().ReadPointerFromMemory (resume_ptr, status);
2326}
2427
2528RegisterContextSP lldb_private::ThreadTask::GetRegisterContext () {
2629 if (!m_async_reg_ctx_sp)
2730 m_async_reg_ctx_sp = std::make_shared<RegisterContextTask>(
28- *this , m_concrete_reg_ctx_sp, m_pc , m_async_ctx);
31+ *this , m_reg_info_sp, m_resume_fn , m_async_ctx);
2932 return m_async_reg_ctx_sp;
3033}
3134
32- lldb_private::RegisterContextTask::RegisterContextTask (
33- Thread &thread, RegisterContextSP reg_info_sp, addr_t pc, addr_t async_ctx)
35+ RegisterContextTask::RegisterContextTask (Thread &thread,
36+ RegisterContextSP reg_info_sp,
37+ addr_t resume_fn, addr_t async_ctx)
3438 : RegisterContext(thread, 0 ), m_reg_info_sp(reg_info_sp),
35- m_async_ctx(async_ctx), m_pc(pc ) {
39+ m_async_ctx(async_ctx), m_resume_fn(resume_fn ) {
3640 auto &target = thread.GetProcess ()->GetTarget ();
3741 auto triple = target.GetArchitecture ().GetTriple ();
3842 if (auto regnums = GetAsyncUnwindRegisterNumbers (triple.getArch ()))
3943 m_async_ctx_regnum = regnums->async_ctx_regnum ;
4044}
4145
42- bool lldb_private::RegisterContextTask::ReadRegister (
43- const RegisterInfo *reg_info, RegisterValue ®_value) {
46+ bool RegisterContextTask::ReadRegister (const RegisterInfo *reg_info,
47+ RegisterValue ®_value) {
48+ if (!reg_info)
49+ return false ;
50+
4451 if (reg_info->kinds [eRegisterKindGeneric] == LLDB_REGNUM_GENERIC_PC) {
45- reg_value = m_pc ;
52+ reg_value = m_resume_fn ;
4653 return true ;
4754 }
4855 if (reg_info->kinds [eRegisterKindLLDB] == m_async_ctx_regnum) {
@@ -51,3 +58,5 @@ bool lldb_private::RegisterContextTask::ReadRegister(
5158 }
5259 return false ;
5360}
61+
62+ } // namespace lldb_private
0 commit comments