]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
On s390: Terminate the superblock with Ijk_EmFail if an stfle insn
authorFlorian Krohm <florian@eich-krohm.de>
Sun, 26 Aug 2012 03:41:56 +0000 (03:41 +0000)
committerFlorian Krohm <florian@eich-krohm.de>
Sun, 26 Aug 2012 03:41:56 +0000 (03:41 +0000)
is encountered but not supported on the host.

git-svn-id: svn://svn.valgrind.org/vex/trunk@2485

VEX/priv/guest_s390_toIR.c
VEX/priv/host_s390_defs.c
VEX/priv/host_s390_isel.c
VEX/priv/main_main.c
VEX/pub/libvex_emnote.h

index c3aa4a05fb9b232f864e67d75d89255744be6800..f9ec22cacadd840a621891df1cbdac6d72e0179b 100644 (file)
@@ -10810,6 +10810,15 @@ s390_irgen_STCKE(IRTemp op2addr)
 static HChar *
 s390_irgen_STFLE(IRTemp op2addr)
 {
+   if (! s390_host_has_stfle) {
+      stmt(IRStmt_Put(S390X_GUEST_OFFSET(guest_EMNOTE),
+           mkU32(EmFail_S390X_stfle)));
+      put_IA(mkaddr_expr(guest_IA_next_instr));
+      dis_res->whatNext = Dis_StopHere;
+      dis_res->jk_StopHere = Ijk_EmFail;
+      return "stfle";
+   }
+
    IRDirty *d;
    IRTemp cc = newTemp(Ity_I64);
 
index 56bb986bf23804898ddf2e52fa39d2dbbb41dd03..aea1073d15ba4f07acbe31a57d84ea3299825070 100644 (file)
@@ -7738,6 +7738,7 @@ s390_insn_xassisted_emit(UChar *buf, const s390_insn *insn,
    case Ijk_Sys_syscall: trcval = VEX_TRC_JMP_SYS_SYSCALL; break;
    case Ijk_Yield:       trcval = VEX_TRC_JMP_YIELD;       break;
    case Ijk_EmWarn:      trcval = VEX_TRC_JMP_EMWARN;      break;
+   case Ijk_EmFail:      trcval = VEX_TRC_JMP_EMFAIL;      break;
    case Ijk_MapFail:     trcval = VEX_TRC_JMP_MAPFAIL;     break;
    case Ijk_NoDecode:    trcval = VEX_TRC_JMP_NODECODE;    break;
    case Ijk_TInval:      trcval = VEX_TRC_JMP_TINVAL;      break;
index 237b755f65ba06c52a4d83cb1f85e5eeaf49c855..8b673fa61dfd7b70d76d697529481ff4fe6f112a 100644 (file)
@@ -2596,6 +2596,7 @@ s390_isel_stmt(ISelEnv *env, IRStmt *stmt)
 
       /* Case: assisted transfer to arbitrary address */
       switch (stmt->Ist.Exit.jk) {
+      case Ijk_EmFail:
       case Ijk_NoDecode:
       case Ijk_TInval:
       case Ijk_Sys_syscall:
@@ -2709,6 +2710,7 @@ iselNext(ISelEnv *env, IRExpr *next, IRJumpKind jk, int offsIP)
 
    /* Case: some other kind of transfer to any address */
    switch (jk) {
+   case Ijk_EmFail:
    case Ijk_NoDecode:
    case Ijk_TInval:
    case Ijk_Sys_syscall:
index ce7351c65be2dd636b3974d5658ec639eaa93a8c..33c362e85c99a79f9986c4af3df43c4a4decc79e 100644 (file)
@@ -1026,6 +1026,8 @@ HChar* LibVEX_EmNote_string ( VexEmNote ew )
         return "PPC64 function redirection stack overflow";
      case EmWarn_PPC64_redir_underflow:
         return "PPC64 function redirection stack underflow";
+   case EmFail_S390X_stfle:
+        return "Instruction stfle is not supported on this host";
      default: 
         vpanic("LibVEX_EmNote_string: unknown warning");
    }
index f7b68eb040c8b2b1031739c01094603ea51231fa..cdedfe2e78a427d3e55afe675717fa9c83d2548b 100644 (file)
@@ -85,6 +85,9 @@ typedef
       EmWarn_PPC64_redir_overflow,
       EmWarn_PPC64_redir_underflow,
 
+      /* stfle insn is not supported on this host */
+      EmFail_S390X_stfle,
+
       EmNote_NUMBER
    }
    VexEmNote;