diff options
author | sewardj <sewardj@a5019735-40e9-0310-863c-91ae7b9d1cf9> | 2008-03-08 10:44:39 +0000 |
---|---|---|
committer | sewardj <sewardj@a5019735-40e9-0310-863c-91ae7b9d1cf9> | 2008-03-08 10:44:39 +0000 |
commit | aa3c28a3df3825e0c3ed1b2d101342543737d86a (patch) | |
tree | 536da8f9a74bfe5d5c77d47fb9625bcfc640d936 /coregrind | |
parent | 3227e28ddb2dd0c93db344d13306b8d92a6d9779 (diff) |
Handle DW_OP_deref.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@7597 a5019735-40e9-0310-863c-91ae7b9d1cf9
Diffstat (limited to 'coregrind')
-rw-r--r-- | coregrind/m_debuginfo/d3basics.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/coregrind/m_debuginfo/d3basics.c b/coregrind/m_debuginfo/d3basics.c index 95bc7908..616f21f7 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, |