[valgrind] Replace valgrind-3.8.1-cfi_dw_ops.patch with version as committed upstream.

Mark Wielaard mjw at fedoraproject.org
Fri Sep 21 13:02:15 UTC 2012


commit b8b0f522070df18dfcfd2f0750f8108ac1d0fb85
Author: Mark Wielaard <mjw at redhat.com>
Date:   Fri Sep 21 12:12:32 2012 +0200

    Replace valgrind-3.8.1-cfi_dw_ops.patch with version as committed upstream.

 valgrind-3.8.1-cfi_dw_ops.patch |  340 +++++++++++++++++++++++++++++++++------
 valgrind.spec                   |    1 +
 2 files changed, 291 insertions(+), 50 deletions(-)
---
diff --git a/valgrind-3.8.1-cfi_dw_ops.patch b/valgrind-3.8.1-cfi_dw_ops.patch
index 38962b0..54e0eb6 100644
--- a/valgrind-3.8.1-cfi_dw_ops.patch
+++ b/valgrind-3.8.1-cfi_dw_ops.patch
@@ -1,29 +1,89 @@
---- valgrind/coregrind/m_debuginfo/readdwarf.c	(revision 12990)
+------------------------------------------------------------------------
+r13008 | tom | 2012-09-21 10:57:46 +0200 (Fri, 21 Sep 2012) | 3 lines
+
+When processing DW_OP_plus_uconst make sure we record an add, not
+whatever binary operation we happened to see last.
+
+------------------------------------------------------------------------
+r13009 | tom | 2012-09-21 11:04:27 +0200 (Fri, 21 Sep 2012) | 2 lines
+
+Rename CfiOp to CfiBinop in preparation for adding unary operators.
+
+------------------------------------------------------------------------
+r13010 | tom | 2012-09-21 11:12:30 +0200 (Fri, 21 Sep 2012) | 3 lines
+
+Implement some extra DW_OPs - more constants and some unary operators.
+Patch from Mark Wielaard on BZ#307038.
+
+------------------------------------------------------------------------
+
+Index: valgrind/coregrind/m_debuginfo/readdwarf.c
+===================================================================
+--- valgrind/coregrind/m_debuginfo/readdwarf.c	(revision 13007)
 +++ valgrind/coregrind/m_debuginfo/readdwarf.c	(working copy)
-@@ -2733,6 +2733,7 @@
-    Word   sw;
-    UWord  uw;
-    CfiOp  op;
-+   CfiUnop uop;
-    HChar* opname;
+@@ -2728,12 +2728,13 @@
+          sp--;                                     \
+       } while (0)
+ 
+-   Int    ix, ix2, reg;
+-   UChar  opcode;
+-   Word   sw;
+-   UWord  uw;
+-   CfiOp  op;
+-   HChar* opname;
++   Int      ix, ix2, reg;
++   UChar    opcode;
++   Word     sw;
++   UWord    uw;
++   CfiUnop  uop;
++   CfiBinop bop;
++   HChar*   opname;
  
     Int sp; /* # of top element: valid is -1 .. N_EXPR_STACK-1 */
+    Int stack[N_EXPR_STACK];  /* indices into ctx->exprs */
+@@ -2752,7 +2753,7 @@
+       if (ctxs->cfa_is_regoff) {
+          /* cfa is reg +/- offset */
+          ix = ML_(CfiExpr_Binop)( dst,
+-                 Cop_Add,
++                 Cbinop_Add,
+                  ML_(CfiExpr_DwReg)( dst, ctxs->cfa_reg ),
+                  ML_(CfiExpr_Const)( dst, (UWord)(Word)ctxs->cfa_off )
+               );
 @@ -2778,7 +2779,7 @@
             break;
        }
  
 -      op = 0; opname = NULL; /* excessively conservative */
