From: Julian Seward Date: Mon, 26 Jan 2009 15:05:25 +0000 (+0000) Subject: merge r9057: X-Git-Tag: svn/VALGRIND_3_4_1~43 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=13440263b60c40c7f02baf658a4979612c02e6bb;p=thirdparty%2Fvalgrind.git merge r9057: 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 --- diff --git a/coregrind/m_debuginfo/readdwarf.c b/coregrind/m_debuginfo/readdwarf.c index a6fe190484..659bab237d 100644 --- a/coregrind/m_debuginfo/readdwarf.c +++ b/coregrind/m_debuginfo/readdwarf.c @@ -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: