On Sat, May 01, 2021 at 06:03:37PM +0200, Mark Wielaard wrote: > Hi, > > On Sat, 2021-05-01 at 17:59 +0200, Mark Wielaard wrote: > > There is __libdw_form_val_compute_len which already handles > > DW_FORM_indirect: > > > > case DW_FORM_indirect: > > get_uleb128 (u128, valp, endp); > > // XXX Is this really correct? > > result = __libdw_form_val_len (cu, u128, valp); > > if (result != (size_t) -1) > > result += valp - startp; > > else > > return (size_t) -1; > > break; > > > > I believe the XXX question can be answered with: Yes, the result is the > > size of the actual FORM data plus the size of the uleb128 encoding that > > FORM (which is valp - startp). And it probably should check like your > > code does that valp != DW_FORM_indirect && valp != > > DW_FORM_implicit_const. I'll sent a patch to do that. > > Patch attached.
The patch looks reasonable to me, Mark, thanks.