Author: sewardj Date: 2008-02-19 12:51:29 +0000 (Tue, 19 Feb 2008) New Revision: 7425
Log: Make Dwarf3-based local variable descriptions work at least marginally on ppc32/64-linux. Modified: branches/DATASYMS/coregrind/m_debuginfo/d3basics.c branches/DATASYMS/coregrind/m_debuginfo/priv_d3basics.h branches/DATASYMS/coregrind/m_debuginfo/readdwarf.c branches/DATASYMS/coregrind/m_stacktrace.c Modified: branches/DATASYMS/coregrind/m_debuginfo/d3basics.c =================================================================== --- branches/DATASYMS/coregrind/m_debuginfo/d3basics.c 2008-02-18 02:16:22 UTC (rev 7424) +++ branches/DATASYMS/coregrind/m_debuginfo/d3basics.c 2008-02-19 12:51:29 UTC (rev 7425) @@ -379,6 +379,16 @@ # elif defined(VGP_x86_linux) if (regno == 5/*EBP*/) { *a = regs->fp; return True; } if (regno == 4/*ESP*/) { *a = regs->sp; return True; } +# elif defined(VGP_ppc32_linux) + if (regno == 1/*SP*/) { *a = regs->sp; return True; } + VG_(printf)("get_Dwarf_Reg(ppc32-linux)(%ld)\n", regno); + if (regno == 31) return False; + vg_assert(0); +# elif defined(VGP_ppc64_linux) + if (regno == 1/*SP*/) { *a = regs->sp; return True; } + VG_(printf)("get_Dwarf_Reg(ppc64-linux)(%ld)\n", regno); + if (regno == 31) return False; + vg_assert(0); # else # error "Unknown platform" # endif @@ -490,6 +500,12 @@ a1 += sw1; PUSH( a1 ); break; + /* As per comment on DW_OP_breg*, the following denote that + the value in question is in a register, not in memory. So + we simply return failure. */ + case DW_OP_reg0 ... DW_OP_reg31: + FAIL("evaluate_Dwarf3_Expr: DW_OP_reg* (value is in a register)"); + break; case DW_OP_plus_uconst: POP(uw1); uw1 += (UWord)read_leb128U( &expr ); @@ -498,8 +514,8 @@ default: if (!VG_(clo_xml)) VG_(message)(Vg_DebugMsg, - "Warning: DWARF3 CFI reader: unhandled DW_OP_ " - "opcode 0x%x", (Int)opcode); + "warning: evaluate_Dwarf3_Expr: unhandled " + "DW_OP_ 0x%x", (Int)opcode); FAIL("evaluate_Dwarf3_Expr: unhandled DW_OP_"); /*NOTREACHED*/ } Modified: branches/DATASYMS/coregrind/m_debuginfo/priv_d3basics.h =================================================================== --- branches/DATASYMS/coregrind/m_debuginfo/priv_d3basics.h 2008-02-18 02:16:22 UTC (rev 7424) +++ branches/DATASYMS/coregrind/m_debuginfo/priv_d3basics.h 2008-02-19 12:51:29 UTC (rev 7425) @@ -589,7 +589,8 @@ require knowing a suitably contextualising set of values for the instruction, frame and stack pointers (and, in general, all registers, though we punt on such generality here). Here's a - struct to carry the bare essentials. */ + struct to carry the bare essentials. ip, fp and sp are expected to + be provided for all platforms. */ typedef struct { Addr ip; Addr sp; Addr fp; } RegSummary; Modified: branches/DATASYMS/coregrind/m_debuginfo/readdwarf.c =================================================================== --- branches/DATASYMS/coregrind/m_debuginfo/readdwarf.c 2008-02-18 02:16:22 UTC (rev 7424) +++ branches/DATASYMS/coregrind/m_debuginfo/readdwarf.c 2008-02-19 12:51:29 UTC (rev 7425) @@ -1530,7 +1530,7 @@ the CFA]. JRS: on amd64, the dwarf register numbering is, as per - gdb-6.3/gdb/tdep-amd64.c and also amd64-abi-0.98.pdf: + gdb-6.3/gdb/amd64-tdep.c and also amd64-abi-0.98.pdf: 0 1 2 3 4 5 6 7 RAX RDX RCX RBX RSI RDI RBP RSP Modified: branches/DATASYMS/coregrind/m_stacktrace.c =================================================================== --- branches/DATASYMS/coregrind/m_stacktrace.c 2008-02-18 02:16:22 UTC (rev 7424) +++ branches/DATASYMS/coregrind/m_stacktrace.c 2008-02-19 12:51:29 UTC (rev 7425) @@ -330,7 +330,7 @@ # undef M_VG_ERRTXT } - if (sps) sps[0] = sp; + if (sps) sps[0] = fp; /* NB. not sp */ if (fps) fps[0] = fp; ips[0] = ip; i = 1; @@ -389,7 +389,7 @@ # endif fp = (((UWord*)fp)[0]); - if (sps) sps[i] = sp; + if (sps) sps[i] = fp; /* NB. not sp */ if (fps) fps[i] = fp; ips[i++] = ip; if (debug) ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ _______________________________________________ Valgrind-developers mailing list Valgrind-developers@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/valgrind-developers