From: Florian Krohm Date: Fri, 13 Mar 2015 13:50:08 +0000 (+0000) Subject: Sort locks by their guestaddr to make the error output independent X-Git-Tag: svn/VALGRIND_3_11_0~583 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=1a4ab21e56dd2b972012eab8384f2e68dd50b029;p=thirdparty%2Fvalgrind.git Sort locks by their guestaddr to make the error output independent of the dynamically allocated Lock addresses. This restores helgrind/tests/locked_vs_unlocked2.stderr.exp from r14931. While regtesting the patch I've observed intermittent failures of helgrind/tests/hg05_race2 like so: --- ../../helgrind/tests/hg05_race2.stderr.exp (revision 15001) +++ ../../helgrind/tests/hg05_race2.stderr.exp (working copy) @@ -26,8 +26,7 @@ at 0x........: th (hg05_race2.c:17) by 0x........: mythread_wrapper (hg_intercepts.c:...) ... - Location 0x........ is 0 bytes inside foo.poot[5].plop[11], - declared at hg05_race2.c:24, in frame #x of thread x + Address 0x........ is on thread #x's stack ---------------------------------------------------------------- @@ -42,8 +41,7 @@ at 0x........: th (hg05_race2.c:17) by 0x........: mythread_wrapper (hg_intercepts.c:...) ... - Location 0x........ is 0 bytes inside foo.poot[5].plop[11], - declared at hg05_race2.c:24, in frame #x of thread x + Address 0x........ is on thread #x's stack Surely, that's something else. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15009 --- diff --git a/NEWS b/NEWS index 7bcbd54a1f..4a57638e2a 100644 --- a/NEWS +++ b/NEWS @@ -111,6 +111,7 @@ where XXXXXX is the bug number as listed below. 343335 unhandled instruction 0x1E638400 (fccmp) aarch64 343523 OS X mach_ports_register: UNKNOWN task message [id 3403, to mach_task_self(), reply 0x30f] +343597 ppc64le: incorrect use of offseof macro 343732 Unhandled syscall 144 (setgid) on aarch64 343733 Unhandled syscall 187 (msgctl and related) on aarch64 343802 s390x: Fix false positives "conditional jump or move depends on @@ -137,12 +138,12 @@ where XXXXXX is the bug number as listed below. 344686 Fix suppression for pthread_rwlock_init on OS X 10.10 344702 Fix missing libobjc suppressions on OS X 10.10 344939 Fix memcheck/tests/xml1 on OS X 10.10 +345016 helgrind/tests/locked_vs_unlocked2 is failing sometimes n-i-bz Provide implementations of certain compiler builtins to support compilers who may not provide those n-i-bz Old STABS code is still being compiled, but never used. Remove it. n-i-bz Fix compilation on distros with glibc < 2.5 n-i-bz (vex 3098) Avoid generation of Neon insns on non-Neon hosts -343597 ppc64le: incorrect use of offseof macro Release 3.10.1 (25 November 2014) diff --git a/helgrind/hg_errors.c b/helgrind/hg_errors.c index 87c5bbdfc7..d0fac407ec 100644 --- a/helgrind/hg_errors.c +++ b/helgrind/hg_errors.c @@ -184,6 +184,18 @@ static Lock* mk_LockP_from_LockN ( Lock* lkn, return lkp; } +static Int sort_by_guestaddr(const void* n1, const void* n2) +{ + const Lock* l1 = *(const Lock *const *)n1; + const Lock* l2 = *(const Lock *const *)n2; + + Addr a1 = l1 == Lock_INVALID ? 0 : l1->guestaddr; + Addr a2 = l2 == Lock_INVALID ? 0 : l2->guestaddr; + if (a1 < a2) return -1; + if (a1 > a2) return 1; + return 0; +} + /* Expand a WordSet of LockN*'s into a NULL-terminated vector of LockP*'s. Any LockN's that can't be converted into a LockP (because they have been freed, see comment on mk_LockP_from_LockN) @@ -215,6 +227,10 @@ Lock** enumerate_WordSet_into_LockP_vector( WordSetU* univ_lsets, lockPs[i] = mk_LockP_from_LockN( (Lock*)lockNs[i], allowed_to_be_invalid ); } + /* Sort the locks by increasing Lock::guestaddr to avoid jitters + in the output. */ + VG_(ssort)(lockPs, nLockNs, sizeof lockPs[0], sort_by_guestaddr); + return lockPs; } diff --git a/helgrind/tests/locked_vs_unlocked2.stderr.exp b/helgrind/tests/locked_vs_unlocked2.stderr.exp index d80f32d7ce..3463b54177 100644 --- a/helgrind/tests/locked_vs_unlocked2.stderr.exp +++ b/helgrind/tests/locked_vs_unlocked2.stderr.exp @@ -16,13 +16,13 @@ Thread #x was created Lock at 0x........ was first observed at 0x........: pthread_mutex_init (hg_intercepts.c:...) - by 0x........: main (locked_vs_unlocked2.c:59) - Address 0x........ is 0 bytes inside data symbol "mx2b" + by 0x........: main (locked_vs_unlocked2.c:58) + Address 0x........ is 0 bytes inside data symbol "mx2a" Lock at 0x........ was first observed at 0x........: pthread_mutex_init (hg_intercepts.c:...) - by 0x........: main (locked_vs_unlocked2.c:58) - Address 0x........ is 0 bytes inside data symbol "mx2a" + by 0x........: main (locked_vs_unlocked2.c:59) + Address 0x........ is 0 bytes inside data symbol "mx2b" Lock at 0x........ was first observed at 0x........: pthread_mutex_init (hg_intercepts.c:...)