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