Currently some instruction may leave an output value undefined, e.g. ROR.
Ideally, circuit should accept both (we consider OF to be undefined after ->)
t1: [ ... ] -> t2: [ OF = 0 ]t1: [ ... ] -> t2: [ OF = 1 ]
[x] remill semantics needs to be modified. Currently undefined result are also undefined in a semantics (sometimes undefined intrinsic is used, sometimes they are left as they were or arbitrary value is used). To handle this properly semantics must be uniformed - ideally by using __remill_undefined.
In circuitous we have several ways of handling this:
[x] Assume tracer will preserve undefined values and adjust
[ ] Add define bit into trace, that says if value if defined (undefined value cannot be read) - does not require tracer modification but can be done in circuitous interpreter instead.
Currently some instruction may leave an output value undefined, e.g.
ROR
. Ideally, circuit should accept both (we considerOF
to be undefined after->
)t1: [ ... ] -> t2: [ OF = 0 ]
t1: [ ... ] -> t2: [ OF = 1 ]
__remill_undefined
.In
circuitous
we have several ways of handling this: