Closed eiselekd closed 8 years ago
Maybe something like:
diff --git a/tnt_translate.c b/tnt_translate.c
index f734d9e..357b04c 100644
--- a/tnt_translate.c
+++ b/tnt_translate.c
@@ -4506,6 +4506,12 @@ void do_shadow_WRTMP ( MCEnv* mce, IRStmt *clone, IRTemp tmp, IRExpr* expr )
assign( 'V', mce, findShadowTmpV( mce, tmp ), expr2vbits( mce, expr ) );
if( expr->tag != Iex_Const ){
+
+ IRType ty = typeOfIRTemp(mce->sb->tyenv, tmp);
+ if (mce->hWordTy == Ity_I64 && ty == Ity_V256) {
+ return;
+ }
+
di2 = create_dirty_WRTMP( mce, clone, tmp, expr );
if( di2 != NULL )
@@ -4631,7 +4637,8 @@ void do_shadow_Store ( MCEnv* mce,
the address (shadow) to 'defined' following the test. */
// Taintgrind: What to do in the vdata case?
// vdata cases (CAS, Dirty) are handled by their resp. shadow routines
- if( data && clone ){
+ if( data && clone &&
+ !(mce->hWordTy == Ity_I64 && typeOfIRExpr(mce->sb->tyenv, data) == Ity_V256)) {
di2 = create_dirty_STORE( mce, clone, end, 0/*resSC*/, addr, data );
if ( di2 ) complainIfTainted( mce, addr, di2 );
}
@@ -6959,6 +6966,7 @@ typedef
break;
case Ist_Put:
+ if (!(mce.hWordTy == Ity_I64 && typeOfIRExpr(mce.sb->tyenv, st->Ist.Put.data) == Ity_V256))
do_shadow_PUT( &mce,
clone,
st->Ist.Put.offset,
Hi could you try applying the patch for #10 and see if that works? I vaguely remember handling the Ity_256/V256 issue. Thanks!
Confirm, patch for #10 made it continue.
Thanks for confirming. Closing.
I encountered a problem where tnt_translate.c:convert_Value() failes because Ity_V256 is not handled in the switch statement when tyH == Ity_I64. The function _dl_runtime_resolve_avx seems to save all simd registers on the stack before running _dl_runtime_resolve and does a lot of movaps,vmovdqa instructions. Is there a possibility (for me) to fix this? I dont care about tainting of simd instructions however maybe they can be ignored?