Lines Matching full:shadow
162 illogical for a shadow tmp itself to be shadowed.
186 current kind and possibly shadow temps for each temp in the
222 /* SHADOW TMP MANAGEMENT. Shadow tmps are allocated lazily (on
229 Shadow IRTemps are therefore allocated on demand. mce.tmpMap is a
230 table indexed [0 .. n_types-1], which gives the current shadow for
232 It is necessary to support making multiple assignments to a shadow
233 -- specifically, after testing a shadow for definedness, it needs
236 (2) (more important reason): Therefore, when a shadow needs to get
241 IRTemp_INVALID and we are hoping to read that shadow tmp, it means
286 /* Allocate a new shadow for the given original tmp. This means any
287 previous shadow is abandoned. This is needed because it is
288 necessary to give a new value to a shadow once it has been tested
290 this. Instead we must abandon the old shadow, allocate a new one
294 if a shadow temp already existed -- we simply allocate a new one
323 by constants, and temps are shadowed by the corresponding shadow
342 like it's from shadow code? */
370 /* Shadow state is always accessed using integer types. This returns
372 given type. The only valid shadow types are Bit, I8, I16, I32,
398 /* Produce a 'defined' value of the given shadow type. Should only be
399 supplied shadow types (Bit/I8/I16/I32/UI64). */
762 /* Note, dst_ty is a shadow type, not an original type. */
1195 tmp, it will be shadowed by a tmp, and so we can set the shadow to
1197 new tmp to carry the new 'defined' shadow value, and update the
1199 value to an existing shadow tmp as this breaks SSAness.
1202 |atom|'s shadow temp set to 'defined', ONLY in the case that
1359 /* If |atom| is shadowed by an IRTemp, set the shadow tmp to be
1361 True at run-time. Do the update by setting the orig->shadow
1362 mapping for tmp to reflect the fact that this shadow is getting
1423 /* Generate into bb suitable actions to shadow this Put. If the state
1425 supplied V bits to the shadow state. We can pass in either an
1436 // Don't do shadow PUTs if we're not doing undefined value checking.
1437 // Their absence lets Vex's optimiser remove all the shadow computation
1438 // that they depend on, which includes GETs of the shadow registers.
1459 /* Do a plain shadow Put. */
1489 // Don't do shadow PUTIs if we're not doing undefined value checking.
1490 // Their absence lets Vex's optimiser remove all the shadow computation
1491 // that they depend on, which includes GETIs of the shadow registers.
1509 /* Do a cloned version of the Put that refers to the shadow
1532 /* return a cloned version of the Get that refers to the shadow
1557 /* return a cloned version of the Get that refers to the shadow
1573 specified shadow type.
2760 /*--- Generate shadow values from all kinds of IRExprs. ---*/
4284 selection of shadow operation implicitly duplicates the logic in
4618 the IR-mandated 0x55..55 value, and no checks nor shadow loads are
4632 the address (shadow) to 'defined' following the test. */
4636 data V bits from shadow memory. */
4745 /* Generate IR to do a shadow load. The helper is expected to check
4783 Generate IR to do a shadow load from ADDR and return the V bits.
4784 The loaded type is TY. The loaded data is then (shadow) widened by
4817 /* Now (shadow-) widen the loaded V bits to the desired width. In
4956 /*--- Generate shadow stmts from all kinds of IRStmts. ---*/
4966 /* vatom is vbits-value and as such can only have a shadow type. */
5006 /* Generate a shadow store. |addr| is always the original address
5056 // shadow computation ops that precede it.
5073 the address (shadow) to 'defined' following the test. Both of
5078 bits into shadow memory. */
5372 /* Because we may do multiple shadow loads/stores from the same
5547 /* Either ORIG and SHADOW are both IRExpr.RdTmps, or they are both
5551 In which case: this assigns the shadow value SHADOW to the IR
5552 shadow temporary associated with ORIG. That is, ORIG, being an
5553 original temporary, will have a shadow temporary associated with
5555 been no IR emitted to actually write a shadow value into that
5557 value in SHADOW into said temporary, so that after this call,
5558 IRExpr.RdTmps of ORIG's shadow temp will correctly pick up the
5559 value in SHADOW.
5561 Point is to allow callers to compute "by hand" a shadow value for
5564 How do we know that that shadow associated with ORIG has not so far
5572 IRAtom* orig, IRAtom* shadow )
5575 tl_assert(isShadowAtom(mce, shadow));
5578 tl_assert(shadow->tag == Iex_Const);
5581 tl_assert(shadow->tag == Iex_RdTmp);
5584 shadow);
5588 shadow);
5608 4. load old#,oldB from shadow memory; this also checks
5616 store data#,dataB to shadow memory
5620 shadow data to be incorrectly checked and/or updated:
5623 condition is derived from outputs of 5. However, the shadow
5626 (shadow) value at the address, and then we resume, hence
5627 overwriting the shadow value written by the other thread.
5630 make both the original and shadow accesses into a single atomic
5779 /* 4. fetch old# from shadow memory; this also checks
5802 /* Note that 'C' is kinda faking it; it is indeed a non-shadow
5809 store data# to shadow memory */
5900 /* 4. fetch old# from shadow memory; this also checks
5946 /* Note that 'C' is kinda faking it; it is indeed a non-shadow
5965 store data# to shadow memory */
5992 assignment of the loaded (shadow) data to the result temporary.
6023 NULL /* shadow data */,
6038 a no-origin value for the origin shadow of .result.
6057 NULL /* shadow data */,
6379 assignment to the corresponding (V) shadow temp, marking it as
6385 assignment for the corresponding origin (B) shadow, claiming
6402 VG_(printf)("create shadow tmp(s) for preamble tmp [%d] ty ", j);
6446 NULL /* shadow atom */, NULL /* guard */ );
6457 NULL /* shadow data */,
6743 Generate IR to do a shadow origins load from BASEADDR+OFFSET and
6816 /* Generate IR to do a shadow origins load from BASEADDR+OFFSET. The
6830 Generate IR to do a shadow origin load from ADDR+BIAS and return
6861 /* Generate a shadow origins store. guard :: Ity_I1 controls whether
6955 /* Do a shadow indexed get of the same size, giving t1. Take
7150 /* Because we may do multiple shadow loads/stores from the same
7401 by an assignment of the loaded (shadow) data the result
7420 place where the V-shadow for .result is constructed, in