Add elf_local_rip
to UnwindContext (debug tool)
This commit is contained in:
parent
4369a4f3cc
commit
242bfce9e1
2 changed files with 14 additions and 0 deletions
|
@ -107,6 +107,9 @@ class DwarfInterpret {
|
||||||
uintptr_t rip;
|
uintptr_t rip;
|
||||||
uintptr_t rsp;
|
uintptr_t rsp;
|
||||||
uintptr_t rbp;
|
uintptr_t rbp;
|
||||||
|
|
||||||
|
/// This context's `RIP` minus its ELF file load offset
|
||||||
|
uintptr_t elf_local_rip() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
public: // methods
|
public: // methods
|
||||||
|
@ -180,6 +183,12 @@ class DwarfInterpret {
|
||||||
*/
|
*/
|
||||||
UnwindContext unwind_context(const UnwindContext& ctx);
|
UnwindContext unwind_context(const UnwindContext& ctx);
|
||||||
|
|
||||||
|
/** Get the offset for the instruction pointer.
|
||||||
|
*
|
||||||
|
* This offset is such that `actual_rip - pc_offset` is the ELF-local
|
||||||
|
* PC (ie. what readelf gives). */
|
||||||
|
uintptr_t get_pc_offset() const { return pc_offset; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
DwarfInterpret(const MemoryMap::MapEntry& memory_object);
|
DwarfInterpret(const MemoryMap::MapEntry& memory_object);
|
||||||
|
|
||||||
|
|
|
@ -36,6 +36,11 @@ using namespace dwarf;
|
||||||
MemoryMap DwarfInterpret::memory_map;
|
MemoryMap DwarfInterpret::memory_map;
|
||||||
map<int, unique_ptr<DwarfInterpret> > DwarfInterpret::instances;
|
map<int, unique_ptr<DwarfInterpret> > DwarfInterpret::instances;
|
||||||
|
|
||||||
|
uintptr_t DwarfInterpret::UnwindContext::elf_local_rip() const {
|
||||||
|
return rip - DwarfInterpret::acquire(rip).get_pc_offset();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
DwarfInterpret::DwarfInterpret(const MemoryMap::MapEntry& memory_object)
|
DwarfInterpret::DwarfInterpret(const MemoryMap::MapEntry& memory_object)
|
||||||
: map_entry(memory_object)
|
: map_entry(memory_object)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue