On Donnerstag, 1. November 2018 10:12:41 CET Milian Wolff wrote: > Please ignore this patch for now - I only looked at one specific case where > this changed the behavior to be in line with libunwind. Sadly, it breaks > other previously working situations. I need to look at this in more detail.
Yep, that patch is indeed utterly broken - please ignore it and excuse the
noise.
I was apparently very confused by the different access patterns in libunwind
vs. elfutils. Elfutils is validating every location referenced in the FDE (cf.
frame_unwind.c:501). Libunwind on the other hand doesn't do this - it only
accesses the memory to read the location referenced by the return address
register.
Cheers
> On Donnerstag, 1. November 2018 09:48:18 CET Milian Wolff wrote:
> > According to the DWARF v3 standard ยง6.4.3 3., all call frame
> > instructions up to L1 <= L2 should be interpreted for an FDE.
> > Elfutils currently only interprets L1 < L2, potentially missing
> > some instructions when L1 directly points at a DW_CFA_*_loc boundary.
> >
> > This patch changes the behavior and makes elfutils behave like
> > libunwind in that regard.
> > ---
> >
> > libdw/cfi.c | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/libdw/cfi.c b/libdw/cfi.c
> > index 341e055b..332c6b8b 100644
> > --- a/libdw/cfi.c
> > +++ b/libdw/cfi.c
> > @@ -125,7 +125,7 @@ execute_cfi (Dwarf_CFI *cache,
> >
> > fs->regs[regno].value = (r_value); \
> >
> > } while (0)
> >
> > - while (program < end)
> > + while (program <= end)
> >
> > {
> >
> > uint8_t opcode = *program++;
> > Dwarf_Word regno;
--
Milian Wolff
[email protected]
http://milianw.de
signature.asc
Description: This is a digitally signed message part.
