summaryrefslogtreecommitdiff
path: root/coregrind
diff options
context:
space:
mode:
authorsewardj <sewardj@a5019735-40e9-0310-863c-91ae7b9d1cf9>2008-03-08 10:44:39 +0000
committersewardj <sewardj@a5019735-40e9-0310-863c-91ae7b9d1cf9>2008-03-08 10:44:39 +0000
commitaa3c28a3df3825e0c3ed1b2d101342543737d86a (patch)
tree536da8f9a74bfe5d5c77d47fb9625bcfc640d936 /coregrind
parent3227e28ddb2dd0c93db344d13306b8d92a6d9779 (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.c14
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,