[Dwarf-discuss] Clarification: DW_OP_mod doesn't specify which definition of modulo
Mark Wielaard
mark@klomp.org
Fri Nov 7 17:18:30 GMT 2025
Hi Ben,
On Fri, 2025-11-07 at 08:09 -0800, Ben Woodard wrote:
> On 11/7/25 6:58 AM, Mark Wielaard wrote:
> > On Thu, 2025-11-06 at 11:34 -0800, Ben Woodard via Dwarf-discuss wrote:
> >
> > I think renaming is really confusing. And I think extending to
> > supporting floating point types should be a separate issue that would
> > also look at the other operators.
> >
> > Maybe a compromise would be to keep DW_OP_mod (and make DW_OP_rem an
> > alias?)
>
> I would do it the other way around make DW_OP_mod be a legacy alias and
> call the same operation DW_OP_rem.
I think that is fine, as long as they have the same constant value
(0x1d).
> With Jakub's example, I think that we have a compelling reason to expand
> the domain of DW_OP_rem (the former DW_OP_mod) to include signed
> integral types as well as unsigned integral types. His example seems to
> require the semantics of C99's % operator (truncated division).
>
> If we do this, then it will be backward compatible. The only thing that
> we would be changing is the domain over which the current DW_OP_mod
> operates. We are not changing any of the semantics.
Because the semantics weren't really defined for the expanded domain,
which means e.g. gdb does interpret it differently.
> I'm ambivalent about expanding the domain to floating point values. If
> someone has a reason for having it work on floating point types, then
> sure why not. It is a bit of extra code in every consumer but whatever.
And it makes us have to define how floating point values are
represented and pick a specific interpretation of the operations.
> What I really care about is that when we update the description of
> DW_OP_rem (the operation formerly known as DW_OP_mod) we specify both
> the domain of the operator as well as the algorithm used.
I think doing both a renaming and redefining the interpretation of the
operation and domain at the same time is super confusing. Better to
just introduce two new operations for the expanded domain.
> > Then introduce new DW_OP_modulo (defined using floored
> > division)
> Again I'm personally ambivalent about the need for this. I don't think
> that it is going to be used very often and I think if we do define it we
> should consider pushing it into the new DW_OP_extended operation
> encoding space. This will make its encoding a two byte operation but it
> will reserve more of the one byte encodings for more frequently used
> operations.
Sure DW_OP_modulo and DW_OP_remainder could be "extended" operations.
> > and DW_OP_remainder (defined using truncated division)
> > operators that are only to be used with typed DWARF stack values?
>
> I really do believe that a better approach is to rename and expand the
> domain of the current DW_OP_mod rather than adding another new special
> purpose operator.
I disagree. I think just leave DW_OP_mod for legacy operation on the
generic type and have two clearly defined new DW_OP_modulo and
DW_OP_remainder for typed DWARF stack values is much clearer.
Cheers,
Mark
More information about the Dwarf-discuss
mailing list