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