[Dwarf-Discuss] interpretation of DW_OP_mod
Michael Eager
eager@eagercon.com
Tue Jan 19 21:04:02 GMT 2010
Tom Tromey wrote:
> While looking into a gdb bug I came across an oddity in GCC's unwinder.
> It treats the operands of DW_OP_mod as signed:
>
> case DW_OP_mod:
> result = (_Unwind_Sword) second % (_Unwind_Sword) first;
> break;
>
> Other programs (valgrind 3.3.1, according to google code search) also
> follow this interpretation -- I assume because it seems strange to have
> signed division but unsigned modulus.
>
> Is this a (widespread) bug in these programs? Or an oversight in the
> spec?
DW_OP_mod is defined to be an unsigned operation.
I believe that this is intentional, not an oversight. There is an
ambiguity in the modulus operation on signed values, where some
implementations compute the sign of the result to be the same as the
divisor and others have the sign the same as the dividend. So the
result of (-7 % 3) could be either -1 or 2.
There's no such ambiguity with unsigned modulus.
--
Michael Eager eager at eagercon.com
1960 Park Blvd., Palo Alto, CA 94306 650-325-8077
More information about the Dwarf-discuss
mailing list