]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
mips: improve emulation of LL/SC
authorPetar Jovanovic <mips32r2@gmail.com>
Mon, 13 Mar 2017 17:55:07 +0000 (17:55 +0000)
committerPetar Jovanovic <mips32r2@gmail.com>
Mon, 13 Mar 2017 17:55:07 +0000 (17:55 +0000)
Follow up to VEX r3316.

Related issue KDE #344524.

Patch by Maran Pakkirisamy.

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

coregrind/m_scheduler/scheduler.c
memcheck/mc_machine.c

index 49f51d6279b33c378aa83df9fe835780caab96cb..9ae3f212aeeb8e964f50d01b0841918b84be947c 100644 (file)
@@ -957,6 +957,10 @@ void run_thread_for_a_while ( /*OUT*/HWord* two_words,
    vg_assert(VG_(in_generated_code) == True);
    VG_(in_generated_code) = False;
 
+#if defined(VGA_mips32) || defined(VGA_mips64)
+   tst->arch.vex.guest_LLaddr = (HWord)(-1);
+#endif
+
    if (jumped != (HWord)0) {
       /* We get here if the client took a fault that caused our signal
          handler to longjmp. */
index 44932a466428dfff5a97a365381d2ee58917bfba..f6acc0bd27ace548a5714fd3241e8ec1a29016ec 100644 (file)
@@ -1159,6 +1159,9 @@ static Int get_otrack_shadow_offset_wrk ( Int offset, Int szB )
    if (o == GOF(ac2)  && sz == 8) return o;
    if (o == GOF(ac3)  && sz == 8) return o;
 
+   if (o == GOF(LLaddr) && sz == 4) return -1;  /* slot unused */
+   if (o == GOF(LLdata) && sz == 4) return -1;  /* slot unused */
+
    VG_(printf)("MC_(get_otrack_shadow_offset)(mips)(off=%d,sz=%d)\n",
                offset,szB);
    tl_assert(0);
@@ -1238,6 +1241,9 @@ static Int get_otrack_shadow_offset_wrk ( Int offset, Int szB )
 
    if ((o > GOF(NRADDR)) && (o <= GOF(NRADDR) +12 )) return -1;
 
+   if (o == GOF(LLaddr) && sz == 8) return -1;  /* slot unused */
+   if (o == GOF(LLdata) && sz == 8) return -1;  /* slot unused */
+
    VG_(printf)("MC_(get_otrack_shadow_offset)(mips)(off=%d,sz=%d)\n",
                offset,szB);
    tl_assert(0);