-+      op = 0; uop = 0; opname = NULL; /* excessively conservative */
++      uop = 0; bop = 0; opname = NULL; /* excessively conservative */
  
        opcode = *expr++;
        switch (opcode) {
+@@ -2798,7 +2799,7 @@
+             vg_assert(reg >= 0 && reg <= 31);
+             sw = read_leb128S( &expr );
+             ix = ML_(CfiExpr_Binop)( dst,
+-                    Cop_Add,
++                    Cbinop_Add,
+                     ML_(CfiExpr_DwReg)( dst, reg ),
+                     ML_(CfiExpr_Const)( dst, (UWord)sw )
+                  );
+@@ -2822,7 +2823,7 @@
+             PUSH( ML_(CfiExpr_Const)( dst, uw ) );
+             POP( ix );
+             POP( ix2 );
+-            PUSH( ML_(CfiExpr_Binop)( dst, op, ix2, ix ) );
++            PUSH( ML_(CfiExpr_Binop)( dst, Cbinop_Add, ix2, ix ) );
+             if (ddump_frames)
+                VG_(printf)("DW_OP_plus_uconst: %lu", uw);
+             break;
 @@ -2836,6 +2837,15 @@
                 VG_(printf)("DW_OP_const4s: %ld", sw);
              break;
  
 +         case DW_OP_const2s:
 +            /* push: 16-bit signed immediate */
-+            sw = read_le_s_encoded_literal( expr, 4 );
++            sw = read_le_s_encoded_literal( expr, 2 );
 +            expr += 2;
 +            PUSH( ML_(CfiExpr_Const)( dst, (UWord)sw ) );
 +            if (ddump_frames)
@@ -33,7 +93,7 @@
           case DW_OP_const1s:
              /* push: 8-bit signed immediate */
              sw = read_le_s_encoded_literal( expr, 1 );
-@@ -2845,6 +2855,46 @@
+@@ -2845,34 +2855,74 @@
                 VG_(printf)("DW_OP_const1s: %ld", sw);
              break;
  
@@ -78,11 +138,54 @@
 +            break;
 +
           case DW_OP_minus:
-             op = Cop_Sub; opname = "minus"; goto binop;
+-            op = Cop_Sub; opname = "minus"; goto binop;
++            bop = Cbinop_Sub; opname = "minus"; goto binop;
           case DW_OP_plus:
---- valgrind/coregrind/m_debuginfo/debuginfo.c	(revision 12990)
+-            op = Cop_Add; opname = "plus"; goto binop;
++            bop = Cbinop_Add; opname = "plus"; goto binop;
+          case DW_OP_and:
+-            op = Cop_And; opname = "and"; goto binop;
++            bop = Cbinop_And; opname = "and"; goto binop;
+          case DW_OP_mul:
+-            op = Cop_Mul; opname = "mul"; goto binop;
++            bop = Cbinop_Mul; opname = "mul"; goto binop;
+          case DW_OP_shl:
+-            op = Cop_Shl; opname = "shl"; goto binop;
++            bop = Cbinop_Shl; opname = "shl"; goto binop;
+          case DW_OP_shr:
+-            op = Cop_Shr; opname = "shr"; goto binop;
++            bop = Cbinop_Shr; opname = "shr"; goto binop;
+          case DW_OP_eq:
+-            op = Cop_Eq; opname = "eq"; goto binop;
++            bop = Cbinop_Eq; opname = "eq"; goto binop;
+          case DW_OP_ge:
+-            op = Cop_Ge; opname = "ge"; goto binop;
++            bop = Cbinop_Ge; opname = "ge"; goto binop;
+          case DW_OP_gt:
+-            op = Cop_Gt; opname = "gt"; goto binop;
++            bop = Cbinop_Gt; opname = "gt"; goto binop;
+          case DW_OP_le:
+-            op = Cop_Le; opname = "le"; goto binop;
++            bop = Cbinop_Le; opname = "le"; goto binop;
+          case DW_OP_lt:
+-            op = Cop_Lt; opname = "lt"; goto binop;
++            bop = Cbinop_Lt; opname = "lt"; goto binop;
+          case DW_OP_ne:
+-            op = Cop_Ne; opname = "ne"; goto binop;
++            bop = Cbinop_Ne; opname = "ne"; goto binop;
+          binop:
+             POP( ix );
+             POP( ix2 );
+-            PUSH( ML_(CfiExpr_Binop)( dst, op, ix2, ix ) );
++            PUSH( ML_(CfiExpr_Binop)( dst, bop, ix2, ix ) );
+             if (ddump_frames)
+                VG_(printf)("DW_OP_%s", opname);
+             break;
+Index: coregrind/m_debuginfo/debuginfo.c
+===================================================================
+--- valgrind/coregrind/m_debuginfo/debuginfo.c	(revision 13007)
 +++ valgrind/coregrind/m_debuginfo/debuginfo.c	(working copy)
-@@ -2051,7 +2051,7 @@
+@@ -2051,30 +2051,40 @@
  UWord evalCfiExpr ( XArray* exprs, Int ix, 
                      CfiExprEvalContext* eec, Bool* ok )
  {
@@ -91,10 +194,8 @@
     Addr  a;
     CfiExpr* e;
     vg_assert(sizeof(Addr) == sizeof(UWord));
-@@ -2118,6 +2118,16 @@
-          }
-          /* let's hope it doesn't trap! */
-          return ML_(read_UWord)((void *)a);
+    e = VG_(indexXA)( exprs, ix );
+    switch (e->tag) {
 +      case Cex_Unop:
 +         w = evalCfiExpr( exprs, e->Cex.Unop.ix, eec, ok );
 +         if (!(*ok)) return 0;
@@ -105,71 +206,210 @@
 +            default: goto unhandled;
 +         }
 +         /*NOTREACHED*/
-       default: 
-          goto unhandled;
-    }
---- valgrind/coregrind/m_debuginfo/storage.c	(revision 12990)
+       case Cex_Binop:
+          wL = evalCfiExpr( exprs, e->Cex.Binop.ixL, eec, ok );
+          if (!(*ok)) return 0;
+          wR = evalCfiExpr( exprs, e->Cex.Binop.ixR, eec, ok );
+          if (!(*ok)) return 0;
+          switch (e->Cex.Binop.op) {
+-            case Cop_Add: return wL + wR;
+-            case Cop_Sub: return wL - wR;
+-            case Cop_And: return wL & wR;
+-            case Cop_Mul: return wL * wR;
+-            case Cop_Shl: return wL << wR;
+-            case Cop_Shr: return wL >> wR;
+-            case Cop_Eq: return wL == wR ? 1 : 0;
+-            case Cop_Ge: return (Word) wL >= (Word) wR ? 1 : 0;
+-            case Cop_Gt: return (Word) wL > (Word) wR ? 1 : 0;
+-            case Cop_Le: return (Word) wL <= (Word) wR ? 1 : 0;
+-            case Cop_Lt: return (Word) wL < (Word) wR ? 1 : 0;
+-            case Cop_Ne: return wL != wR ? 1 : 0;
++            case Cbinop_Add: return wL + wR;
++            case Cbinop_Sub: return wL - wR;
++            case Cbinop_And: return wL & wR;
++            case Cbinop_Mul: return wL * wR;
++            case Cbinop_Shl: return wL << wR;
++            case Cbinop_Shr: return wL >> wR;
++            case Cbinop_Eq: return wL == wR ? 1 : 0;
++            case Cbinop_Ge: return (Word) wL >= (Word) wR ? 1 : 0;
++            case Cbinop_Gt: return (Word) wL > (Word) wR ? 1 : 0;
++            case Cbinop_Le: return (Word) wL <= (Word) wR ? 1 : 0;
++            case Cbinop_Lt: return (Word) wL < (Word) wR ? 1 : 0;
++            case Cbinop_Ne: return wL != wR ? 1 : 0;
+             default: goto unhandled;
+          }
+          /*NOTREACHED*/
+Index: valgrind/coregrind/m_debuginfo/storage.c
+===================================================================
+--- valgrind/coregrind/m_debuginfo/storage.c	(revision 13007)
 +++ valgrind/coregrind/m_debuginfo/storage.c	(working copy)
