Blame SOURCES/valgrind-3.14.0-get_otrack_shadow_offset_wrk-ppc.patch

7a6b42
commit 7f1dd9d5aec1f1fd4eb0ae3a311358a914f1d73f
7a6b42
Author: Julian Seward <jseward@acm.org>
7a6b42
Date:   Tue Nov 20 10:18:29 2018 +0100
7a6b42
7a6b42
    get_otrack_shadow_offset_wrk for ppc32 and ppc64: add missing cases for XER_OV32, XER_CA32 and C_FPCC.
7a6b42
    
7a6b42
    The missing cases were discovered whilst testing fixes for bug 386945, but are
7a6b42
    otherwise unrelated to that bug.
7a6b42
7a6b42
diff --git a/memcheck/mc_machine.c b/memcheck/mc_machine.c
7a6b42
index 5ed101f..4ce746e 100644
7a6b42
--- a/memcheck/mc_machine.c
7a6b42
+++ b/memcheck/mc_machine.c
7a6b42
@@ -120,11 +120,11 @@ static Int get_otrack_shadow_offset_wrk ( Int offset, Int szB )
7a6b42
    Int  o    = offset;
7a6b42
    tl_assert(sz > 0);
7a6b42
 
7a6b42
-#if defined(VGA_ppc64be)
7a6b42
+#  if defined(VGA_ppc64be)
7a6b42
    tl_assert(host_is_big_endian());
7a6b42
-#elif defined(VGA_ppc64le)
7a6b42
+#  elif defined(VGA_ppc64le)
7a6b42
    tl_assert(host_is_little_endian());
7a6b42
-#endif
7a6b42
+#  endif
7a6b42
 
7a6b42
    if (sz == 8 || sz == 4) {
7a6b42
       /* The point of this is to achieve
7a6b42
@@ -132,11 +132,11 @@ static Int get_otrack_shadow_offset_wrk ( Int offset, Int szB )
7a6b42
             return GOF(GPRn);
7a6b42
          by testing ox instead of o, and setting ox back 4 bytes when sz == 4.
7a6b42
       */
7a6b42
-#if defined(VGA_ppc64le)
7a6b42
+#     if defined(VGA_ppc64le)
7a6b42
       Int ox = o;
7a6b42
-#else
7a6b42
+#     else
7a6b42
       Int ox = sz == 8 ? o : (o - 4);
7a6b42
-#endif
7a6b42
+#     endif
7a6b42
       if (ox == GOF(GPR0)) return ox;
7a6b42
       if (ox == GOF(GPR1)) return ox;
7a6b42
       if (ox == GOF(GPR2)) return ox;
7a6b42
@@ -240,11 +240,13 @@ static Int get_otrack_shadow_offset_wrk ( Int offset, Int szB )
7a6b42
    if (o == GOF(VSR31) && sz == 8) return o;
7a6b42
 
7a6b42
    /* For the various byte sized XER/CR pieces, use offset 8
7a6b42
-      in VSR0 .. VSR19. */
7a6b42
+      in VSR0 .. VSR21. */
7a6b42
    tl_assert(SZB(VSR0) == 16);
7a6b42
    if (o == GOF(XER_SO) && sz == 1) return 8 +GOF(VSR0);
7a6b42
    if (o == GOF(XER_OV) && sz == 1) return 8 +GOF(VSR1);
7a6b42
+   if (o == GOF(XER_OV32) && sz == 1) return 8 +GOF(VSR20);
7a6b42
    if (o == GOF(XER_CA) && sz == 1) return 8 +GOF(VSR2);
7a6b42
+   if (o == GOF(XER_CA32) && sz == 1) return 8 +GOF(VSR21);
7a6b42
    if (o == GOF(XER_BC) && sz == 1) return 8 +GOF(VSR3);
7a6b42
 
7a6b42
    if (o == GOF(CR0_321) && sz == 1) return 8 +GOF(VSR4);
7a6b42
@@ -388,6 +390,7 @@ static Int get_otrack_shadow_offset_wrk ( Int offset, Int szB )
7a6b42
    if (o == GOF(IP_AT_SYSCALL) && sz == 4) return -1; /* slot unused */
7a6b42
    if (o == GOF(FPROUND)   && sz == 1) return -1;
7a6b42
    if (o == GOF(DFPROUND)  && sz == 1) return -1;
7a6b42
+   if (o == GOF(C_FPCC)    && sz == 1) return -1;
7a6b42
    if (o == GOF(VRSAVE)    && sz == 4) return -1;
7a6b42
    if (o == GOF(EMNOTE)    && sz == 4) return -1;
7a6b42
    if (o == GOF(CMSTART)   && sz == 4) return -1;
7a6b42
@@ -440,11 +443,13 @@ static Int get_otrack_shadow_offset_wrk ( Int offset, Int szB )
7a6b42
    if (o == GOF(VSR31) && sz == 8) return o;
7a6b42
 
7a6b42
    /* For the various byte sized XER/CR pieces, use offset 8
7a6b42
-      in VSR0 .. VSR19. */
7a6b42
+      in VSR0 .. VSR21. */
7a6b42
    tl_assert(SZB(VSR0) == 16);
7a6b42
    if (o == GOF(XER_SO) && sz == 1) return 8 +GOF(VSR0);
7a6b42
    if (o == GOF(XER_OV) && sz == 1) return 8 +GOF(VSR1);
7a6b42
+   if (o == GOF(XER_OV32) && sz == 1) return 8 +GOF(VSR20);
7a6b42
    if (o == GOF(XER_CA) && sz == 1) return 8 +GOF(VSR2);
7a6b42
+   if (o == GOF(XER_CA32) && sz == 1) return 8 +GOF(VSR21);
7a6b42
    if (o == GOF(XER_BC) && sz == 1) return 8 +GOF(VSR3);
7a6b42
 
7a6b42
    if (o == GOF(CR0_321) && sz == 1) return 8 +GOF(VSR4);