From: Julian Seward Date: Sat, 8 Mar 2008 10:44:39 +0000 (+0000) Subject: Handle DW_OP_deref. X-Git-Tag: svn/VALGRIND_3_4_0~943 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=56b0448a64b59d460960021b9a88d364eb52fd75;p=thirdparty%2Fvalgrind.git Handle DW_OP_deref. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@7597 --- diff --git a/coregrind/m_debuginfo/d3basics.c b/coregrind/m_debuginfo/d3basics.c index 95bc790884..616f21f7db 100644 --- a/coregrind/m_debuginfo/d3basics.c +++ b/coregrind/m_debuginfo/d3basics.c @@ -39,6 +39,9 @@ #include "pub_core_libcprint.h" #include "pub_core_options.h" +#include "pub_core_vki.h" /* VKI_PROT_READ */ +#include "pub_core_aspacemgr.h" /* VG_(is_valid_for_client) */ + #include "priv_d3basics.h" /* self */ HChar* ML_(pp_DW_children) ( DW_children hashch ) @@ -582,6 +585,17 @@ GXResult ML_(evaluate_Dwarf3_Expr) ( UChar* expr, UWord exprszB, FAIL("warning: evaluate_Dwarf3_Expr: unhandled " "DW_OP_GNU_push_tls_address"); /*NOTREACHED*/ + case DW_OP_deref: + POP(uw1); + if (VG_(am_is_valid_for_client)( (Addr)uw1, sizeof(Addr), + VKI_PROT_READ )) { + uw1 = *(UWord*)uw1; + PUSH(uw1); + } else { + FAIL("warning: evaluate_Dwarf3_Expr: DW_OP_deref: " + "address not valid for client"); + } + break; default: if (!VG_(clo_xml)) VG_(message)(Vg_DebugMsg,