-@@ -595,6 +595,16 @@
-    e.Cex.Binop.ixR = ixR;
+@@ -585,10 +585,19 @@
+    e.Cex.Const.con = con;
     return (Int)VG_(addToXA)( dst, &e );
  }
+-Int ML_(CfiExpr_Binop)( XArray* dst, CfiOp op, Int ixL, Int ixR )
 +Int ML_(CfiExpr_Unop)( XArray* dst, CfiUnop op, Int ix )
-+{
-+   CfiExpr e;
-+   VG_(memset)( &e, 0, sizeof(e) );
+ {
+    CfiExpr e;
+    VG_(memset)( &e, 0, sizeof(e) );
 +   e.tag = Cex_Unop;
 +   e.Cex.Unop.op  = op;
 +   e.Cex.Unop.ix = ix;
 +   return (Int)VG_(addToXA)( dst, &e );
 +}
++Int ML_(CfiExpr_Binop)( XArray* dst, CfiBinop op, Int ixL, Int ixR )
++{
++   CfiExpr e;
++   VG_(memset)( &e, 0, sizeof(e) );
+    e.tag = Cex_Binop;
+    e.Cex.Binop.op  = op;
+    e.Cex.Binop.ixL = ixL;
+@@ -612,25 +621,35 @@
+    return (Int)VG_(addToXA)( dst, &e );
+ }
+ 
+-static void ppCfiOp ( CfiOp op ) 
++static void ppCfiUnop ( CfiUnop op ) 
+ {
+    switch (op) {
+-      case Cop_Add: VG_(printf)("+"); break;
+-      case Cop_Sub: VG_(printf)("-"); break;
+-      case Cop_And: VG_(printf)("&"); break;
+-      case Cop_Mul: VG_(printf)("*"); break;
+-      case Cop_Shl: VG_(printf)("<<"); break;
+-      case Cop_Shr: VG_(printf)(">>"); break;
+-      case Cop_Eq: VG_(printf)("=="); break;
+-      case Cop_Ge: VG_(printf)(">="); break;
+-      case Cop_Gt: VG_(printf)(">"); break;
+-      case Cop_Le: VG_(printf)("<="); break;
+-      case Cop_Lt: VG_(printf)("<"); break;
+-      case Cop_Ne: VG_(printf)("!="); break;
+-      default:      vg_assert(0);
++      case Cunop_Abs: VG_(printf)("abs"); break;
++      case Cunop_Neg: VG_(printf)("-"); break;
++      case Cunop_Not: VG_(printf)("~"); break;
++      default:        vg_assert(0);
+    }
+ }
+ 
++static void ppCfiBinop ( CfiBinop op ) 
++{
++   switch (op) {
++      case Cbinop_Add: VG_(printf)("+"); break;
++      case Cbinop_Sub: VG_(printf)("-"); break;
++      case Cbinop_And: VG_(printf)("&"); break;
++      case Cbinop_Mul: VG_(printf)("*"); break;
++      case Cbinop_Shl: VG_(printf)("<<"); break;
++      case Cbinop_Shr: VG_(printf)(">>"); break;
++      case Cbinop_Eq:  VG_(printf)("=="); break;
++      case Cbinop_Ge:  VG_(printf)(">="); break;
++      case Cbinop_Gt:  VG_(printf)(">"); break;
++      case Cbinop_Le:  VG_(printf)("<="); break;
++      case Cbinop_Lt:  VG_(printf)("<"); break;
++      case Cbinop_Ne:  VG_(printf)("!="); break;
++      default:         vg_assert(0);
++   }
++}
 +
- Int ML_(CfiExpr_CfiReg)( XArray* dst, CfiReg reg )
+ static void ppCfiReg ( CfiReg reg )
  {
-    CfiExpr e;
---- valgrind/coregrind/m_debuginfo/priv_storage.h	(revision 12990)
+    switch (reg) {
+@@ -664,11 +683,17 @@
+       case Cex_Const: 
+          VG_(printf)("0x%lx", e->Cex.Const.con); 
+          break;
++      case Cex_Unop: 
++         ppCfiUnop(e->Cex.Unop.op);
++         VG_(printf)("(");
++         ML_(ppCfiExpr)(src, e->Cex.Unop.ix);
++         VG_(printf)(")");
++         break;
+       case Cex_Binop: 
+          VG_(printf)("(");
+          ML_(ppCfiExpr)(src, e->Cex.Binop.ixL);
+          VG_(printf)(")");
+-         ppCfiOp(e->Cex.Binop.op);
++         ppCfiBinop(e->Cex.Binop.op);
+          VG_(printf)("(");
+          ML_(ppCfiExpr)(src, e->Cex.Binop.ixR);
+          VG_(printf)(")");
+Index: valgrind/coregrind/m_debuginfo/priv_storage.h
+===================================================================
+--- valgrind/coregrind/m_debuginfo/priv_storage.h	(revision 13007)
 +++ valgrind/coregrind/m_debuginfo/priv_storage.h	(working copy)
-@@ -296,6 +296,14 @@
+@@ -279,23 +279,31 @@
  
  typedef
     enum {
+-      Cop_Add=0x321,
+-      Cop_Sub,
+-      Cop_And,
+-      Cop_Mul,
+-      Cop_Shl,
+-      Cop_Shr,
+-      Cop_Eq,
+-      Cop_Ge,
+-      Cop_Gt,
+-      Cop_Le,
+-      Cop_Lt,
+-      Cop_Ne
 +      Cunop_Abs=0x231,
 +      Cunop_Neg,
 +      Cunop_Not
-+   }
+    }
+-   CfiOp;
 +   CfiUnop;
+ 
+ typedef
+    enum {
++      Cbinop_Add=0x321,
++      Cbinop_Sub,
++      Cbinop_And,
++      Cbinop_Mul,
++      Cbinop_Shl,
++      Cbinop_Shr,
++      Cbinop_Eq,
++      Cbinop_Ge,
++      Cbinop_Gt,
++      Cbinop_Le,
++      Cbinop_Lt,
++      Cbinop_Ne
++   }
++   CfiBinop;
 +
 +typedef
 +   enum {
        Creg_IA_SP=0x213,
        Creg_IA_BP,
        Creg_IA_IP,
-@@ -315,7 +323,8 @@
+@@ -313,6 +321,7 @@
+       Cex_Undef=0x123,
+       Cex_Deref,
        Cex_Const,
++      Cex_Unop,
        Cex_Binop,
        Cex_CfiReg,
--      Cex_DwReg
-+      Cex_DwReg,
-+      Cex_Unop
-    }
-    CfiExprTag;
- 
-@@ -342,6 +351,10 @@
+       Cex_DwReg
+@@ -332,7 +341,11 @@
+             UWord con;
+          } Const;
           struct {
-             Int reg;
-          } DwReg;
-+         struct {
+-            CfiOp op;
 +            CfiUnop op;
 +            Int ix;
 +         } Unop;
-       }
-       Cex;
-    }
-@@ -353,6 +366,7 @@
- extern Int ML_(CfiExpr_Binop) ( XArray* dst, CfiOp op, Int ixL, Int ixR );
++         struct {
++            CfiBinop op;
+             Int ixL;
+             Int ixR;
+          } Binop;
+@@ -350,7 +363,8 @@
+ extern Int ML_(CfiExpr_Undef) ( XArray* dst );
+ extern Int ML_(CfiExpr_Deref) ( XArray* dst, Int ixAddr );
+ extern Int ML_(CfiExpr_Const) ( XArray* dst, UWord con );
+-extern Int ML_(CfiExpr_Binop) ( XArray* dst, CfiOp op, Int ixL, Int ixR );
++extern Int ML_(CfiExpr_Unop)  ( XArray* dst, CfiUnop op, Int ix );
++extern Int ML_(CfiExpr_Binop) ( XArray* dst, CfiBinop op, Int ixL, Int ixR );
  extern Int ML_(CfiExpr_CfiReg)( XArray* dst, CfiReg reg );
  extern Int ML_(CfiExpr_DwReg) ( XArray* dst, Int reg );
-+extern Int ML_(CfiExpr_Unop) ( XArray* dst, CfiUnop op, Int ix );
- 
- extern void ML_(ppCfiExpr)( XArray* src, Int ix );
  
diff --git a/valgrind.spec b/valgrind.spec
index a75be86..79e742f 100644
--- a/valgrind.spec
+++ b/valgrind.spec
@@ -329,6 +329,7 @@ echo ===============END TESTING===============
 %changelog
 * Fri Sep 20 2012 Mark Wielaard <mjw at redhat.com>
 - Add valgrind-3.8.1-gdbserver_tests-mcinvoke-ppc64.patch
+- Replace valgrind-3.8.1-cfi_dw_ops.patch with version as committed upstream.
 
 * Thu Sep 20 2012 Mark Wielaard <mjw at redhat.com> 3.8.1-1
 - Add partial backport of upstream revision 12884


More information about the scm-commits mailing list