Commit Graph

174 Commits

Author SHA1 Message Date
Petar Jovanovic
5ef5cae5e0 mips: enable helgrind test tc08_hbl2 for mips64
Enable the test for mips64.
Minor improvement in macro INC.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13360
2013-04-04 15:33:27 +00:00
Petar Jovanovic
1644841498 mips: add mips64le support for atomic_incs and annotate_hbefore tests
Add mips64-le implementation of:

- atomic_add_8bit
- atomic_add_16bit
- atomic_add_32bit
- atomic_add_64bit
- do_acasW

Minor fixes for mips32 implementations are included as well.

These functions are needed to execute atomic_incs and annotate_hbefore
tests on mips64le.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13357
2013-04-03 22:51:23 +00:00
Philippe Waroquiers
6ceb0e1f83 fix 307082 HG false positive: pthread_cond_destroy: destruction of unknown cond var
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13332
2013-03-24 20:10:23 +00:00
Philippe Waroquiers
b5c064dfea Better fix for 295590
(problem reported in bug 307082, comment 8).
Solution applied is similar to what is in 307082 patch
(i.e. do not destroy the internal helgrind var if nWaiters > 0).
But also do not remove it from the FM.

+ add a test case (re-using the drd test case)



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13329
2013-03-18 22:48:22 +00:00
Philippe Waroquiers
b466dd954a better handle and better document the case of multi-locks cycles
In case a lock order violation is detected in a multi lock cycle,
then the current code cannot produce the set of locks and the
stack traces involved in the cycle.
However, it is still possible to produce the stack trace of
the new lock and the other lock between which a cycle was discovered.

Also, add a comment in the code clarifying why the set of locks
establishing the required order cannot (currently) be produced.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13281
2013-01-30 23:21:34 +00:00
Philippe Waroquiers
35156f7ede fix 310424 --read-var-info does not properly describe static variables
This patch changes the way static variables are
recorded by readdwarf3.c (when giving --read-var-info=yes),
improving the way such variables are described.

Currently:
A static variable does not have the DW_AT_external tag.
So, readdwarf3.c does not consider it a global variable.
It is rather considered a "local" variable.
When it is recorded, it is associated to a range of program counters
(the functions in the file where it is visible).
However, even if the static variable is only visible
in the source file where it is declared, it can in reality
be used by any range of program counters, typically
by having the address of the local variable passed
to other functions.

Such local variable can then only be described
when the program counter is in the range of program
counters for which it has been recorded.
However, this (local) description is obtained
by a kludge in debuginfo.c (around line 3285).

This kludge then produces a strange description,
telling that the variable has been declared in
frame 0 of a thread (see second example below).

The kludge is not always able to describe
the address (if the IP of the tid is in another file than
where the variable has been declared).

I suspect the kludge can sometimes describe the var as being
declared in an unrelated thread
(e.g. if an error is triggered by tid 5, but tid1 is by
luck in an IP corresponding to the recorded range).


The patch changes the way a static variable is recorded:
if DW_AT_external tag is found, a variable is marked as global.
If a variable is not external, but is seen when level is 1,
then we record the variable as a global variable (i.e.
with a full IP range).
This improves the way such static variable are described:
* they are described even if being accessed by other files.
* their description is not in an artificial "thread frame".




First example:
**************
a variable cannot be described because it is
accessed by a function in another file:

with the trunk:
==20410== ----------------------------------------------------------------
==20410==
==20410== Possible data race during read of size 4 at 0x600F54 by thread #1
==20410== Locks held: none
==20410==    at 0x4007E4: a (abc.c:42)
==20410==    by 0x4006BC: main (mabc.c:24)
==20410==
==20410== This conflicts with a previous write of size 4 by thread #2
==20410== Locks held: none
==20410==    at 0x4007ED: a (abc.c:42)
==20410==    by 0x400651: brussels_fn (mabc.c:9)
==20410==    by 0x4C2B54E: mythread_wrapper (hg_intercepts.c:219)
==20410==    by 0x4E348C9: start_thread (pthread_create.c:300)
==20410==
==20410== ----------------------------------------------------------------


