]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Track API changes in vex r1272.
authorJulian Seward <jseward@acm.org>
Mon, 18 Jul 2005 11:41:15 +0000 (11:41 +0000)
committerJulian Seward <jseward@acm.org>
Mon, 18 Jul 2005 11:41:15 +0000 (11:41 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4159

coregrind/m_sigframe/sigframe-ppc32-linux.c
coregrind/m_syswrap/syscall-ppc32-linux.S
coregrind/m_syswrap/syswrap-main.c
coregrind/m_syswrap/syswrap-ppc32-linux.c
memcheck/mc_translate.c

index 6d9e00427f04d59315f9c9cf8af0493dcf917729..d99e8d2a49bb8a0d9d47e821bbe29b05628430e0 100644 (file)
@@ -151,8 +151,8 @@ void stack_mcontext ( struct vki_mcontext *mc,
    mc->mc_gregs[VKI_PT_ORIG_R3] = tst->arch.vex.guest_GPR3;
    mc->mc_gregs[VKI_PT_CTR]     = tst->arch.vex.guest_CTR;
    mc->mc_gregs[VKI_PT_LNK]     = tst->arch.vex.guest_LR;
-   mc->mc_gregs[VKI_PT_XER]     = tst->arch.vex.guest_XER;
-   mc->mc_gregs[VKI_PT_CCR]     = LibVEX_GuestPPC32_get_cr(&tst->arch.vex);
+   mc->mc_gregs[VKI_PT_XER]     = LibVEX_GuestPPC32_get_XER(&tst->arch.vex);
+   mc->mc_gregs[VKI_PT_CCR]     = LibVEX_GuestPPC32_get_CR(&tst->arch.vex);
    mc->mc_gregs[VKI_PT_MQ]      = 0;
    mc->mc_gregs[VKI_PT_TRAP]    = 0;
    mc->mc_gregs[VKI_PT_DAR]     = fault_addr;
@@ -908,12 +908,11 @@ void VG_(sigframe_destroy)( ThreadId tid, Bool isRT )
    // Umm ... ? (jrs 2005 July 8)
    // tst->arch.m_orig_gpr3 = mc->mc_gregs[VKI_PT_ORIG_R3];
 
-   //tst->arch.m_cr = mc->mc_gregs[VKI_PT_CCR];
-   LibVEX_GuestPPC32_put_cr( mc->mc_gregs[VKI_PT_CCR], &tst->arch.vex );
+   LibVEX_GuestPPC32_put_CR( mc->mc_gregs[VKI_PT_CCR], &tst->arch.vex );
 
    tst->arch.vex.guest_LR  = mc->mc_gregs[VKI_PT_LNK];
    tst->arch.vex.guest_CTR = mc->mc_gregs[VKI_PT_CTR];
-   tst->arch.vex.guest_XER = mc->mc_gregs[VKI_PT_XER];
+   LibVEX_GuestPPC32_put_XER( mc->mc_gregs[VKI_PT_XER], &tst->arch.vex );
 
    tst->arch.vex_shadow = priv->shadow;
 
index e33ddc3477ad7b92aca87b75f8cf9632bce5b5e4..e8298020746cc1efa9b2ff9d22473ea0622e4813 100644 (file)
@@ -103,14 +103,11 @@ ML_(do_syscall_for_client_WRK):
 2:      sc                      /* do the syscall */
 
         /* put the result back in the threadstate  */
-        /* HACK: killing all of CR0 for simplicity (should get from gst) */
 3:     stw     3,OFFSET_ppc32_GPR3(30)     /* gst->GPR3 = sc result */
-       li      4,1
-        stw     4,OFFSET_ppc32_CC_OP(30)    /* gst->CC_OP = 1        */
+       /* copy cr0.so back to simulated state */
        mfcr    5                           /* r5 = CR               */
-       andis.  5,5,0x1000                  /* mask to only CR7.SO   */
-       oris    5,5,0x2000                  /* set CR7.EQ            */
-        stw     5,OFFSET_ppc32_CC_DEP1(30)  /* gst->CR7 = CR7        */
+       rlwinm  5,5,4,31,31                 /* r5 = (CR >> 28) & 1   */
+        stb     5,OFFSET_ppc32_CR0_0(30)    /* gst->CR0.SO = cr0.so  */
 
         /* block signals again */
        /* set up for sigprocmask(SIG_SETMASK, postmask, NULL) */
index 0760947dfcaa598a9d70d8388f9bb756a7bc2d5c..7e0233e6c799562bd64a3b16ed48d869d407e07b 100644 (file)
@@ -360,8 +360,8 @@ void getSyscallStatusFromGuestState ( /*OUT*/SyscallStatus*     canonical,
 
 #elif defined(VGP_ppc32_linux)
    VexGuestPPC32State* gst = (VexGuestPPC32State*)gst_vanilla;
-   UInt                cr  = LibVEX_GuestPPC32_get_cr7( gst );
-   UInt                err = (cr >> 28) & 1;                   // CR7.SO
+   UInt                cr  = LibVEX_GuestPPC32_get_CR( gst );
+   UInt                err = (cr >> 28) & 1;  // CR0.SO
    canonical->what = (err == 1)  ? SsFailure  : SsSuccess;
    canonical->val  = (UWord)gst->guest_GPR3;
 
@@ -399,15 +399,17 @@ void putSyscallStatusIntoGuestState ( /*IN*/ SyscallStatus*     canonical,
 
 #elif defined(VGP_ppc32_linux)
    VexGuestPPC32State* gst = (VexGuestPPC32State*)gst_vanilla;
+   UInt old_cr = LibVEX_GuestPPC32_get_CR(gst);
+
    gst->guest_GPR3 = canonical->val;
-   gst->guest_CC_OP = 1;
-   /* XXX: Setting all of CR0, not just SO flag */
-   if (canonical->what == SsFailure)   /* set cr0.SO */
-      gst->guest_CC_DEP1 = 0x30000000;
-   else                                /* clear cr0.SO */
-      gst->guest_CC_DEP1 = 0x20000000;
-// CAB: Need to set gpr0?
-   gst->guest_GPR0 = 0;
+
+   if (canonical->what == SsFailure) {
+      /* set CR0.SO */
+      LibVEX_GuestPPC32_put_CR( old_cr | (1<<28), gst );
+   } else {
+      /* clear CR0.SO */
+      LibVEX_GuestPPC32_put_CR( old_cr & ~(1<<28), gst );
+   }
 
 #else
 #  error "putSyscallStatusIntoGuestState: unknown arch"
index ffe6d16eff4c9e0f1542e878a70af18cb22c8c1b..e814e9191f69627ce35fd7ac13cc23071e8bac4b 100644 (file)
@@ -1543,7 +1543,8 @@ PRE(sys_sigreturn)
    SET_STATUS_from_SysRes(
       VG_(mk_SysRes_ppc32_linux)( 
          tst->arch.vex.guest_GPR3,
-         (LibVEX_GuestPPC32_get_cr7( &tst->arch.vex ) >> 28) & 1
+         /* get CR0.SO */
+         (LibVEX_GuestPPC32_get_CR( &tst->arch.vex ) >> 28) & 1
       )
    );
 
index 0579897b08f48ed514cb3e8136e5e514a864aab1..8eee505ec9d1b39cd91b4af4e16db00c97335038 100644 (file)
@@ -1706,6 +1706,8 @@ IRAtom* expr2vbits_Binop ( MCEnv* mce,
 
       cheap_AddSub32:
       case Iop_Mul32:
+      case Iop_CmpORD32S:
+      case Iop_CmpORD32U:
          return mkLeft32(mce, mkUifU32(mce, vatom1,vatom2));
 
       case Iop_Add64:
@@ -1902,6 +1904,7 @@ IRExpr* expr2vbits_Unop ( MCEnv* mce, IROp op, IRAtom* atom )
       case Iop_64to32:
       case Iop_64HIto32:
       case Iop_1Uto32:
+      case Iop_1Sto32:
       case Iop_8Uto32:
       case Iop_16Uto32:
       case Iop_16Sto32:
@@ -2059,7 +2062,6 @@ IRAtom* expr2vbits_Load ( MCEnv* mce,
             v64lo = expr2vbits_Load_WRK(mce, end, Ity_I64, addr, bias);
             v64hi = expr2vbits_Load_WRK(mce, end, Ity_I64, addr, bias+8);
          } else {
-            tl_assert(0 /* awaiting test case */);
             v64hi = expr2vbits_Load_WRK(mce, end, Ity_I64, addr, bias);
             v64lo = expr2vbits_Load_WRK(mce, end, Ity_I64, addr, bias+8);
          }