From 675fb1ddeec8cd22e17ab989f8a813a375ae6226 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 10 Sep 2008 17:43:42 +0200 Subject: Rename _stp_module module_base output to dwarf_module_base and document. --- runtime/ChangeLog | 5 +++++ runtime/sym.h | 7 +++++-- runtime/unwind.c | 6 ++++-- 3 files changed, 14 insertions(+), 4 deletions(-) (limited to 'runtime') diff --git a/runtime/ChangeLog b/runtime/ChangeLog index 6ff15b8a..2438ee5e 100644 --- a/runtime/ChangeLog +++ b/runtime/ChangeLog @@ -1,3 +1,8 @@ +2008-09-10 Mark Wielaard + + * sym.h (_stp_module): Rename module_base to dwarf_module_base. + * unwind.c (adjustStartLoc): Document and use dwarf_module_base. + 2008-09-10 Mark Wielaard * runtime.h (CONFIG_FRAME_POINTER): Don't enable when diff --git a/runtime/sym.h b/runtime/sym.h index 564f4eb2..5888d2c7 100644 --- a/runtime/sym.h +++ b/runtime/sym.h @@ -33,8 +33,11 @@ struct _stp_module { /* any notifier hooks that will tell us when a module */ /* is unloading. */ unsigned long module; /* XXX: why not struct module * ? */ - - unsigned long module_base; + + /* This is to undo .debug_frame relocation performed by elfutils, */ + /* which is done during the translate phase when we encode the */ + /* unwind data into the module. See adjustStartLoc() in unwind.c. */ + unsigned long dwarf_module_base; /* the stack unwind data for this module */ void *unwind_data; diff --git a/runtime/unwind.c b/runtime/unwind.c index db8ae664..bc8a93dc 100644 --- a/runtime/unwind.c +++ b/runtime/unwind.c @@ -550,7 +550,9 @@ static int processCFI(const u8 *start, const u8 *end, unsigned long targetLoc, s return result && ptr.p8 == end && (targetLoc == 0 || state->label == NULL); } -// This is an address inside a module, adjust. +// If this is an address inside a module, adjust for section relocation +// and the elfutils base relocation done during loading of the .dwarf_frame +// in translate.cxx. static unsigned long adjustStartLoc (unsigned long startLoc, struct _stp_module *m, @@ -560,7 +562,7 @@ adjustStartLoc (unsigned long startLoc, { startLoc = _stp_module_relocate (m->name, s->name, startLoc); - startLoc -= m->module_base; + startLoc -= m->dwarf_module_base; } return startLoc; } -- cgit