with the patch:
==4515== ----------------------------------------------------------------
==4515==
==4515== Possible data race during read of size 4 at 0x600F54 by thread #1
==4515== Locks held: none
==4515==    at 0x4007E4: a (abc.c:42)
==4515==    by 0x4006BC: main (mabc.c:24)
==4515==
==4515== This conflicts with a previous write of size 4 by thread #2
==4515== Locks held: none
==4515==    at 0x4007ED: a (abc.c:42)
==4515==    by 0x400651: brussels_fn (mabc.c:9)
==4515==    by 0x4C2B54E: mythread_wrapper (hg_intercepts.c:219)
==4515==    by 0x4E348C9: start_thread (pthread_create.c:300)
==4515==
==4515== Location 0x600f54 is 0 bytes inside global var "static_global"
==4515== declared at mabc.c:4
==4515==
==4515== ----------------------------------------------------------------


Second example:
***************
When the kludge can describe the variable, it is strangely described
as being declared in a frame of a thread, while for sure the declaration
has nothing to do with a thread
With the trunk:
==20410== Location 0x600f68 is 0 bytes inside local var "static_global_a"
==20410== declared at abc.c:3, in frame #0 of thread 1

With the patch:
==4515== Location 0x600f68 is 0 bytes inside global var "static_global_a"
==4515== declared at abc.c:3

#include <stdio.h>

static int static_global_a = 0; //// <<<< this is abc.c:3




git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13153
2012-12-05 21:08:24 +00:00
Christian Borntraeger
d0b18e8cf4 Add missing EXTRA DIST statement
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13116
2012-11-09 08:35:50 +00:00
Christian Borntraeger
797e1fd67d Same idea as for mips. sem_post does not fail on s390
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13107
2012-11-07 13:42:36 +00:00
Petar Jovanovic
3cf56670a2 Another exp file for tc23_bogus_condwait.c.
struct pthread_mutex_t is different on MIPS32 and x86_64, and thus passing a
bogus mutex pthread_cond_wait (line 72) will corrupt memory in a different way
on two platforms. This causes the subsequent call to pthread_cond_wait to fail
on MIPS and i386 but not on x86_64.

This change fixes helgrind/tests/tc23_bogus_condwait on MIPS and i386.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13001
2012-09-19 12:48:09 +00:00
Petar Jovanovic
15da59bfad Adding tc19_shadowmem.stderr.exp-mips32 to match different output.
Writing to a double is done via two store-word instructions on MIPS platforms.
Thus, Helgrind will report "Possible data race during write of size 4" twice on
subsequent locations on MIPS instead of a single "Possible data race during
write of size 8". New exp file is added to cover this case.
This fixes helgrind/tests/tc19_shadowmem on MIPS.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13000
2012-09-19 11:51:31 +00:00
Petar Jovanovic
1e2f0de91c Add exp file for tc20_verifywrap due to different errno values on MIPS.
Different error numbers on MIPS require us to add an extra exp file for this
test. EDEADLK is 45 on MIPS (and not 35), and EOPNOTSUPP is 122 (and not 95).
Furthermore, sem_post will pass due to different implementation on MIPS (in
comparison to x86_64), and thus one error less has to be reported in the log.

This fixes helgrind/tests/tc20_verifywrap.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12998
2012-09-18 21:02:59 +00:00
Petar Jovanovic
11e3b1f45f Adding new exp file for tc18_semabuse in helgrind.
The existing tc18_semabuse.stderr.exp expects that sem_post on a bogus semaphore
will fail, yet it does not on platforms such as MIPS or ARM. This is specific to
implementation of sem_post for i386/x86_64 that has some assumptions such as that
'private' field is not clobbered. This will eventually result in different
parameter passed to syscall and thus different output is encountered.
This change fixes helgrind/tests/tc18_semabuse for MIPS.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12976
2012-09-15 02:36:21 +00:00
Philippe Waroquiers
74bc30c150 295590 Helgrind: Assertion 'cvi->nWaiters > 0' failed when cond var being waited upon destroyed
* when cond var is destroyed, in the PRE, report an error if nwaiters > 0.
* when cond_wait succeeds, get the cond var but do not create one in helgrind
  (it must exist if cond_wait was done).
  Report an error if cond not found (assuming this is caused by a destroy
  done while the thread was cond_wait-ing).
