jaydeep added inline comments. ================ Comment at: source/Target/RegisterContext.cpp:106-116 @@ -105,3 +105,13 @@ uint32_t reg = ConvertRegisterKindToRegisterNumber (eRegisterKindGeneric, LLDB_REGNUM_GENERIC_PC); - return ReadRegisterAsUnsigned (reg, fail_value); + uint64_t pc = ReadRegisterAsUnsigned (reg, fail_value); + + if (pc != fail_value) + { + TargetSP target_sp = m_thread.CalculateTarget(); + Target *target = target_sp.get(); + Address addr (pc); + pc = addr.GetOpcodeLoadAddress (target); + } + + return pc; } ---------------- clayborg wrote: > Bit #0 should be stripped from the PC before it is figured out and the frame > might need to track the address class, so this change shouldn't be needed. We > don't want extra bits floating around in our code that we have to strip > everywhere. This should be done as the stack frames are being created. The > frame will need to keep track of the address class in case the address > doesn't map back to a shared library (JITed code might not have a module > describing the code). So this code should be removed and the backtracer will > need to sanitize the addresses as the PC values are unwound. The breakpoint is set on OpcodeAddress (bit #0 clear), but target returns CallableAddress (bit #0 set) when breakpoint is hit.
Set using: StoppointLocation (loc_id, addr.GetOpcodeLoadAddress(&owner.GetTarget()), hardware) Find using: addr_t pc = thread_sp->GetRegisterContext()->GetPC() + m_breakpoint_pc_offset; lldb::BreakpointSiteSP bp_site_sp = thread_sp->GetProcess()->GetBreakpointSiteList().FindByAddress(pc); We either need to clear bit #0 from the PC we get or need to set the breakpoint on CallableAddress (which would need LineTable in CallableAddress form). Repository: rL LLVM http://reviews.llvm.org/D12079 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits