]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
When doing pessimistic lazy propagation through a dirty helper call,
authorJulian Seward <jseward@acm.org>
Fri, 26 Nov 2004 19:17:47 +0000 (19:17 +0000)
committerJulian Seward <jseward@acm.org>
Fri, 26 Nov 2004 19:17:47 +0000 (19:17 +0000)
do not consider inputs from those parts of the guest state marked as
read (or modified) which which are declared to be always-defined, and
dually do write outputs to those parts of the guest state written (or
modified) which are declared to be always-defined.

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3119

memcheck/mc_translate.c

index a8723efe83fadc49a79629517dab006459e00c2a..85859edc6b1a33db66ddf994a1c50ff5b90b3eff 100644 (file)
@@ -1336,6 +1336,14 @@ void do_shadow_Dirty ( MCEnv* mce, IRDirty* d )
       tl_assert(d->fxState[i].fx != Ifx_None);
       if (d->fxState[i].fx == Ifx_Write)
          continue;
+
+      /* Ignore any sections marked as 'always defined'. */
+      if (isAlwaysDefd(mce, d->fxState[i].offset, d->fxState[i].size )) {
+         VG_(printf)("memcheck: Dirty gst: ignored off %d, sz %d\n",
+                     d->fxState[i].offset, d->fxState[i].size );
+         continue;
+      }
+
       /* This state element is read or modified.  So we need to
          consider it. */
       tySrc = szToITy( d->fxState[i].size );
@@ -1405,6 +1413,9 @@ void do_shadow_Dirty ( MCEnv* mce, IRDirty* d )
       tl_assert(d->fxState[i].fx != Ifx_None);
       if (d->fxState[i].fx == Ifx_Read)
          continue;
+      /* Ignore any sections marked as 'always defined'. */
+      if (isAlwaysDefd(mce, d->fxState[i].offset, d->fxState[i].size ))
+         continue;
       /* this state element is written or modified.  So we need to
          consider it. */
       tyDst = szToITy( d->fxState[i].size );