* added a test


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12721
2012-07-06 23:38:24 +00:00
Julian Seward
3e344c57f6 Merge in a port for mips32-linux, by Petar Jovanovic and Dejan Jevtic,
mips-valgrind@rt-rk.com, Bug 270777.

Valgrind: changes to existing files.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12616
2012-06-07 09:13:21 +00:00
Philippe Waroquiers
3b8c593619 Modify test so that scheduling events are generated.
Even without fair scheduling, this ensures the progress
of each thread.
This avoids the test looping forever in an outer/inner
setup.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12452
2012-03-19 20:19:23 +00:00
Bart Van Assche
908268e4a0 Add command-line option --fair-sched=[no|yes|try]. Use --fair-sched=try
when running the annotate_hbefore regression test. Closes #270006.

To do: update manual.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12280
2011-12-08 16:14:59 +00:00
Florian Krohm
b84e215343 Rewrite test to not use function clock_gettime. The purpose
of this is to not have to link against -lrt because that causes
a different back-trace on certain x86 and s390x environments.
See the thread with subject 
"helgrind/tests/cond_timedwait_invalid failing on x86"
on valgrind-developers for more details.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12246
2011-10-28 00:11:44 +00:00
Bart Van Assche
2c9b048a6d helgrind/tests/tc08_hbl2: Avoid busy-waiting
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12216
2011-10-23 13:28:20 +00:00
Bart Van Assche
e3020211d0 helgrind/tests/cond_timedwait_invalid: Update expected output because of r12213
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12215
2011-10-23 12:34:07 +00:00
Bart Van Assche
a37ce6c407 helgrind/tests/cond_timedwait_invalid: Port to Darwin 10.8
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12213
2011-10-23 12:11:15 +00:00
Julian Seward
f552193183 Allow garbage collection of the LAOG data structure(s). This avoids
quadratic growth on some apparently simple test cases.  Fixes #267925.
(Philippe Waroquiers, philippe.waroquiers@skynet.be)



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12201
2011-10-22 19:29:51 +00:00
Florian Krohm
086294dbed Add missing filter scripts to Makefile.am so they are included in
the tarball generated by "make dist".
With this change running regtest from the tarball produces the same
results as a regtest on a checked out repository (on x86 that is).


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12172
2011-10-20 01:17:12 +00:00
Bart Van Assche
bcfb47cd21 Add missing backslash
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12167
2011-10-19 16:22:50 +00:00
Julian Seward
60c4f86e74 Fix false positive following pthread_cond_timedwait failure.
Fixes #271917.  (Philippe Waroquiers, philippe.waroquiers@skynet.be)


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12164
2011-10-19 05:41:34 +00:00
Bart Van Assche
708a8b0ec4 helgrind/tests/Makefile.am: Add tc22_exit_w_lock.stderr.exp-kfail-x86 to EXTRA_DIST. See also r12079.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12151
2011-10-14 09:28:41 +00:00
Florian Krohm
5f2312e2a9 First round of changes to get make dist working again.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12131
2011-10-09 23:28:47 +00:00
Bart Van Assche
c19fbe2e9a helgrind/tests/pth_barrier*: Update expected output after drd/tests/pth_barrier.c changes
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12107
2011-10-06 06:39:02 +00:00
Florian Krohm
8da681a43e Add exp file for x86. This test is known to fail on that platform
by omitting a frame in the backtrace. Hence, the "kfail" in the 
file name.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12079
2011-10-02 00:38:22 +00:00
Florian Krohm
6925f05d35 Change the filtering of helgrind's XML output.
New file helgrind/tests/filter_xml.
Update expected result for tc06_two_races_xml.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12077
2011-10-01 21:07:32 +00:00
Florian Krohm
78be7b727e Make filter_helgrind executable. Should unbreak the build.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12046
2011-09-26 04:35:45 +00:00
Florian Krohm
387089d67d Change the backtrace filtering machinery for the helgrind regression
bucket. Instead of removing what we don't want to see in a backtrace
(e.g. path segments through libc and libpthread), we simply keep what
we do want to see. That way .exp files can be generic.
We need to make sure that GCC inlining does not get in the way. So all
the ..._WRK function in hg_intercepts.c are attributed as noinline.
The backtrace filtering is done in the new filter_helgrind script.
filter_stderr is simplified quite a bit.
Fixes bug #281468. See also the comments #5 and #6 there.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12045
2011-09-26 00:29:44 +00:00
Florian Krohm
88a761ec9e Fix tc23_bogus_condwait.c testcase for s390x.
The testcase used to cause a SIGILL because the address of the bogus
mutex  1 + (char*)&mx[0]  denotes a memory location that will eventually
appear in a compare-and-swap instruction. That insn does not allow
memory operands that are not word-aligned. Hence, the SIGILL.
With this fix both incarnations of this testcase (in helgrind and drd)
pass.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12038
2011-09-18 00:11:12 +00:00
Florian Krohm
68ca6b20d4 This testcase is sensitive to some sleep period. On slower
machines we need to sleep longer. See bugzilla #268623 comment #2.
So let's sleep 500ms instead of 100ms, get rid of the load
barrier and enable the testcase for s390x again.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12031
2011-09-11 14:39:02 +00:00
Florian Krohm
d0813fd49f Add more .exp files for s390 due to GCC's use of the MVC insn.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12030
2011-09-10 21:46:08 +00:00
Florian Krohm
363df00d4b Disable testcase on s390x. Still hangs occasionally.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12019
2011-09-09 20:58:13 +00:00
Florian Krohm
83114a1eb5 Fix testcase for s390x. Provide implementation of XCHG_M_R.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12018
2011-09-09 18:37:55 +00:00
Florian Krohm
ef1b04d947 Add a prerequisite because drd/tests/annotate_smart_pointer is not always
built.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12017
2011-09-09 15:50:45 +00:00
Florian Krohm
05ee2cb5c9 Avoid hanging on older s390x systems.
See also bugzilla #268623 comment 3.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12008
2011-09-05 15:32:39 +00:00
Bart Van Assche
6699084d9a Follow-up for r11971
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@11975
2011-08-14 06:16:17 +00:00
Bart Van Assche
5d9b197088 Update expected output
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@11971
2011-08-13 05:57:51 +00:00
Bart Van Assche
72138486c8 Yet another threading tool regression test scheduler sensitivity fix
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@11934
2011-07-28 18:46:38 +00:00
Bart Van Assche
d0318b86e1 Yet another regression test scheduling sensitivity fix
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@11932
2011-07-28 17:48:48 +00:00
Bart Van Assche
19cbbaf2ae Two more scheduler sensitivity fixes for thread tool regression tests
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@11931
2011-07-28 17:41:49 +00:00
Bart Van Assche
5dfad53389 Revert r11916, r11917, r11918 and r11923.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@11927
2011-07-28 10:00:38 +00:00
Bart Van Assche
f7c4be8a6a More thread tool regression test scheduler sensitivity fixes
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@11923
2011-07-27 08:49:12 +00:00
Bart Van Assche
5a66734e91 helgrind/tests/tc08_hbl2: Reduce scheduler sensitivity
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@11916
2011-07-26 19:27:29 +00:00
Julian Seward
ad7de5b336 Delete the AIX5 port. The last release this worked for is 3.4.1,
and then only on AIX 5.2 and 5.3.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@11842
2011-06-28 07:25:29 +00:00
Julian Seward
4d3de70f0e Add tests for displaying of locks held by threads in races.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@11827
2011-06-24 16:03:32 +00:00
Julian Seward
c6f4a43e94 Fix up the remaining .stderr.exp-s following r11824 (merge of
branches/HGDEV2), and delete some redundant ones


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@11826
2011-06-24 12:55:25 +00:00
Julian Seward
3ba8c354cd Fix a bunch of helgrind .stderr.exp-s following r11824 (merge of
branches/HGDEV2)


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@11825
2011-06-24 10:50:11 +00:00