From: Petar Jovanovic Date: Mon, 13 Mar 2017 17:55:07 +0000 (+0000) Subject: mips: improve emulation of LL/SC X-Git-Tag: svn/VALGRIND_3_13_0~157 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ff3c67a3966525cbebf09217a2c1b7b8a7725b05;p=thirdparty%2Fvalgrind.git mips: improve emulation of LL/SC Follow up to VEX r3316. Related issue KDE #344524. Patch by Maran Pakkirisamy. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@16269 --- diff --git a/coregrind/m_scheduler/scheduler.c b/coregrind/m_scheduler/scheduler.c index 49f51d6279..9ae3f212ae 100644 --- a/coregrind/m_scheduler/scheduler.c +++ b/coregrind/m_scheduler/scheduler.c @@ -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. */ diff --git a/memcheck/mc_machine.c b/memcheck/mc_machine.c index 44932a4664..f6acc0bd27 100644 --- a/memcheck/mc_machine.c +++ b/memcheck/mc_machine.c @@ -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);