]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
merge r9057:
authorJulian Seward <jseward@acm.org>
Mon, 26 Jan 2009 15:05:25 +0000 (15:05 +0000)
committerJulian Seward <jseward@acm.org>
Mon, 26 Jan 2009 15:05:25 +0000 (15:05 +0000)
   Handle a couple of artefacts generated by gcc-4.4:
   DW_OP_reg{0..31} and DW_OP_const1s.

git-svn-id: svn://svn.valgrind.org/valgrind/branches/VALGRIND_3_4_BRANCH@9074

coregrind/m_debuginfo/readdwarf.c

index a6fe19048411e57dd6869bb00cfb6b796983c305..659bab237dbcba9b8a68ac6047f7dceb5403064b 100644 (file)
@@ -2555,6 +2555,16 @@ static Int dwarfexpr_to_dag ( UnwindContext* ctx,
                VG_(printf)("DW_OP_breg%d: %ld", reg, sw);
             break;
 
+         case DW_OP_reg0 ... DW_OP_reg31:
+            /* push: reg */
+            reg = (Int)opcode - (Int)DW_OP_reg0;
+            vg_assert(reg >= 0 && reg <= 31);
+            ix = ML_(CfiExpr_DwReg)( dst, reg );
+            PUSH(ix);
+            if (ddump_frames)
+               VG_(printf)("DW_OP_reg%d", reg);
+            break;
+
          case DW_OP_plus_uconst:
             uw = read_leb128U( &expr );
             PUSH( ML_(CfiExpr_Const)( dst, uw ) );
@@ -2574,6 +2584,15 @@ static Int dwarfexpr_to_dag ( UnwindContext* ctx,
                VG_(printf)("DW_OP_const4s: %ld", sw);
             break;
 
+         case DW_OP_const1s:
+            /* push: 8-bit signed immediate */
+            sw = read_le_s_encoded_literal( expr, 1 );
+            expr += 1;
+            PUSH( ML_(CfiExpr_Const)( dst, (UWord)sw ) );
+            if (ddump_frames)
+               VG_(printf)("DW_OP_const1s: %ld", sw);
+            break;
+
          case DW_OP_minus:
             op = Cop_Sub; opname = "minus"; goto binop;
          case DW_OP_plus: