On Wed, 2014-12-10 at 01:45 +0100, Petr Machata wrote: > It might happen for macro sections that are larger than half of host > address space (e.g. 2G for 32-bit libdw). The offset would then be > negative, but adding it to the data start would wrap around and do the > right thing, I think. So it's the fact that we need that one bit for > something else that's limiting us here. > > How about this? > > diff --git a/libdw/dwarf_getmacros.c b/libdw/dwarf_getmacros.c > index 0ba3854..bd64d60 100644 > --- a/libdw/dwarf_getmacros.c > +++ b/libdw/dwarf_getmacros.c > @@ -407,7 +407,11 @@ token_from_offset (ptrdiff_t offset, bool accept_0xff) > return offset; > > /* Make sure the offset didn't overflow into the flag bit. */ > - assert ((offset & DWARF_GETMACROS_START) == 0); > + if ((offset & DWARF_GETMACROS_START) != 0) > + { > + __libdw_seterrno (DWARF_E_TOO_BIG); > + return -1; > + }
Perfect. Thanks, Mark