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 mail@milianw.de http://milianw.de