ProcessSP process_sp(thread.GetProcess());
RegisterValue reg_value;
-
-#if 0
- // This code adds an extra frame so that we don't lose the function that we came from
- // by pushing the PC and the FP and then writing the current FP to point to the FP value
- // we just pushed. It is disabled for now until the stack backtracing code can be debugged.
-
- // Save current PC
- const RegisterInfo *fp_reg_info = reg_ctx->GetRegisterInfo (eRegisterKindGeneric, LLDB_REGNUM_GENERIC_FP);
- if (reg_ctx->ReadRegister(pc_reg_info, reg_value))
- {
- if (log)
- log->Printf("Pushing the current PC onto the stack: 0x%" PRIx64 ": 0x%" PRIx64, (uint64_t)sp, reg_value.GetAsUInt64());
-
- if (!process_sp->WritePointerToMemory(sp, reg_value.GetAsUInt64(), error))
- return false;
-
- sp -= 8;
-
- // Save current FP
- if (reg_ctx->ReadRegister(fp_reg_info, reg_value))
- {
- if (log)
- log->Printf("Pushing the current FP onto the stack: 0x%" PRIx64 ": 0x%" PRIx64, (uint64_t)sp, reg_value.GetAsUInt64());
-
- if (!process_sp->WritePointerToMemory(sp, reg_value.GetAsUInt64(), error))
- return false;
- }
- // Setup FP backchain
- reg_value.SetUInt64 (sp);
-
- if (log)
- log->Printf("Writing FP: 0x%" PRIx64 " (for FP backchain)", reg_value.GetAsUInt64());
-
- if (!reg_ctx->WriteRegister(fp_reg_info, reg_value))
- {
- return false;
- }
-
- sp -= 8;
- }
-#endif
-
if (log)
log->Printf("Pushing the return address onto the stack: 0x%" PRIx64
": 0x%" PRIx64,