]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Handle DW_OP_deref.
authorJulian Seward <jseward@acm.org>
Sat, 8 Mar 2008 10:44:39 +0000 (10:44 +0000)
committerJulian Seward <jseward@acm.org>
Sat, 8 Mar 2008 10:44:39 +0000 (10:44 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@7597

coregrind/m_debuginfo/d3basics.c

index 95bc790884ec5fba2c05bd22dae2787e48cc601f..616f21f7dbcd5583b1dbac3f1ac109439ce2afb3 100644 (file)
@@ -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,