You can subscribe to this list here.
| 2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
(122) |
Nov
(152) |
Dec
(69) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2003 |
Jan
(6) |
Feb
(25) |
Mar
(73) |
Apr
(82) |
May
(24) |
Jun
(25) |
Jul
(10) |
Aug
(11) |
Sep
(10) |
Oct
(54) |
Nov
(203) |
Dec
(182) |
| 2004 |
Jan
(307) |
Feb
(305) |
Mar
(430) |
Apr
(312) |
May
(187) |
Jun
(342) |
Jul
(487) |
Aug
(637) |
Sep
(336) |
Oct
(373) |
Nov
(441) |
Dec
(210) |
| 2005 |
Jan
(385) |
Feb
(480) |
Mar
(636) |
Apr
(544) |
May
(679) |
Jun
(625) |
Jul
(810) |
Aug
(838) |
Sep
(634) |
Oct
(521) |
Nov
(965) |
Dec
(543) |
| 2006 |
Jan
(494) |
Feb
(431) |
Mar
(546) |
Apr
(411) |
May
(406) |
Jun
(322) |
Jul
(256) |
Aug
(401) |
Sep
(345) |
Oct
(542) |
Nov
(308) |
Dec
(481) |
| 2007 |
Jan
(427) |
Feb
(326) |
Mar
(367) |
Apr
(255) |
May
(244) |
Jun
(204) |
Jul
(223) |
Aug
(231) |
Sep
(354) |
Oct
(374) |
Nov
(497) |
Dec
(362) |
| 2008 |
Jan
(322) |
Feb
(482) |
Mar
(658) |
Apr
(422) |
May
(476) |
Jun
(396) |
Jul
(455) |
Aug
(267) |
Sep
(280) |
Oct
(253) |
Nov
(232) |
Dec
(304) |
| 2009 |
Jan
(486) |
Feb
(470) |
Mar
(458) |
Apr
(423) |
May
(696) |
Jun
(461) |
Jul
(551) |
Aug
(575) |
Sep
(134) |
Oct
(110) |
Nov
(157) |
Dec
(102) |
| 2010 |
Jan
(226) |
Feb
(86) |
Mar
(147) |
Apr
(117) |
May
(107) |
Jun
(203) |
Jul
(193) |
Aug
(238) |
Sep
(300) |
Oct
(246) |
Nov
(23) |
Dec
(75) |
| 2011 |
Jan
(133) |
Feb
(195) |
Mar
(315) |
Apr
(200) |
May
(267) |
Jun
(293) |
Jul
(353) |
Aug
(237) |
Sep
(278) |
Oct
(611) |
Nov
(274) |
Dec
(260) |
| 2012 |
Jan
(303) |
Feb
(391) |
Mar
(417) |
Apr
(441) |
May
(488) |
Jun
(655) |
Jul
(590) |
Aug
(610) |
Sep
(526) |
Oct
(478) |
Nov
(359) |
Dec
(372) |
| 2013 |
Jan
(467) |
Feb
(226) |
Mar
(391) |
Apr
(281) |
May
(299) |
Jun
(252) |
Jul
(311) |
Aug
(352) |
Sep
(481) |
Oct
(571) |
Nov
(222) |
Dec
(231) |
| 2014 |
Jan
(185) |
Feb
(329) |
Mar
(245) |
Apr
(238) |
May
(281) |
Jun
(399) |
Jul
(382) |
Aug
(500) |
Sep
(579) |
Oct
(435) |
Nov
(487) |
Dec
(256) |
| 2015 |
Jan
(338) |
Feb
(357) |
Mar
(330) |
Apr
(294) |
May
(191) |
Jun
(108) |
Jul
(142) |
Aug
(261) |
Sep
(190) |
Oct
(54) |
Nov
(83) |
Dec
(22) |
| 2016 |
Jan
(49) |
Feb
(89) |
Mar
(33) |
Apr
(50) |
May
(27) |
Jun
(34) |
Jul
(53) |
Aug
(53) |
Sep
(98) |
Oct
(206) |
Nov
(93) |
Dec
(53) |
| 2017 |
Jan
(65) |
Feb
(82) |
Mar
(102) |
Apr
(86) |
May
(187) |
Jun
(67) |
Jul
(23) |
Aug
(93) |
Sep
(65) |
Oct
(45) |
Nov
(35) |
Dec
(17) |
| 2018 |
Jan
(26) |
Feb
(35) |
Mar
(38) |
Apr
(32) |
May
(8) |
Jun
(43) |
Jul
(27) |
Aug
(30) |
Sep
(43) |
Oct
(42) |
Nov
(38) |
Dec
(67) |
| 2019 |
Jan
(32) |
Feb
(37) |
Mar
(53) |
Apr
(64) |
May
(49) |
Jun
(18) |
Jul
(14) |
Aug
(53) |
Sep
(25) |
Oct
(30) |
Nov
(49) |
Dec
(31) |
| 2020 |
Jan
(87) |
Feb
(45) |
Mar
(37) |
Apr
(51) |
May
(99) |
Jun
(36) |
Jul
(11) |
Aug
(14) |
Sep
(20) |
Oct
(24) |
Nov
(40) |
Dec
(23) |
| 2021 |
Jan
(14) |
Feb
(53) |
Mar
(85) |
Apr
(15) |
May
(19) |
Jun
(3) |
Jul
(14) |
Aug
(1) |
Sep
(57) |
Oct
(73) |
Nov
(56) |
Dec
(22) |
| 2022 |
Jan
(3) |
Feb
(22) |
Mar
(6) |
Apr
(55) |
May
(46) |
Jun
(39) |
Jul
(15) |
Aug
(9) |
Sep
(11) |
Oct
(34) |
Nov
(20) |
Dec
(36) |
| 2023 |
Jan
(79) |
Feb
(41) |
Mar
(99) |
Apr
(169) |
May
(48) |
Jun
(16) |
Jul
(16) |
Aug
(57) |
Sep
(19) |
Oct
|
Nov
|
Dec
|
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
|
|
|
|
|
|
1
(13) |
2
(15) |
|
3
(16) |
4
(42) |
5
(9) |
6
(20) |
7
(22) |
8
(24) |
9
(12) |
|
10
(24) |
11
(11) |
12
(2) |
13
(13) |
14
(8) |
15
|
16
(16) |
|
17
(24) |
18
(36) |
19
(100) |
20
(94) |
21
(50) |
22
(39) |
23
(10) |
|
24
(14) |
25
(19) |
26
(2) |
27
(6) |
28
(17) |
29
(9) |
30
(8) |
|
31
(21) |
|
|
|
|
|
|
|
From: <sv...@va...> - 2009-05-02 19:31:04
|
Author: bart Date: 2009-05-02 20:30:52 +0100 (Sat, 02 May 2009) New Revision: 9724 Log: Merged trunk revisions r9493:9496. Modified: branches/DRDDEV/drd/drd.h branches/DRDDEV/drd/drd_barrier.c branches/DRDDEV/drd/drd_barrier.h branches/DRDDEV/drd/drd_basics.h branches/DRDDEV/drd/drd_bitmap.c branches/DRDDEV/drd/drd_bitmap.h branches/DRDDEV/drd/drd_clientobj.c branches/DRDDEV/drd/drd_clientobj.h branches/DRDDEV/drd/drd_clientreq.c branches/DRDDEV/drd/drd_clientreq.h branches/DRDDEV/drd/drd_cond.c branches/DRDDEV/drd/drd_cond.h branches/DRDDEV/drd/drd_error.c branches/DRDDEV/drd/drd_error.h branches/DRDDEV/drd/drd_gomp_intercepts.c branches/DRDDEV/drd/drd_load_store.c branches/DRDDEV/drd/drd_load_store.h branches/DRDDEV/drd/drd_main.c branches/DRDDEV/drd/drd_malloc_wrappers.c branches/DRDDEV/drd/drd_malloc_wrappers.h branches/DRDDEV/drd/drd_mutex.c branches/DRDDEV/drd/drd_mutex.h branches/DRDDEV/drd/drd_pthread_intercepts.c branches/DRDDEV/drd/drd_qtcore_intercepts.c branches/DRDDEV/drd/drd_rwlock.c branches/DRDDEV/drd/drd_rwlock.h branches/DRDDEV/drd/drd_segment.c branches/DRDDEV/drd/drd_segment.h branches/DRDDEV/drd/drd_semaphore.c branches/DRDDEV/drd/drd_semaphore.h branches/DRDDEV/drd/drd_strmem_intercepts.c branches/DRDDEV/drd/drd_suppression.c branches/DRDDEV/drd/drd_suppression.h branches/DRDDEV/drd/drd_thread.c branches/DRDDEV/drd/drd_thread.h branches/DRDDEV/drd/drd_thread_bitmap.h branches/DRDDEV/drd/drd_vc.c branches/DRDDEV/drd/drd_vc.h branches/DRDDEV/drd/pub_drd_bitmap.h [... diff too large to include ...] |
Author: bart Date: 2009-05-02 20:12:27 +0100 (Sat, 02 May 2009) New Revision: 9723 Log: Merged trunk revisions r9393:9493. Added: branches/DRDDEV/drd/tests/pth_process_shared_mutex.c branches/DRDDEV/drd/tests/pth_process_shared_mutex.stderr.exp branches/DRDDEV/drd/tests/pth_process_shared_mutex.vgtest branches/DRDDEV/memcheck/tests/x86-linux/filter_scalar_exit_group branches/DRDDEV/memcheck/tests/xml1.stderr.exp32 Removed: branches/DRDDEV/docs/internals/darwin-notes.txt branches/DRDDEV/docs/internals/darwin-syscalls.txt branches/DRDDEV/massif/tests/long-names.post.exp2 branches/DRDDEV/memcheck/tests/xml1.stderr.exp branches/DRDDEV/memcheck/tests/xml1.stderr.exp2 Modified: branches/DRDDEV/NEWS branches/DRDDEV/cachegrind/cg_main.c branches/DRDDEV/callgrind/bbcc.c branches/DRDDEV/callgrind/dump.c branches/DRDDEV/configure.in branches/DRDDEV/coregrind/m_aspacemgr/aspacemgr-common.c branches/DRDDEV/coregrind/m_aspacemgr/aspacemgr-linux.c branches/DRDDEV/coregrind/m_aspacemgr/priv_aspacemgr.h branches/DRDDEV/coregrind/m_coredump/coredump-elf.c branches/DRDDEV/coregrind/m_debuginfo/debuginfo.c branches/DRDDEV/coregrind/m_debuginfo/readdwarf.c branches/DRDDEV/coregrind/m_debuginfo/readdwarf3.c branches/DRDDEV/coregrind/m_debuginfo/readelf.c branches/DRDDEV/coregrind/m_debuginfo/storage.c branches/DRDDEV/coregrind/m_demangle/cplus-dem.c branches/DRDDEV/coregrind/m_errormgr.c branches/DRDDEV/coregrind/m_initimg/initimg-linux.c branches/DRDDEV/coregrind/m_mallocfree.c branches/DRDDEV/coregrind/m_replacemalloc/vg_replace_malloc.c branches/DRDDEV/coregrind/m_sigframe/sigframe-ppc32-aix5.c branches/DRDDEV/coregrind/m_sigframe/sigframe-ppc64-aix5.c branches/DRDDEV/docs/internals/Makefile.am branches/DRDDEV/drd/TODO.txt branches/DRDDEV/drd/drd_pthread_intercepts.c branches/DRDDEV/drd/tests/Makefile.am branches/DRDDEV/drd/tests/tc20_verifywrap.stderr.exp-glibc2.5 branches/DRDDEV/drd/tests/tc20_verifywrap.stderr.exp-glibc2.5-ppc branches/DRDDEV/drd/tests/tc20_verifywrap.stderr.exp-glibc2.8 branches/DRDDEV/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.3 branches/DRDDEV/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.3-b branches/DRDDEV/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.5 branches/DRDDEV/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.5-ppc branches/DRDDEV/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.8 branches/DRDDEV/exp-ptrcheck.supp branches/DRDDEV/exp-ptrcheck/h_main.c branches/DRDDEV/helgrind/hg_main.c branches/DRDDEV/helgrind/libhb_core.c branches/DRDDEV/include/pub_tool_mallocfree.h branches/DRDDEV/massif/ms_main.c branches/DRDDEV/memcheck/mc_machine.c branches/DRDDEV/memcheck/mc_main.c branches/DRDDEV/memcheck/mc_translate.c branches/DRDDEV/memcheck/tests/Makefile.am branches/DRDDEV/memcheck/tests/describe-block.c branches/DRDDEV/memcheck/tests/describe-block.stderr.exp branches/DRDDEV/memcheck/tests/filter_stderr branches/DRDDEV/memcheck/tests/origin4-many.stderr.exp branches/DRDDEV/memcheck/tests/x86-linux/Makefile.am branches/DRDDEV/memcheck/tests/x86-linux/scalar_exit_group.vgtest branches/DRDDEV/memcheck/tests/xml1.stderr.exp64 branches/DRDDEV/none/tests/coolo_sigaction.cpp branches/DRDDEV/none/tests/coolo_sigaction.stdout.exp branches/DRDDEV/none/tests/map_unaligned.c branches/DRDDEV/none/tests/map_unaligned.stderr.exp branches/DRDDEV/none/tests/pending.c branches/DRDDEV/none/tests/pending.stdout.exp branches/DRDDEV/none/tests/sigstackgrowth.c [... diff too large to include ...] |
|
From: <sv...@va...> - 2009-05-02 18:33:58
|
Author: bart Date: 2009-05-02 19:33:52 +0100 (Sat, 02 May 2009) New Revision: 9722 Log: Merged trunk revisions r9387:9393. Added: branches/DRDDEV/helgrind/tests/bar_bad.stderr.exp branches/DRDDEV/helgrind/tests/bar_trivial.stderr.exp branches/DRDDEV/helgrind/tests/hg01_all_ok.stderr.exp branches/DRDDEV/helgrind/tests/hg02_deadlock.stderr.exp branches/DRDDEV/helgrind/tests/hg03_inherit.stderr.exp branches/DRDDEV/helgrind/tests/hg04_race.stderr.exp branches/DRDDEV/helgrind/tests/hg05_race2.stderr.exp branches/DRDDEV/helgrind/tests/hg06_readshared.stderr.exp branches/DRDDEV/helgrind/tests/pth_barrier1.stderr.exp branches/DRDDEV/helgrind/tests/pth_barrier2.stderr.exp branches/DRDDEV/helgrind/tests/pth_barrier3.stderr.exp branches/DRDDEV/helgrind/tests/rwlock_race.stderr.exp branches/DRDDEV/helgrind/tests/rwlock_test.stderr.exp branches/DRDDEV/helgrind/tests/tc01_simple_race.stderr.exp branches/DRDDEV/helgrind/tests/tc02_simple_tls.stderr.exp branches/DRDDEV/helgrind/tests/tc03_re_excl.stderr.exp branches/DRDDEV/helgrind/tests/tc04_free_lock.stderr.exp branches/DRDDEV/helgrind/tests/tc05_simple_race.stderr.exp branches/DRDDEV/helgrind/tests/tc06_two_races.stderr.exp branches/DRDDEV/helgrind/tests/tc07_hbl1.stderr.exp branches/DRDDEV/helgrind/tests/tc08_hbl2.stderr.exp branches/DRDDEV/helgrind/tests/tc10_rec_lock.stderr.exp branches/DRDDEV/helgrind/tests/tc11_XCHG.stderr.exp branches/DRDDEV/helgrind/tests/tc12_rwl_trivial.stderr.exp branches/DRDDEV/helgrind/tests/tc13_laog1.stderr.exp branches/DRDDEV/helgrind/tests/tc14_laog_dinphils.stderr.exp branches/DRDDEV/helgrind/tests/tc15_laog_lockdel.stderr.exp branches/DRDDEV/helgrind/tests/tc16_byterace.stderr.exp branches/DRDDEV/helgrind/tests/tc17_sembar.stderr.exp branches/DRDDEV/helgrind/tests/tc19_shadowmem.stderr.exp branches/DRDDEV/helgrind/tests/tc21_pthonce.stderr.exp branches/DRDDEV/helgrind/tests/tc22_exit_w_lock.stderr.exp branches/DRDDEV/helgrind/tests/tc23_bogus_condwait.stderr.exp branches/DRDDEV/helgrind/tests/tc24_nonzero_sem.stderr.exp Removed: branches/DRDDEV/exp-ptrcheck/tests/ccc.stderr.exp-glibc25-x86 branches/DRDDEV/helgrind/tests/bar_bad.stderr.exp-glibc28-amd64 branches/DRDDEV/helgrind/tests/bar_trivial.stderr.exp-glibc28-amd64 branches/DRDDEV/helgrind/tests/hg01_all_ok.stderr.exp-glibc25-amd64 branches/DRDDEV/helgrind/tests/hg02_deadlock.stderr.exp-glibc25-amd64 branches/DRDDEV/helgrind/tests/hg02_deadlock.stderr.exp-glibc25-x86 branches/DRDDEV/helgrind/tests/hg02_deadlock.stderr.exp-glibc27-amd64 branches/DRDDEV/helgrind/tests/hg03_inherit.stderr.exp-glibc25-amd64 branches/DRDDEV/helgrind/tests/hg03_inherit.stderr.exp-glibc27-amd64 branches/DRDDEV/helgrind/tests/hg04_race.stderr.exp-glibc25-amd64 branches/DRDDEV/helgrind/tests/hg04_race.stderr.exp-glibc27-amd64 branches/DRDDEV/helgrind/tests/hg05_race2.stderr.exp-glibc25-amd64 branches/DRDDEV/helgrind/tests/hg05_race2.stderr.exp-glibc27-amd64 branches/DRDDEV/helgrind/tests/hg06_readshared.stderr.exp-glibc25-amd64 branches/DRDDEV/helgrind/tests/pth_barrier1.stderr.exp-glibc27-amd64 branches/DRDDEV/helgrind/tests/pth_barrier1.stderr.exp-glibc28-amd64 branches/DRDDEV/helgrind/tests/pth_barrier2.stderr.exp-glibc27-amd64 branches/DRDDEV/helgrind/tests/pth_barrier2.stderr.exp-glibc28-amd64 branches/DRDDEV/helgrind/tests/pth_barrier3.stderr.exp-glibc27-amd64 branches/DRDDEV/helgrind/tests/pth_barrier3.stderr.exp-glibc28-amd64 branches/DRDDEV/helgrind/tests/rwlock_race.stderr.exp-glibc25-amd64 branches/DRDDEV/helgrind/tests/rwlock_race.stderr.exp-glibc27-amd64 branches/DRDDEV/helgrind/tests/rwlock_test.stderr.exp-glibc25-amd64 branches/DRDDEV/helgrind/tests/tc01_simple_race.stderr.exp-glibc25-amd64 branches/DRDDEV/helgrind/tests/tc01_simple_race.stderr.exp-glibc27-amd64 branches/DRDDEV/helgrind/tests/tc02_simple_tls.stderr.exp-glibc25-amd64 branches/DRDDEV/helgrind/tests/tc03_re_excl.stderr.exp-glibc25-amd64 branches/DRDDEV/helgrind/tests/tc04_free_lock.stderr.exp-glibc25-amd64 branches/DRDDEV/helgrind/tests/tc05_simple_race.stderr.exp-glibc25-amd64 branches/DRDDEV/helgrind/tests/tc05_simple_race.stderr.exp-glibc27-amd64 branches/DRDDEV/helgrind/tests/tc06_two_races.stderr.exp-glibc25-amd64 branches/DRDDEV/helgrind/tests/tc06_two_races.stderr.exp-glibc27-amd64 branches/DRDDEV/helgrind/tests/tc07_hbl1.stderr.exp-glibc25-amd64 branches/DRDDEV/helgrind/tests/tc08_hbl2.stderr.exp-glibc25-amd64 branches/DRDDEV/helgrind/tests/tc09_bad_unlock.stderr.exp-glibc27-amd64 branches/DRDDEV/helgrind/tests/tc10_rec_lock.stderr.exp-glibc25-amd64 branches/DRDDEV/helgrind/tests/tc11_XCHG.stderr.exp-glibc25-amd64 branches/DRDDEV/helgrind/tests/tc12_rwl_trivial.stderr.exp-glibc25-amd64 branches/DRDDEV/helgrind/tests/tc13_laog1.stderr.exp-glibc25-amd64 branches/DRDDEV/helgrind/tests/tc14_laog_dinphils.stderr.exp-glibc25-amd64 branches/DRDDEV/helgrind/tests/tc14_laog_dinphils.stderr.exp-glibc25-x86 branches/DRDDEV/helgrind/tests/tc14_laog_dinphils.stderr.exp-glibc27-amd64 branches/DRDDEV/helgrind/tests/tc15_laog_lockdel.stderr.exp-glibc25-amd64 branches/DRDDEV/helgrind/tests/tc16_byterace.stderr.exp-glibc25-amd64 branches/DRDDEV/helgrind/tests/tc16_byterace.stderr.exp-glibc27-amd64 branches/DRDDEV/helgrind/tests/tc17_sembar.stderr.exp-glibc25-amd64 branches/DRDDEV/helgrind/tests/tc18_semabuse.stderr.exp-glibc25-x86 branches/DRDDEV/helgrind/tests/tc19_shadowmem.stderr.exp-glibc25-amd64 branches/DRDDEV/helgrind/tests/tc19_shadowmem.stderr.exp-glibc27-amd64 branches/DRDDEV/helgrind/tests/tc20_verifywrap.stderr.exp-glibc28-amd64 branches/DRDDEV/helgrind/tests/tc21_pthonce.stderr.exp-glibc25-amd64 branches/DRDDEV/helgrind/tests/tc21_pthonce.stderr.exp-glibc27-amd64 branches/DRDDEV/helgrind/tests/tc22_exit_w_lock.stderr.exp-glibc25-amd64 branches/DRDDEV/helgrind/tests/tc22_exit_w_lock.stderr.exp-glibc25-x86 branches/DRDDEV/helgrind/tests/tc22_exit_w_lock.stderr.exp-glibc27-amd64 branches/DRDDEV/helgrind/tests/tc23_bogus_condwait.stderr.exp-glibc25-amd64 branches/DRDDEV/helgrind/tests/tc24_nonzero_sem.stderr.exp-glibc25-amd64 Modified: branches/DRDDEV/exp-ptrcheck/tests/Makefile.am branches/DRDDEV/exp-ptrcheck/tests/ccc.stderr.exp-glibc25-amd64 branches/DRDDEV/helgrind/tests/Makefile.am branches/DRDDEV/helgrind/tests/filter_stderr branches/DRDDEV/helgrind/tests/tc09_bad_unlock.stderr.exp-glibc23-amd64 branches/DRDDEV/helgrind/tests/tc09_bad_unlock.stderr.exp-glibc25-amd64 branches/DRDDEV/helgrind/tests/tc09_bad_unlock.stderr.exp-glibc25-x86 branches/DRDDEV/helgrind/tests/tc20_verifywrap.stderr.exp-glibc25-amd64 branches/DRDDEV/helgrind/tests/tc20_verifywrap.stderr.exp-glibc27-amd64 branches/DRDDEV/memcheck/tests/filter_stderr branches/DRDDEV/memcheck/tests/filter_xml branches/DRDDEV/none/tests/filter_fdleak [... diff too large to include ...] |
Author: bart Date: 2009-05-02 19:21:50 +0100 (Sat, 02 May 2009) New Revision: 9721 Log: Merged trunk revisions r9173:9387. Added: branches/DRDDEV/Makefile.tool-tests.am branches/DRDDEV/drd/tests/atomic_var.stderr.exp-with-atomic-builtins branches/DRDDEV/drd/tests/filter_stderr_and_thread_no branches/DRDDEV/drd/tests/pth_barrier_race.c branches/DRDDEV/drd/tests/pth_barrier_race.stderr.exp branches/DRDDEV/drd/tests/pth_barrier_race.vgtest branches/DRDDEV/massif/tests/malloc_usable.c branches/DRDDEV/massif/tests/malloc_usable.stderr.exp branches/DRDDEV/massif/tests/malloc_usable.vgtest branches/DRDDEV/memcheck/tests/leak-cases-full.stderr.exp branches/DRDDEV/memcheck/tests/leak-cases-full.vgtest branches/DRDDEV/memcheck/tests/leak-cases-summary.stderr.exp branches/DRDDEV/memcheck/tests/leak-cases-summary.vgtest branches/DRDDEV/memcheck/tests/leak-cases.c branches/DRDDEV/memcheck/tests/leak.h branches/DRDDEV/memcheck/tests/origin4-many.stderr.exp branches/DRDDEV/memcheck/tests/unit_libcbase.c branches/DRDDEV/memcheck/tests/unit_libcbase.stderr.exp branches/DRDDEV/memcheck/tests/unit_libcbase.vgtest branches/DRDDEV/memcheck/tests/unit_oset.c branches/DRDDEV/memcheck/tests/unit_oset.stderr.exp branches/DRDDEV/memcheck/tests/unit_oset.stdout.exp branches/DRDDEV/memcheck/tests/unit_oset.vgtest branches/DRDDEV/memcheck/tests/x86-linux/bug133694.c branches/DRDDEV/memcheck/tests/x86-linux/bug133694.stderr.exp branches/DRDDEV/memcheck/tests/x86-linux/bug133694.stdout.exp branches/DRDDEV/memcheck/tests/x86-linux/bug133694.vgtest branches/DRDDEV/tests/arch_test.c branches/DRDDEV/tests/os_test.c branches/DRDDEV/tests/platform_test branches/DRDDEV/tests/x86_amd64_features.c Removed: branches/DRDDEV/drd/tests/atomic_var.stderr.exp-with-atomic-builtins-1 branches/DRDDEV/drd/tests/atomic_var.stderr.exp-with-atomic-builtins-2 branches/DRDDEV/drd/tests/filter_cmdline0 branches/DRDDEV/drd/tests/filter_fdleak branches/DRDDEV/drd/tests/filter_linenos branches/DRDDEV/drd/tests/filter_none_discards branches/DRDDEV/helgrind/tests/hg03_inherit.stderr.exp-glibc25-x86 branches/DRDDEV/helgrind/tests/hg04_race.stderr.exp-glibc25-x86 branches/DRDDEV/helgrind/tests/hg05_race2.stderr.exp-glibc25-x86 branches/DRDDEV/helgrind/tests/tc01_simple_race.stderr.exp-glibc25-x86 branches/DRDDEV/helgrind/tests/tc05_simple_race.stderr.exp-glibc25-x86 branches/DRDDEV/helgrind/tests/tc06_two_races.stderr.exp-glibc25-x86 branches/DRDDEV/helgrind/tests/tc16_byterace.stderr.exp-glibc25-x86 branches/DRDDEV/helgrind/tests/tc17_sembar.stderr.exp-glibc25-x86 branches/DRDDEV/helgrind/tests/tc19_shadowmem.stderr.exp-glibc25-x86 branches/DRDDEV/helgrind/tests/tc20_verifywrap.stderr.exp-glibc23-amd64 branches/DRDDEV/helgrind/tests/tc20_verifywrap.stderr.exp-glibc25-x86 branches/DRDDEV/helgrind/tests/tc21_pthonce.stderr.exp-glibc23-amd64 branches/DRDDEV/helgrind/tests/tc21_pthonce.stderr.exp-glibc25-x86 branches/DRDDEV/helgrind/tests/tc23_bogus_condwait.stderr.exp-glibc25-x86 branches/DRDDEV/massif/tests/toobig-allocs.stderr.exp branches/DRDDEV/massif/tests/toobig-allocs.vgtest branches/DRDDEV/memcheck/tests/buflen_check.stderr.exp2 branches/DRDDEV/memcheck/tests/execve.stderr.exp2 branches/DRDDEV/memcheck/tests/execve2.stderr.exp2 branches/DRDDEV/memcheck/tests/filter_leak_check_size branches/DRDDEV/memcheck/tests/filter_malloc_free_fill branches/DRDDEV/memcheck/tests/filter_stderr_backtrace branches/DRDDEV/memcheck/tests/fwrite.stderr.exp2 branches/DRDDEV/memcheck/tests/hello.c branches/DRDDEV/memcheck/tests/leak-0.stderr.exp2 branches/DRDDEV/memcheck/tests/leak-cycle.stderr.exp2 branches/DRDDEV/memcheck/tests/leak-cycle.stderr.exp64 branches/DRDDEV/memcheck/tests/leak-pool-0.stderr.exp64 branches/DRDDEV/memcheck/tests/leak-pool-1.stderr.exp64 branches/DRDDEV/memcheck/tests/leak-pool-2.stderr.exp64 branches/DRDDEV/memcheck/tests/leak-pool-3.stderr.exp64 branches/DRDDEV/memcheck/tests/leak-pool-4.stderr.exp64 branches/DRDDEV/memcheck/tests/leak-pool-5.stderr.exp64 branches/DRDDEV/memcheck/tests/leak-regroot.c branches/DRDDEV/memcheck/tests/leak-regroot.stderr.exp branches/DRDDEV/memcheck/tests/leak-regroot.stderr.exp2 branches/DRDDEV/memcheck/tests/leak-regroot.vgtest branches/DRDDEV/memcheck/tests/leak-tree.stderr.exp2 branches/DRDDEV/memcheck/tests/leak-tree.stderr.exp64 branches/DRDDEV/memcheck/tests/leakotron.c branches/DRDDEV/memcheck/tests/leakotron.stderr.exp branches/DRDDEV/memcheck/tests/leakotron.stdout.exp branches/DRDDEV/memcheck/tests/leakotron.vgtest branches/DRDDEV/memcheck/tests/malloc_free_fill.stdout.exp branches/DRDDEV/memcheck/tests/mismatches.stderr.exp2 branches/DRDDEV/memcheck/tests/mismatches.stderr.exp64 branches/DRDDEV/memcheck/tests/origin4-many.stderr.exp-glibc25-amd64 branches/DRDDEV/memcheck/tests/origin4-many.stderr.exp-glibc25-x86 branches/DRDDEV/memcheck/tests/oset_test.c branches/DRDDEV/memcheck/tests/oset_test.stderr.exp branches/DRDDEV/memcheck/tests/oset_test.stdout.exp branches/DRDDEV/memcheck/tests/oset_test.vgtest branches/DRDDEV/memcheck/tests/pointer-trace.stderr.exp2 branches/DRDDEV/memcheck/tests/pointer-trace.stderr.exp3 branches/DRDDEV/memcheck/tests/pointer-trace.stderr.exp64 branches/DRDDEV/memcheck/tests/toobig-allocs.stderr.exp branches/DRDDEV/memcheck/tests/toobig-allocs.vgtest branches/DRDDEV/memcheck/tests/writev.stderr.exp2 branches/DRDDEV/memcheck/tests/writev.stderr.exp3 branches/DRDDEV/memcheck/tests/x86-linux/scalar.stderr.exp2 branches/DRDDEV/memcheck/tests/x86-linux/scalar_exit_group.stderr.exp2 branches/DRDDEV/memcheck/tests/x86-linux/scalar_supp.stderr.exp2 branches/DRDDEV/memcheck/tests/x86/bug133694.c branches/DRDDEV/memcheck/tests/x86/bug133694.stderr.exp branches/DRDDEV/memcheck/tests/x86/bug133694.stdout.exp branches/DRDDEV/memcheck/tests/x86/bug133694.vgtest branches/DRDDEV/memcheck/tests/xml1.stderr.exp3 branches/DRDDEV/memcheck/tests/xml1.stderr.exp64_2 branches/DRDDEV/memcheck/tests/zeropage.c branches/DRDDEV/memcheck/tests/zeropage.stderr.exp branches/DRDDEV/memcheck/tests/zeropage.stderr.exp2 branches/DRDDEV/memcheck/tests/zeropage.stdout.exp branches/DRDDEV/memcheck/tests/zeropage.stdout.exp-glibc27 branches/DRDDEV/memcheck/tests/zeropage.vgtest branches/DRDDEV/none/tests/fdleak_cmsg.stderr.exp2 branches/DRDDEV/none/tests/fdleak_cmsg.stderr.exp3 branches/DRDDEV/none/tests/fdleak_cmsg.stderr.exp4 branches/DRDDEV/none/tests/fdleak_creat.stderr.exp2 branches/DRDDEV/none/tests/fdleak_creat.stderr.exp3 branches/DRDDEV/none/tests/fdleak_dup.stderr.exp2 branches/DRDDEV/none/tests/fdleak_dup.stderr.exp3 branches/DRDDEV/none/tests/fdleak_dup2.stderr.exp2 branches/DRDDEV/none/tests/fdleak_dup2.stderr.exp3 branches/DRDDEV/none/tests/fdleak_fcntl.stderr.exp2 branches/DRDDEV/none/tests/fdleak_fcntl.stderr.exp3 branches/DRDDEV/none/tests/fdleak_fcntl.stderr.exp4 branches/DRDDEV/none/tests/fdleak_ipv4.stderr.exp2 branches/DRDDEV/none/tests/fdleak_open.stderr.exp2 branches/DRDDEV/none/tests/fdleak_pipe.stderr.exp2 branches/DRDDEV/none/tests/fdleak_socketpair.stderr.exp2 branches/DRDDEV/tests/cputest.c branches/DRDDEV/tests/filter_test_paths branches/DRDDEV/tests/toobig-allocs.c Modified: branches/DRDDEV/Makefile.flags.am branches/DRDDEV/Makefile.tool.am branches/DRDDEV/NEWS branches/DRDDEV/auxprogs/change-copyright-year branches/DRDDEV/auxprogs/libmpiwrap.c branches/DRDDEV/auxprogs/valgrind-listener.c branches/DRDDEV/cachegrind/cg-amd64.c branches/DRDDEV/cachegrind/cg-ppc32.c branches/DRDDEV/cachegrind/cg-ppc64.c branches/DRDDEV/cachegrind/cg-x86.c branches/DRDDEV/cachegrind/cg_arch.h branches/DRDDEV/cachegrind/cg_branchpred.c branches/DRDDEV/cachegrind/cg_main.c branches/DRDDEV/cachegrind/cg_merge.c branches/DRDDEV/cachegrind/cg_sim.c branches/DRDDEV/cachegrind/tests/Makefile.am branches/DRDDEV/cachegrind/tests/x86/Makefile.am branches/DRDDEV/callgrind/bb.c branches/DRDDEV/callgrind/bbcc.c branches/DRDDEV/callgrind/callgrind.h branches/DRDDEV/callgrind/callstack.c branches/DRDDEV/callgrind/clo.c branches/DRDDEV/callgrind/command.c branches/DRDDEV/callgrind/context.c branches/DRDDEV/callgrind/costs.c branches/DRDDEV/callgrind/debug.c branches/DRDDEV/callgrind/dump.c branches/DRDDEV/callgrind/events.c branches/DRDDEV/callgrind/fn.c branches/DRDDEV/callgrind/global.h branches/DRDDEV/callgrind/jumps.c branches/DRDDEV/callgrind/main.c branches/DRDDEV/callgrind/sim.c branches/DRDDEV/callgrind/tests/Makefile.am branches/DRDDEV/callgrind/threads.c branches/DRDDEV/configure.in branches/DRDDEV/coregrind/Makefile.am branches/DRDDEV/coregrind/launcher-aix5-bootblock.h branches/DRDDEV/coregrind/launcher-aix5.c branches/DRDDEV/coregrind/launcher-linux.c branches/DRDDEV/coregrind/m_aspacemgr/aspacemgr-aix5.c branches/DRDDEV/coregrind/m_aspacemgr/aspacemgr-common.c branches/DRDDEV/coregrind/m_aspacemgr/aspacemgr-linux.c branches/DRDDEV/coregrind/m_aspacemgr/priv_aspacemgr.h branches/DRDDEV/coregrind/m_clientstate.c branches/DRDDEV/coregrind/m_commandline.c branches/DRDDEV/coregrind/m_coredump/coredump-amd64-linux.c branches/DRDDEV/coregrind/m_coredump/coredump-elf.c branches/DRDDEV/coregrind/m_coredump/coredump-ppc32-aix5.c branches/DRDDEV/coregrind/m_coredump/coredump-ppc32-linux.c branches/DRDDEV/coregrind/m_coredump/coredump-ppc64-aix5.c branches/DRDDEV/coregrind/m_coredump/coredump-ppc64-linux.c branches/DRDDEV/coregrind/m_coredump/coredump-x86-linux.c branches/DRDDEV/coregrind/m_coredump/priv_elf.h branches/DRDDEV/coregrind/m_cpuid.S branches/DRDDEV/coregrind/m_debugger.c branches/DRDDEV/coregrind/m_debuginfo/d3basics.c branches/DRDDEV/coregrind/m_debuginfo/debuginfo.c branches/DRDDEV/coregrind/m_debuginfo/misc.c branches/DRDDEV/coregrind/m_debuginfo/priv_d3basics.h branches/DRDDEV/coregrind/m_debuginfo/priv_misc.h branches/DRDDEV/coregrind/m_debuginfo/priv_readdwarf.h branches/DRDDEV/coregrind/m_debuginfo/priv_readdwarf3.h branches/DRDDEV/coregrind/m_debuginfo/priv_readelf.h branches/DRDDEV/coregrind/m_debuginfo/priv_readstabs.h branches/DRDDEV/coregrind/m_debuginfo/priv_readxcoff.h branches/DRDDEV/coregrind/m_debuginfo/priv_storage.h branches/DRDDEV/coregrind/m_debuginfo/priv_tytypes.h branches/DRDDEV/coregrind/m_debuginfo/readdwarf.c branches/DRDDEV/coregrind/m_debuginfo/readdwarf3.c branches/DRDDEV/coregrind/m_debuginfo/readelf.c branches/DRDDEV/coregrind/m_debuginfo/readstabs.c branches/DRDDEV/coregrind/m_debuginfo/readxcoff.c branches/DRDDEV/coregrind/m_debuginfo/storage.c branches/DRDDEV/coregrind/m_debuginfo/tytypes.c branches/DRDDEV/coregrind/m_debuglog.c branches/DRDDEV/coregrind/m_demangle/cplus-dem.c branches/DRDDEV/coregrind/m_demangle/demangle.c branches/DRDDEV/coregrind/m_demangle/vg_libciface.h branches/DRDDEV/coregrind/m_dispatch/dispatch-amd64-linux.S branches/DRDDEV/coregrind/m_dispatch/dispatch-ppc32-aix5.S branches/DRDDEV/coregrind/m_dispatch/dispatch-ppc32-linux.S branches/DRDDEV/coregrind/m_dispatch/dispatch-ppc64-aix5.S branches/DRDDEV/coregrind/m_dispatch/dispatch-ppc64-linux.S branches/DRDDEV/coregrind/m_dispatch/dispatch-x86-linux.S branches/DRDDEV/coregrind/m_errormgr.c branches/DRDDEV/coregrind/m_execontext.c branches/DRDDEV/coregrind/m_hashtable.c branches/DRDDEV/coregrind/m_initimg/initimg-aix5.c branches/DRDDEV/coregrind/m_initimg/initimg-linux.c branches/DRDDEV/coregrind/m_libcassert.c branches/DRDDEV/coregrind/m_libcbase.c branches/DRDDEV/coregrind/m_libcfile.c branches/DRDDEV/coregrind/m_libcprint.c branches/DRDDEV/coregrind/m_libcproc.c branches/DRDDEV/coregrind/m_libcsignal.c branches/DRDDEV/coregrind/m_machine.c branches/DRDDEV/coregrind/m_main.c branches/DRDDEV/coregrind/m_mallocfree.c branches/DRDDEV/coregrind/m_options.c branches/DRDDEV/coregrind/m_oset.c branches/DRDDEV/coregrind/m_redir.c branches/DRDDEV/coregrind/m_replacemalloc/replacemalloc_core.c branches/DRDDEV/coregrind/m_replacemalloc/vg_replace_malloc.c branches/DRDDEV/coregrind/m_scheduler/priv_sema.h branches/DRDDEV/coregrind/m_scheduler/scheduler.c branches/DRDDEV/coregrind/m_scheduler/sema.c branches/DRDDEV/coregrind/m_seqmatch.c branches/DRDDEV/coregrind/m_sigframe/sigframe-amd64-linux.c branches/DRDDEV/coregrind/m_sigframe/sigframe-ppc32-aix5.c branches/DRDDEV/coregrind/m_sigframe/sigframe-ppc32-linux.c branches/DRDDEV/coregrind/m_sigframe/sigframe-ppc64-aix5.c branches/DRDDEV/coregrind/m_sigframe/sigframe-ppc64-linux.c branches/DRDDEV/coregrind/m_sigframe/sigframe-x86-linux.c branches/DRDDEV/coregrind/m_signals.c branches/DRDDEV/coregrind/m_sparsewa.c branches/DRDDEV/coregrind/m_stacks.c branches/DRDDEV/coregrind/m_stacktrace.c branches/DRDDEV/coregrind/m_syscall.c branches/DRDDEV/coregrind/m_syswrap/priv_syswrap-aix5.h branches/DRDDEV/coregrind/m_syswrap/priv_syswrap-generic.h branches/DRDDEV/coregrind/m_syswrap/priv_syswrap-linux-variants.h branches/DRDDEV/coregrind/m_syswrap/priv_syswrap-linux.h branches/DRDDEV/coregrind/m_syswrap/priv_syswrap-main.h branches/DRDDEV/coregrind/m_syswrap/priv_types_n_macros.h branches/DRDDEV/coregrind/m_syswrap/syscall-amd64-linux.S branches/DRDDEV/coregrind/m_syswrap/syscall-ppc32-aix5.S branches/DRDDEV/coregrind/m_syswrap/syscall-ppc32-linux.S branches/DRDDEV/coregrind/m_syswrap/syscall-ppc64-aix5.S branches/DRDDEV/coregrind/m_syswrap/syscall-ppc64-linux.S branches/DRDDEV/coregrind/m_syswrap/syscall-x86-linux.S branches/DRDDEV/coregrind/m_syswrap/syswrap-aix5.c branches/DRDDEV/coregrind/m_syswrap/syswrap-amd64-linux.c branches/DRDDEV/coregrind/m_syswrap/syswrap-generic.c branches/DRDDEV/coregrind/m_syswrap/syswrap-linux-variants.c branches/DRDDEV/coregrind/m_syswrap/syswrap-linux.c branches/DRDDEV/coregrind/m_syswrap/syswrap-main.c branches/DRDDEV/coregrind/m_syswrap/syswrap-ppc32-aix5.c branches/DRDDEV/coregrind/m_syswrap/syswrap-ppc32-linux.c branches/DRDDEV/coregrind/m_syswrap/syswrap-ppc64-aix5.c branches/DRDDEV/coregrind/m_syswrap/syswrap-ppc64-linux.c branches/DRDDEV/coregrind/m_syswrap/syswrap-x86-linux.c branches/DRDDEV/coregrind/m_threadstate.c branches/DRDDEV/coregrind/m_tooliface.c branches/DRDDEV/coregrind/m_trampoline.S branches/DRDDEV/coregrind/m_translate.c branches/DRDDEV/coregrind/m_transtab.c branches/DRDDEV/coregrind/m_ume/elf.c branches/DRDDEV/coregrind/m_ume/main.c branches/DRDDEV/coregrind/m_ume/script.c branches/DRDDEV/coregrind/m_vki.c branches/DRDDEV/coregrind/m_vkiscnums.c branches/DRDDEV/coregrind/m_wordfm.c branches/DRDDEV/coregrind/m_xarray.c branches/DRDDEV/coregrind/pub_core_aspacemgr.h branches/DRDDEV/coregrind/pub_core_basics.h branches/DRDDEV/coregrind/pub_core_basics_asm.h branches/DRDDEV/coregrind/pub_core_clientstate.h branches/DRDDEV/coregrind/pub_core_clreq.h branches/DRDDEV/coregrind/pub_core_commandline.h branches/DRDDEV/coregrind/pub_core_coredump.h branches/DRDDEV/coregrind/pub_core_cpuid.h branches/DRDDEV/coregrind/pub_core_debugger.h branches/DRDDEV/coregrind/pub_core_debuginfo.h branches/DRDDEV/coregrind/pub_core_debuglog.h branches/DRDDEV/coregrind/pub_core_demangle.h branches/DRDDEV/coregrind/pub_core_dispatch.h branches/DRDDEV/coregrind/pub_core_dispatch_asm.h branches/DRDDEV/coregrind/pub_core_errormgr.h branches/DRDDEV/coregrind/pub_core_execontext.h branches/DRDDEV/coregrind/pub_core_hashtable.h branches/DRDDEV/coregrind/pub_core_initimg.h branches/DRDDEV/coregrind/pub_core_libcassert.h branches/DRDDEV/coregrind/pub_core_libcbase.h branches/DRDDEV/coregrind/pub_core_libcfile.h branches/DRDDEV/coregrind/pub_core_libcprint.h branches/DRDDEV/coregrind/pub_core_libcproc.h branches/DRDDEV/coregrind/pub_core_libcsignal.h branches/DRDDEV/coregrind/pub_core_machine.h branches/DRDDEV/coregrind/pub_core_mallocfree.h branches/DRDDEV/coregrind/pub_core_options.h branches/DRDDEV/coregrind/pub_core_oset.h branches/DRDDEV/coregrind/pub_core_redir.h branches/DRDDEV/coregrind/pub_core_replacemalloc.h branches/DRDDEV/coregrind/pub_core_scheduler.h branches/DRDDEV/coregrind/pub_core_seqmatch.h branches/DRDDEV/coregrind/pub_core_sigframe.h branches/DRDDEV/coregrind/pub_core_signals.h branches/DRDDEV/coregrind/pub_core_sparsewa.h branches/DRDDEV/coregrind/pub_core_stacks.h branches/DRDDEV/coregrind/pub_core_stacktrace.h branches/DRDDEV/coregrind/pub_core_syscall.h branches/DRDDEV/coregrind/pub_core_syswrap.h branches/DRDDEV/coregrind/pub_core_threadstate.h branches/DRDDEV/coregrind/pub_core_tooliface.h branches/DRDDEV/coregrind/pub_core_trampoline.h branches/DRDDEV/coregrind/pub_core_translate.h branches/DRDDEV/coregrind/pub_core_transtab.h branches/DRDDEV/coregrind/pub_core_transtab_asm.h branches/DRDDEV/coregrind/pub_core_ume.h branches/DRDDEV/coregrind/pub_core_vki.h branches/DRDDEV/coregrind/pub_core_vkiscnums.h branches/DRDDEV/coregrind/pub_core_wordfm.h branches/DRDDEV/coregrind/pub_core_xarray.h branches/DRDDEV/coregrind/vg_preloaded.c branches/DRDDEV/docs/internals/porting-HOWTO.txt branches/DRDDEV/docs/internals/porting-to-ARM.txt branches/DRDDEV/docs/xml/FAQ.xml branches/DRDDEV/drd/Testing.txt branches/DRDDEV/drd/docs/drd-manual.xml branches/DRDDEV/drd/drd.h branches/DRDDEV/drd/drd_barrier.c branches/DRDDEV/drd/drd_barrier.h branches/DRDDEV/drd/drd_basics.h branches/DRDDEV/drd/drd_bitmap.c branches/DRDDEV/drd/drd_bitmap.h branches/DRDDEV/drd/drd_clientobj.c branches/DRDDEV/drd/drd_clientobj.h branches/DRDDEV/drd/drd_clientreq.c branches/DRDDEV/drd/drd_clientreq.h branches/DRDDEV/drd/drd_cond.c branches/DRDDEV/drd/drd_cond.h branches/DRDDEV/drd/drd_error.c branches/DRDDEV/drd/drd_error.h branches/DRDDEV/drd/drd_gomp_intercepts.c branches/DRDDEV/drd/drd_load_store.c branches/DRDDEV/drd/drd_load_store.h branches/DRDDEV/drd/drd_main.c branches/DRDDEV/drd/drd_malloc_wrappers.c branches/DRDDEV/drd/drd_malloc_wrappers.h branches/DRDDEV/drd/drd_mutex.c branches/DRDDEV/drd/drd_mutex.h branches/DRDDEV/drd/drd_pthread_intercepts.c branches/DRDDEV/drd/drd_qtcore_intercepts.c branches/DRDDEV/drd/drd_rwlock.c branches/DRDDEV/drd/drd_rwlock.h branches/DRDDEV/drd/drd_segment.c branches/DRDDEV/drd/drd_segment.h branches/DRDDEV/drd/drd_semaphore.c branches/DRDDEV/drd/drd_semaphore.h branches/DRDDEV/drd/drd_strmem_intercepts.c branches/DRDDEV/drd/drd_suppression.c branches/DRDDEV/drd/drd_thread.c branches/DRDDEV/drd/drd_thread.h branches/DRDDEV/drd/drd_thread_bitmap.h branches/DRDDEV/drd/drd_vc.c branches/DRDDEV/drd/drd_vc.h branches/DRDDEV/drd/pub_drd_bitmap.h branches/DRDDEV/drd/tests/ branches/DRDDEV/drd/tests/Makefile.am branches/DRDDEV/drd/tests/atomic_var.vgtest branches/DRDDEV/drd/tests/bar_bad.stderr.exp branches/DRDDEV/drd/tests/bar_bad.vgtest branches/DRDDEV/drd/tests/bar_trivial.vgtest branches/DRDDEV/drd/tests/boost_thread.cpp branches/DRDDEV/drd/tests/fp_race.c branches/DRDDEV/drd/tests/fp_race.stderr.exp branches/DRDDEV/drd/tests/hg01_all_ok.vgtest branches/DRDDEV/drd/tests/hg02_deadlock.vgtest branches/DRDDEV/drd/tests/hg03_inherit.vgtest branches/DRDDEV/drd/tests/hg04_race.vgtest branches/DRDDEV/drd/tests/hg05_race2.vgtest branches/DRDDEV/drd/tests/hg06_readshared.vgtest branches/DRDDEV/drd/tests/linuxthreads_det.vgtest branches/DRDDEV/drd/tests/pth_barrier.c branches/DRDDEV/drd/tests/pth_detached.c branches/DRDDEV/drd/tests/pth_detached_sem.c branches/DRDDEV/drd/tests/rwlock_race.c branches/DRDDEV/drd/tests/rwlock_test.c branches/DRDDEV/drd/tests/rwlock_test.stderr.exp branches/DRDDEV/drd/tests/rwlock_test.vgtest branches/DRDDEV/drd/tests/sem_as_mutex.c branches/DRDDEV/drd/tests/sem_as_mutex.stderr.exp branches/DRDDEV/drd/tests/tc01_simple_race.vgtest branches/DRDDEV/drd/tests/tc02_simple_tls.vgtest branches/DRDDEV/drd/tests/tc03_re_excl.vgtest branches/DRDDEV/drd/tests/tc04_free_lock.stderr.exp branches/DRDDEV/drd/tests/tc04_free_lock.vgtest branches/DRDDEV/drd/tests/tc05_simple_race.vgtest branches/DRDDEV/drd/tests/tc06_two_races.vgtest branches/DRDDEV/drd/tests/tc07_hbl1.vgtest branches/DRDDEV/drd/tests/tc08_hbl2.vgtest branches/DRDDEV/drd/tests/tc09_bad_unlock.stderr.exp branches/DRDDEV/drd/tests/tc09_bad_unlock.vgtest branches/DRDDEV/drd/tests/tc10_rec_lock.vgtest branches/DRDDEV/drd/tests/tc11_XCHG.vgtest branches/DRDDEV/drd/tests/tc12_rwl_trivial.vgtest branches/DRDDEV/drd/tests/tc13_laog1.vgtest branches/DRDDEV/drd/tests/tc15_laog_lockdel.vgtest branches/DRDDEV/drd/tests/tc16_byterace.vgtest branches/DRDDEV/drd/tests/tc17_sembar.vgtest branches/DRDDEV/drd/tests/tc18_semabuse.vgtest branches/DRDDEV/drd/tests/tc19_shadowmem.stderr.exp branches/DRDDEV/drd/tests/tc19_shadowmem.vgtest branches/DRDDEV/drd/tests/tc20_verifywrap.stderr.exp-glibc2.3 branches/DRDDEV/drd/tests/tc20_verifywrap.stderr.exp-glibc2.5 branches/DRDDEV/drd/tests/tc20_verifywrap.stderr.exp-glibc2.5-ppc branches/DRDDEV/drd/tests/tc20_verifywrap.stderr.exp-glibc2.8 branches/DRDDEV/drd/tests/tc20_verifywrap.vgtest branches/DRDDEV/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.3 branches/DRDDEV/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.3-b branches/DRDDEV/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.5 branches/DRDDEV/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.5-ppc branches/DRDDEV/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.8 branches/DRDDEV/drd/tests/tc20_verifywrap2.vgtest branches/DRDDEV/drd/tests/tc21_pthonce.vgtest branches/DRDDEV/drd/tests/tc22_exit_w_lock.vgtest branches/DRDDEV/drd/tests/tc23_bogus_condwait.vgtest branches/DRDDEV/drd/tests/tc24_nonzero_sem.stderr.exp branches/DRDDEV/drd/tests/tc24_nonzero_sem.vgtest branches/DRDDEV/exp-omega/exp-omega.h branches/DRDDEV/exp-omega/o_main.c branches/DRDDEV/exp-omega/o_replace_memops.c branches/DRDDEV/exp-ptrcheck.supp branches/DRDDEV/exp-ptrcheck/h_intercepts.c branches/DRDDEV/exp-ptrcheck/h_main.c branches/DRDDEV/exp-ptrcheck/h_main.h branches/DRDDEV/exp-ptrcheck/pc_common.c branches/DRDDEV/exp-ptrcheck/pc_common.h branches/DRDDEV/exp-ptrcheck/pc_main.c branches/DRDDEV/exp-ptrcheck/sg_main.c branches/DRDDEV/exp-ptrcheck/sg_main.h branches/DRDDEV/exp-ptrcheck/tests/Makefile.am branches/DRDDEV/exp-ptrcheck/tests/ccc.stderr.exp-glibc25-amd64 branches/DRDDEV/exp-ptrcheck/tests/ccc.stderr.exp-glibc25-x86 branches/DRDDEV/exp-ptrcheck/tests/ccc.stderr.exp-glibc27-x86 branches/DRDDEV/exp-ptrcheck/tests/ccc.stderr.exp-glibc28-amd64 branches/DRDDEV/exp-ptrcheck/tests/filter_stderr branches/DRDDEV/exp-ptrcheck/tests/stackerr.c branches/DRDDEV/exp-ptrcheck/tests/tricky.c branches/DRDDEV/exp-ptrcheck/tests/x86/Makefile.am branches/DRDDEV/glibc-2.34567-NPTL-helgrind.supp branches/DRDDEV/helgrind/helgrind.h branches/DRDDEV/helgrind/hg_basics.c branches/DRDDEV/helgrind/hg_basics.h branches/DRDDEV/helgrind/hg_errors.c branches/DRDDEV/helgrind/hg_errors.h branches/DRDDEV/helgrind/hg_intercepts.c branches/DRDDEV/helgrind/hg_lock_n_thread.c branches/DRDDEV/helgrind/hg_lock_n_thread.h branches/DRDDEV/helgrind/hg_main.c branches/DRDDEV/helgrind/hg_wordset.c branches/DRDDEV/helgrind/hg_wordset.h branches/DRDDEV/helgrind/libhb.h branches/DRDDEV/helgrind/libhb_core.c branches/DRDDEV/helgrind/tests/Makefile.am branches/DRDDEV/helgrind/tests/filter_stderr branches/DRDDEV/helgrind/tests/hg02_deadlock.stderr.exp-glibc25-amd64 branches/DRDDEV/helgrind/tests/hg02_deadlock.stderr.exp-glibc25-x86 branches/DRDDEV/helgrind/tests/hg02_deadlock.stderr.exp-glibc27-amd64 branches/DRDDEV/helgrind/tests/hg03_inherit.stderr.exp-glibc25-amd64 branches/DRDDEV/helgrind/tests/hg03_inherit.stderr.exp-glibc27-amd64 branches/DRDDEV/helgrind/tests/hg04_race.stderr.exp-glibc25-amd64 branches/DRDDEV/helgrind/tests/hg04_race.stderr.exp-glibc27-amd64 branches/DRDDEV/helgrind/tests/hg05_race2.stderr.exp-glibc25-amd64 branches/DRDDEV/helgrind/tests/hg05_race2.stderr.exp-glibc27-amd64 branches/DRDDEV/helgrind/tests/pth_barrier1.stderr.exp-glibc27-amd64 branches/DRDDEV/helgrind/tests/pth_barrier1.stderr.exp-glibc28-amd64 branches/DRDDEV/helgrind/tests/pth_barrier1.vgtest branches/DRDDEV/helgrind/tests/pth_barrier2.stderr.exp-glibc27-amd64 branches/DRDDEV/helgrind/tests/pth_barrier2.stderr.exp-glibc28-amd64 branches/DRDDEV/helgrind/tests/pth_barrier2.vgtest branches/DRDDEV/helgrind/tests/pth_barrier3.stderr.exp-glibc27-amd64 branches/DRDDEV/helgrind/tests/pth_barrier3.stderr.exp-glibc28-amd64 branches/DRDDEV/helgrind/tests/pth_barrier3.vgtest branches/DRDDEV/helgrind/tests/rwlock_race.stderr.exp-glibc25-amd64 branches/DRDDEV/helgrind/tests/rwlock_race.stderr.exp-glibc27-amd64 branches/DRDDEV/helgrind/tests/rwlock_race.vgtest branches/DRDDEV/helgrind/tests/rwlock_test.vgtest branches/DRDDEV/helgrind/tests/tc01_simple_race.stderr.exp-glibc25-amd64 branches/DRDDEV/helgrind/tests/tc01_simple_race.stderr.exp-glibc27-amd64 branches/DRDDEV/helgrind/tests/tc05_simple_race.stderr.exp-glibc25-amd64 branches/DRDDEV/helgrind/tests/tc05_simple_race.stderr.exp-glibc27-amd64 branches/DRDDEV/helgrind/tests/tc06_two_races.stderr.exp-glibc25-amd64 branches/DRDDEV/helgrind/tests/tc06_two_races.stderr.exp-glibc27-amd64 branches/DRDDEV/helgrind/tests/tc09_bad_unlock.stderr.exp-glibc23-amd64 branches/DRDDEV/helgrind/tests/tc09_bad_unlock.stderr.exp-glibc25-amd64 branches/DRDDEV/helgrind/tests/tc09_bad_unlock.stderr.exp-glibc25-x86 branches/DRDDEV/helgrind/tests/tc09_bad_unlock.stderr.exp-glibc27-amd64 branches/DRDDEV/helgrind/tests/tc14_laog_dinphils.stderr.exp-glibc25-amd64 branches/DRDDEV/helgrind/tests/tc14_laog_dinphils.stderr.exp-glibc25-x86 branches/DRDDEV/helgrind/tests/tc14_laog_dinphils.stderr.exp-glibc27-amd64 branches/DRDDEV/helgrind/tests/tc16_byterace.stderr.exp-glibc25-amd64 branches/DRDDEV/helgrind/tests/tc16_byterace.stderr.exp-glibc27-amd64 branches/DRDDEV/helgrind/tests/tc19_shadowmem.stderr.exp-glibc25-amd64 branches/DRDDEV/helgrind/tests/tc19_shadowmem.stderr.exp-glibc27-amd64 branches/DRDDEV/helgrind/tests/tc20_verifywrap.stderr.exp-glibc25-amd64 branches/DRDDEV/helgrind/tests/tc20_verifywrap.stderr.exp-glibc27-amd64 branches/DRDDEV/helgrind/tests/tc20_verifywrap.stderr.exp-glibc28-amd64 branches/DRDDEV/helgrind/tests/tc21_pthonce.stderr.exp-glibc25-amd64 branches/DRDDEV/helgrind/tests/tc21_pthonce.stderr.exp-glibc27-amd64 branches/DRDDEV/helgrind/tests/tc22_exit_w_lock.stderr.exp-glibc25-amd64 branches/DRDDEV/helgrind/tests/tc22_exit_w_lock.stderr.exp-glibc25-x86 branches/DRDDEV/helgrind/tests/tc22_exit_w_lock.stderr.exp-glibc27-amd64 branches/DRDDEV/include/pub_tool_aspacemgr.h branches/DRDDEV/include/pub_tool_basics.h branches/DRDDEV/include/pub_tool_basics_asm.h branches/DRDDEV/include/pub_tool_clientstate.h branches/DRDDEV/include/pub_tool_clreq.h branches/DRDDEV/include/pub_tool_cpuid.h branches/DRDDEV/include/pub_tool_debuginfo.h branches/DRDDEV/include/pub_tool_errormgr.h branches/DRDDEV/include/pub_tool_execontext.h branches/DRDDEV/include/pub_tool_hashtable.h branches/DRDDEV/include/pub_tool_libcassert.h branches/DRDDEV/include/pub_tool_libcbase.h branches/DRDDEV/include/pub_tool_libcfile.h branches/DRDDEV/include/pub_tool_libcprint.h branches/DRDDEV/include/pub_tool_libcproc.h branches/DRDDEV/include/pub_tool_libcsignal.h branches/DRDDEV/include/pub_tool_machine.h branches/DRDDEV/include/pub_tool_mallocfree.h branches/DRDDEV/include/pub_tool_options.h branches/DRDDEV/include/pub_tool_oset.h branches/DRDDEV/include/pub_tool_redir.h branches/DRDDEV/include/pub_tool_replacemalloc.h branches/DRDDEV/include/pub_tool_seqmatch.h branches/DRDDEV/include/pub_tool_signals.h branches/DRDDEV/include/pub_tool_sparsewa.h branches/DRDDEV/include/pub_tool_stacktrace.h branches/DRDDEV/include/pub_tool_threadstate.h branches/DRDDEV/include/pub_tool_tooliface.h branches/DRDDEV/include/pub_tool_vki.h branches/DRDDEV/include/pub_tool_vkiscnums.h branches/DRDDEV/include/pub_tool_wordfm.h branches/DRDDEV/include/pub_tool_xarray.h branches/DRDDEV/include/valgrind.h branches/DRDDEV/include/vki/vki-amd64-linux.h branches/DRDDEV/include/vki/vki-linux.h branches/DRDDEV/include/vki/vki-posixtypes-amd64-linux.h branches/DRDDEV/include/vki/vki-posixtypes-ppc32-linux.h branches/DRDDEV/include/vki/vki-posixtypes-ppc64-linux.h branches/DRDDEV/include/vki/vki-posixtypes-x86-linux.h branches/DRDDEV/include/vki/vki-ppc32-aix5.h branches/DRDDEV/include/vki/vki-ppc32-linux.h branches/DRDDEV/include/vki/vki-ppc64-aix5.h branches/DRDDEV/include/vki/vki-ppc64-linux.h branches/DRDDEV/include/vki/vki-scnums-aix5.h branches/DRDDEV/include/vki/vki-scnums-amd64-linux.h branches/DRDDEV/include/vki/vki-scnums-ppc32-linux.h branches/DRDDEV/include/vki/vki-scnums-ppc64-linux.h branches/DRDDEV/include/vki/vki-scnums-x86-linux.h branches/DRDDEV/include/vki/vki-x86-linux.h branches/DRDDEV/lackey/lk_main.c branches/DRDDEV/lackey/tests/filter_stderr branches/DRDDEV/lackey/tests/true.stderr.exp branches/DRDDEV/massif/ms_main.c branches/DRDDEV/massif/perf/Makefile.am branches/DRDDEV/massif/tests/ branches/DRDDEV/massif/tests/Makefile.am branches/DRDDEV/massif/tests/alloc-fns-A.post.exp branches/DRDDEV/massif/tests/alloc-fns-B.post.exp branches/DRDDEV/massif/tests/alloc-fns.c branches/DRDDEV/massif/tests/basic.c branches/DRDDEV/massif/tests/basic.post.exp branches/DRDDEV/massif/tests/basic2.post.exp branches/DRDDEV/massif/tests/big-alloc.c branches/DRDDEV/massif/tests/big-alloc.post.exp branches/DRDDEV/massif/tests/culling1.c branches/DRDDEV/massif/tests/culling1.stderr.exp branches/DRDDEV/massif/tests/culling1.vgtest branches/DRDDEV/massif/tests/culling2.c branches/DRDDEV/massif/tests/culling2.stderr.exp branches/DRDDEV/massif/tests/culling2.vgtest branches/DRDDEV/massif/tests/custom_alloc.c branches/DRDDEV/massif/tests/custom_alloc.post.exp branches/DRDDEV/massif/tests/custom_alloc.vgtest branches/DRDDEV/massif/tests/deep-A.post.exp branches/DRDDEV/massif/tests/deep-B.post.exp branches/DRDDEV/massif/tests/deep-B.stderr.exp branches/DRDDEV/massif/tests/deep-C.post.exp branches/DRDDEV/massif/tests/deep-C.stderr.exp branches/DRDDEV/massif/tests/deep-D.post.exp branches/DRDDEV/massif/tests/deep.c branches/DRDDEV/massif/tests/insig.c branches/DRDDEV/massif/tests/insig.post.exp branches/DRDDEV/massif/tests/insig.vgtest branches/DRDDEV/massif/tests/long-names.c branches/DRDDEV/massif/tests/long-names.post.exp branches/DRDDEV/massif/tests/long-names.post.exp2 branches/DRDDEV/massif/tests/one.c branches/DRDDEV/massif/tests/peak.c branches/DRDDEV/massif/tests/peak.post.exp branches/DRDDEV/massif/tests/peak.vgtest branches/DRDDEV/massif/tests/peak2.post.exp branches/DRDDEV/massif/tests/peak2.stderr.exp branches/DRDDEV/massif/tests/peak2.vgtest branches/DRDDEV/massif/tests/realloc.c branches/DRDDEV/massif/tests/realloc.post.exp branches/DRDDEV/massif/tests/realloc.stderr.exp branches/DRDDEV/massif/tests/thresholds.c branches/DRDDEV/massif/tests/thresholds_0_0.post.exp branches/DRDDEV/massif/tests/thresholds_0_10.post.exp branches/DRDDEV/massif/tests/thresholds_10_0.post.exp branches/DRDDEV/massif/tests/thresholds_10_10.post.exp branches/DRDDEV/massif/tests/thresholds_5_0.post.exp branches/DRDDEV/massif/tests/thresholds_5_10.post.exp branches/DRDDEV/memcheck/docs/mc-manual.xml branches/DRDDEV/memcheck/mc_errors.c branches/DRDDEV/memcheck/mc_include.h branches/DRDDEV/memcheck/mc_leakcheck.c branches/DRDDEV/memcheck/mc_machine.c branches/DRDDEV/memcheck/mc_main.c branches/DRDDEV/memcheck/mc_malloc_wrappers.c branches/DRDDEV/memcheck/mc_replace_strmem.c branches/DRDDEV/memcheck/mc_translate.c branches/DRDDEV/memcheck/memcheck.h branches/DRDDEV/memcheck/tests/ branches/DRDDEV/memcheck/tests/Makefile.am branches/DRDDEV/memcheck/tests/amd64/Makefile.am branches/DRDDEV/memcheck/tests/badpoll.stderr.exp branches/DRDDEV/memcheck/tests/buflen_check.stderr.exp branches/DRDDEV/memcheck/tests/error_counts.c branches/DRDDEV/memcheck/tests/error_counts.stdout.exp branches/DRDDEV/memcheck/tests/execve.stderr.exp branches/DRDDEV/memcheck/tests/execve2.stderr.exp branches/DRDDEV/memcheck/tests/filter_stderr branches/DRDDEV/memcheck/tests/filter_xml branches/DRDDEV/memcheck/tests/fwrite.stderr.exp branches/DRDDEV/memcheck/tests/leak-0.c branches/DRDDEV/memcheck/tests/leak-0.stderr.exp branches/DRDDEV/memcheck/tests/leak-0.vgtest branches/DRDDEV/memcheck/tests/leak-cycle.c branches/DRDDEV/memcheck/tests/leak-cycle.stderr.exp branches/DRDDEV/memcheck/tests/leak-cycle.vgtest branches/DRDDEV/memcheck/tests/leak-tree.c branches/DRDDEV/memcheck/tests/leak-tree.stderr.exp branches/DRDDEV/memcheck/tests/leak-tree.vgtest branches/DRDDEV/memcheck/tests/linux/ branches/DRDDEV/memcheck/tests/linux/Makefile.am branches/DRDDEV/memcheck/tests/linux/brk.c branches/DRDDEV/memcheck/tests/linux/timerfd-syscall.c branches/DRDDEV/memcheck/tests/malloc_free_fill.c branches/DRDDEV/memcheck/tests/malloc_free_fill.stderr.exp branches/DRDDEV/memcheck/tests/malloc_free_fill.vgtest branches/DRDDEV/memcheck/tests/malloc_usable.c branches/DRDDEV/memcheck/tests/match-overrun.c branches/DRDDEV/memcheck/tests/match-overrun.stderr.exp branches/DRDDEV/memcheck/tests/match-overrun.supp branches/DRDDEV/memcheck/tests/match-overrun.vgtest branches/DRDDEV/memcheck/tests/memalign2.c branches/DRDDEV/memcheck/tests/mempool.stderr.exp branches/DRDDEV/memcheck/tests/mempool.stderr.exp64 branches/DRDDEV/memcheck/tests/mismatches.stderr.exp branches/DRDDEV/memcheck/tests/nanoleak.stderr.exp branches/DRDDEV/memcheck/tests/nanoleak.vgtest branches/DRDDEV/memcheck/tests/nanoleak_supp.vgtest branches/DRDDEV/memcheck/tests/origin1-yes.stderr.exp branches/DRDDEV/memcheck/tests/pointer-trace.c branches/DRDDEV/memcheck/tests/pointer-trace.stderr.exp branches/DRDDEV/memcheck/tests/pointer-trace.vgtest branches/DRDDEV/memcheck/tests/sigaltstack.vgtest branches/DRDDEV/memcheck/tests/trivialleak.stderr.exp branches/DRDDEV/memcheck/tests/trivialleak.stderr.exp2 branches/DRDDEV/memcheck/tests/trivialleak.vgtest branches/DRDDEV/memcheck/tests/writev.stderr.exp branches/DRDDEV/memcheck/tests/x86-linux/ branches/DRDDEV/memcheck/tests/x86-linux/Makefile.am branches/DRDDEV/memcheck/tests/x86-linux/scalar.c branches/DRDDEV/memcheck/tests/x86-linux/scalar.h branches/DRDDEV/memcheck/tests/x86-linux/scalar.stderr.exp branches/DRDDEV/memcheck/tests/x86-linux/scalar_exit_group.stderr.exp branches/DRDDEV/memcheck/tests/x86-linux/scalar_supp.stderr.exp branches/DRDDEV/memcheck/tests/x86-linux/scalar_supp.supp branches/DRDDEV/memcheck/tests/x86/Makefile.am branches/DRDDEV/memcheck/tests/x86/fxsave.vgtest branches/DRDDEV/memcheck/tests/x86/sse1_memory.vgtest branches/DRDDEV/memcheck/tests/x86/sse2_memory.vgtest branches/DRDDEV/memcheck/tests/x86/xor-undef-x86.vgtest branches/DRDDEV/memcheck/tests/xml1.stderr.exp branches/DRDDEV/memcheck/tests/xml1.stderr.exp2 branches/DRDDEV/memcheck/tests/xml1.stderr.exp64 branches/DRDDEV/nightly/README.txt branches/DRDDEV/nightly/bin/nightly branches/DRDDEV/nightly/conf/georgia-tech-cellbuzz-native.conf branches/DRDDEV/none/nl_main.c branches/DRDDEV/none/tests/Makefile.am branches/DRDDEV/none/tests/amd64/Makefile.am branches/DRDDEV/none/tests/amd64/insn_sse3.vgtest branches/DRDDEV/none/tests/amd64/insn_ssse3.vgtest branches/DRDDEV/none/tests/amd64/ssse3_misaligned.vgtest branches/DRDDEV/none/tests/cmdline1.stdout.exp branches/DRDDEV/none/tests/cmdline2.stdout.exp branches/DRDDEV/none/tests/coolo_sigaction.cpp branches/DRDDEV/none/tests/faultstatus.c branches/DRDDEV/none/tests/fdleak_cmsg.c branches/DRDDEV/none/tests/fdleak_cmsg.stderr.exp branches/DRDDEV/none/tests/fdleak_creat.c branches/DRDDEV/none/tests/fdleak_creat.stderr.exp branches/DRDDEV/none/tests/fdleak_dup.stderr.exp branches/DRDDEV/none/tests/fdleak_dup2.stderr.exp branches/DRDDEV/none/tests/fdleak_fcntl.stderr.exp branches/DRDDEV/none/tests/fdleak_ipv4.stderr.exp branches/DRDDEV/none/tests/fdleak_open.stderr.exp branches/DRDDEV/none/tests/fdleak_pipe.stderr.exp branches/DRDDEV/none/tests/fdleak_socketpair.stderr.exp branches/DRDDEV/none/tests/filter_fdleak branches/DRDDEV/none/tests/linux/ branches/DRDDEV/none/tests/linux/Makefile.am branches/DRDDEV/none/tests/ppc32/Makefile.am branches/DRDDEV/none/tests/ppc64/Makefile.am branches/DRDDEV/none/tests/rlimit_nofile.c branches/DRDDEV/none/tests/vgprintf.stdout.exp branches/DRDDEV/none/tests/x86/Makefile.am branches/DRDDEV/none/tests/x86/bug137714-x86.vgtest branches/DRDDEV/none/tests/x86/cse_fail.vgtest branches/DRDDEV/none/tests/x86/insn_cmov.vgtest branches/DRDDEV/none/tests/x86/insn_fpu.vgtest branches/DRDDEV/none/tests/x86/insn_mmx.vgtest branches/DRDDEV/none/tests/x86/insn_mmxext.vgtest branches/DRDDEV/none/tests/x86/insn_sse.vgtest branches/DRDDEV/none/tests/x86/insn_sse2.vgtest branches/DRDDEV/none/tests/x86/insn_sse3.vgtest branches/DRDDEV/none/tests/x86/insn_ssse3.vgtest branches/DRDDEV/none/tests/x86/ssse3_misaligned.vgtest branches/DRDDEV/perf/Makefile.am branches/DRDDEV/perf/tinycc.c branches/DRDDEV/tests/ branches/DRDDEV/tests/Makefile.am branches/DRDDEV/tests/filter_discards branches/DRDDEV/tests/filter_libc branches/DRDDEV/tests/filter_numbers branches/DRDDEV/tests/vg_regtest.in [... diff too large to include ...] |
|
From: <sv...@va...> - 2009-05-02 16:13:00
|
Author: bart Date: 2009-05-02 17:12:56 +0100 (Sat, 02 May 2009) New Revision: 9720 Log: Merged trunk revisions r9164:9173. Modified: branches/DRDDEV/drd/drd_barrier.c branches/DRDDEV/drd/drd_barrier.h branches/DRDDEV/drd/drd_bitmap.c branches/DRDDEV/drd/drd_clientobj.c branches/DRDDEV/drd/drd_clientobj.h branches/DRDDEV/drd/drd_clientreq.c branches/DRDDEV/drd/drd_clientreq.h branches/DRDDEV/drd/drd_cond.c branches/DRDDEV/drd/drd_cond.h branches/DRDDEV/drd/drd_error.c branches/DRDDEV/drd/drd_error.h branches/DRDDEV/drd/drd_load_store.c branches/DRDDEV/drd/drd_load_store.h branches/DRDDEV/drd/drd_main.c branches/DRDDEV/drd/drd_malloc_wrappers.c branches/DRDDEV/drd/drd_malloc_wrappers.h branches/DRDDEV/drd/drd_mutex.c branches/DRDDEV/drd/drd_mutex.h branches/DRDDEV/drd/drd_rwlock.c branches/DRDDEV/drd/drd_rwlock.h branches/DRDDEV/drd/drd_segment.c branches/DRDDEV/drd/drd_semaphore.c branches/DRDDEV/drd/drd_semaphore.h branches/DRDDEV/drd/drd_suppression.c branches/DRDDEV/drd/drd_thread.c branches/DRDDEV/drd/drd_thread.h branches/DRDDEV/drd/drd_thread_bitmap.h branches/DRDDEV/drd/pub_drd_bitmap.h branches/DRDDEV/drd/tests/drd_bitmap_test.c branches/DRDDEV/glibc-2.X-drd.supp [... diff too large to include ...] |
|
From: <sv...@va...> - 2009-05-02 14:52:36
|
Author: bart
Date: 2009-05-02 15:52:31 +0100 (Sat, 02 May 2009)
New Revision: 9719
Log:
Merged trunk revisions r9153:9164.
Modified:
branches/DRDDEV/Makefile.am
branches/DRDDEV/drd/drd_barrier.c
branches/DRDDEV/drd/drd_barrier.h
branches/DRDDEV/drd/drd_basics.h
branches/DRDDEV/drd/drd_bitmap.c
branches/DRDDEV/drd/drd_clientobj.c
branches/DRDDEV/drd/drd_clientreq.c
branches/DRDDEV/drd/drd_clientreq.h
branches/DRDDEV/drd/drd_error.c
branches/DRDDEV/drd/drd_error.h
branches/DRDDEV/drd/drd_load_store.c
branches/DRDDEV/drd/drd_load_store.h
branches/DRDDEV/drd/drd_main.c
branches/DRDDEV/drd/drd_mutex.c
branches/DRDDEV/drd/drd_mutex.h
branches/DRDDEV/drd/drd_pthread_intercepts.c
branches/DRDDEV/drd/drd_rwlock.c
branches/DRDDEV/drd/drd_rwlock.h
branches/DRDDEV/drd/drd_segment.c
branches/DRDDEV/drd/drd_segment.h
branches/DRDDEV/drd/drd_semaphore.c
branches/DRDDEV/drd/drd_semaphore.h
branches/DRDDEV/drd/drd_suppression.c
branches/DRDDEV/drd/drd_suppression.h
branches/DRDDEV/drd/drd_thread.c
branches/DRDDEV/drd/drd_thread.h
branches/DRDDEV/drd/drd_vc.c
branches/DRDDEV/drd/drd_vc.h
branches/DRDDEV/drd/tests/atomic_var.c
branches/DRDDEV/drd/tests/atomic_var.stderr.exp-with-atomic-builtins-1
branches/DRDDEV/drd/tests/atomic_var.stderr.exp-with-atomic-builtins-2
branches/DRDDEV/drd/tests/drd_bitmap_test.c
branches/DRDDEV/glibc-2.X-drd.supp
branches/DRDDEV/memcheck/mc_machine.c
Modified: branches/DRDDEV/Makefile.am
===================================================================
--- branches/DRDDEV/Makefile.am 2009-05-02 14:20:09 UTC (rev 9718)
+++ branches/DRDDEV/Makefile.am 2009-05-02 14:52:31 UTC (rev 9719)
@@ -215,26 +215,26 @@
$(CC) @FLAG_M32@ -Wl,--verbose -nostdlib 2>&1 | sed \
-e '1,/^=====\+$$/d' \
-e '/^=====\+$$/,/.\*/d' \
- -e '/\. = 0x[0-9A-Fa-f]\+ + SIZEOF_HEADERS/s/0x[0-9A-Fa-f]\+/valt_load_address/g' > $@ \
+ -e '/\. = \(0x[0-9A-Fa-f]\+\|SEGMENT_START("[^"]\+", 0x[0-9A-Fa-f]\+)\) + SIZEOF_HEADERS/s/0x[0-9A-Fa-f]\+/valt_load_address/g' > $@ \
|| rm -f $@
valt_load_address_amd64_linux.lds: Makefile
$(CC) -m64 -Wl,--verbose -nostdlib 2>&1 | sed \
-e '1,/^=====\+$$/d' \
-e '/^=====\+$$/,/.\*/d' \
- -e '/\. = 0x[0-9A-Fa-f]\+ + SIZEOF_HEADERS/s/0x[0-9A-Fa-f]\+/valt_load_address/g' > $@ \
+ -e '/\. = \(0x[0-9A-Fa-f]\+\|SEGMENT_START("[^"]\+", 0x[0-9A-Fa-f]\+)\) + SIZEOF_HEADERS/s/0x[0-9A-Fa-f]\+/valt_load_address/g' > $@ \
|| rm -f $@
valt_load_address_ppc32_linux.lds: Makefile
$(CC) @FLAG_M32@ -Wl,--verbose -nostdlib 2>&1 | sed \
-e '1,/^=====\+$$/d' \
-e '/^=====\+$$/,/.\*/d' \
- -e '/\. = 0x[0-9A-Fa-f]\+ + SIZEOF_HEADERS/s/0x[0-9A-Fa-f]\+/valt_load_address/g' > $@ \
+ -e '/\. = \(0x[0-9A-Fa-f]\+\|SEGMENT_START("[^"]\+", 0x[0-9A-Fa-f]\+)\) + SIZEOF_HEADERS/s/0x[0-9A-Fa-f]\+/valt_load_address/g' > $@ \
|| rm -f $@
valt_load_address_ppc64_linux.lds: Makefile
$(CC) -m64 -Wl,--verbose -nostdlib 2>&1 | sed \
-e '1,/^=====\+$$/d' \
-e '/^=====\+$$/,/.\*/d' \
- -e '/\. = 0x[0-9A-Fa-f]\+ + SIZEOF_HEADERS/s/0x[0-9A-Fa-f]\+/valt_load_address/g' > $@ \
+ -e '/\. = \(0x[0-9A-Fa-f]\+\|SEGMENT_START("[^"]\+", 0x[0-9A-Fa-f]\+)\) + SIZEOF_HEADERS/s/0x[0-9A-Fa-f]\+/valt_load_address/g' > $@ \
|| rm -f $@
Modified: branches/DRDDEV/drd/drd_barrier.c
===================================================================
--- branches/DRDDEV/drd/drd_barrier.c 2009-05-02 14:20:09 UTC (rev 9718)
+++ branches/DRDDEV/drd/drd_barrier.c 2009-05-02 14:52:31 UTC (rev 9719)
@@ -85,8 +85,8 @@
static void barrier_thread_destroy(struct barrier_thread_info* const p)
{
tl_assert(p);
- sg_put(p->sg[0]);
- sg_put(p->sg[1]);
+ DRD_(sg_put)(p->sg[0]);
+ DRD_(sg_put)(p->sg[1]);
}
/** Initialize the structure *p with the specified client-side barrier address,
Modified: branches/DRDDEV/drd/drd_barrier.h
===================================================================
--- branches/DRDDEV/drd/drd_barrier.h 2009-05-02 14:20:09 UTC (rev 9718)
+++ branches/DRDDEV/drd/drd_barrier.h 2009-05-02 14:52:31 UTC (rev 9719)
@@ -23,7 +23,7 @@
*/
-// Barrier state information.
+/* Barrier state information. */
#ifndef __DRD_BARRIER_H
@@ -32,7 +32,6 @@
#include "drd_clientreq.h" // BarrierT
#include "drd_thread.h" // DrdThreadId
-#include "drd_vc.h"
#include "pub_tool_basics.h" // Addr
Modified: branches/DRDDEV/drd/drd_basics.h
===================================================================
--- branches/DRDDEV/drd/drd_basics.h 2009-05-02 14:20:09 UTC (rev 9718)
+++ branches/DRDDEV/drd/drd_basics.h 2009-05-02 14:52:31 UTC (rev 9719)
@@ -35,4 +35,7 @@
#define DRD_(str) VGAPPEND(vgDrd_, str)
+typedef UInt DrdThreadId;
+
+
#endif /* __DRD_BASICS_H */
Modified: branches/DRDDEV/drd/drd_bitmap.c
===================================================================
--- branches/DRDDEV/drd/drd_bitmap.c 2009-05-02 14:20:09 UTC (rev 9718)
+++ branches/DRDDEV/drd/drd_bitmap.c 2009-05-02 14:52:31 UTC (rev 9719)
@@ -877,7 +877,7 @@
| ((bm1r->bm0_r[k] & bm0_mask(b)) ? RHS_R : 0)
| ((bm1r->bm0_w[k] & bm0_mask(b)) ? RHS_W : 0);
Addr const a = make_address(bm2l->addr, k * BITS_PER_UWORD | b);
- if (HAS_RACE(access_mask) && ! drd_is_suppressed(a, a + 1))
+ if (HAS_RACE(access_mask) && ! DRD_(is_suppressed)(a, a + 1))
{
return 1;
}
Modified: branches/DRDDEV/drd/drd_clientobj.c
===================================================================
--- branches/DRDDEV/drd/drd_clientobj.c 2009-05-02 14:20:09 UTC (rev 9718)
+++ branches/DRDDEV/drd/drd_clientobj.c 2009-05-02 14:52:31 UTC (rev 9719)
@@ -134,7 +134,7 @@
p->any.first_observed_at = VG_(record_ExeContext)(VG_(get_running_tid)(), 0);
VG_(OSetGen_Insert)(s_clientobj, p);
tl_assert(VG_(OSetGen_Lookup)(s_clientobj, &a1) == p);
- drd_start_suppression(a1, a1 + 1, "clientobj");
+ DRD_(start_suppression)(a1, a1 + 1, "clientobj");
return p;
}
@@ -173,7 +173,7 @@
tl_assert(s_clientobj);
- if (! drd_is_any_suppressed(a1, a2))
+ if (! DRD_(is_any_suppressed)(a1, a2))
return;
VG_(OSetGen_ResetIter)(s_clientobj);
Modified: branches/DRDDEV/drd/drd_clientreq.c
===================================================================
--- branches/DRDDEV/drd/drd_clientreq.c 2009-05-02 14:20:09 UTC (rev 9718)
+++ branches/DRDDEV/drd/drd_clientreq.c 2009-05-02 14:52:31 UTC (rev 9719)
@@ -47,48 +47,15 @@
static Addr DRD_(highest_used_stack_address)(const ThreadId vg_tid);
+/* Function definitions. */
+
/**
- * Walk the stack up to the highest stack frame, and return the stack pointer
- * of the highest stack frame. It is assumed that there are no more than
- * ten stack frames above the current frame. This should be no problem
- * since this function is either called indirectly from the _init() function
- * in vgpreload_exp-drd-*.so or from the thread wrapper for a newly created
- * thread. See also drd_pthread_intercepts.c.
+ * Tell the Valgrind core the address of the DRD function that processes
+ * client requests. Must be called before any client code is run.
*/
-static Addr DRD_(highest_used_stack_address)(const ThreadId vg_tid)
+void DRD_(clientreq_init)(void)
{
- UInt nframes;
- const UInt n_ips = 10;
- UInt i;
- Addr ips[n_ips], sps[n_ips];
- Addr husa;
-
- nframes = VG_(get_StackTrace)(vg_tid, ips, n_ips, sps, 0, 0);
- tl_assert(1 <= nframes && nframes <= n_ips);
-
- /* A hack to work around VG_(get_StackTrace)()'s behavior that sometimes */
- /* the topmost stackframes it returns are bogus (this occurs sometimes */
- /* at least on amd64, ppc32 and ppc64). */
-
- husa = sps[0];
-
- tl_assert(VG_(thread_get_stack_max)(vg_tid)
- - VG_(thread_get_stack_size)(vg_tid) <= husa
- && husa < VG_(thread_get_stack_max)(vg_tid));
-
- for (i = 1; i < nframes; i++)
- {
- if (sps[i] == 0)
- break;
- if (husa < sps[i] && sps[i] < VG_(thread_get_stack_max)(vg_tid))
- husa = sps[i];
- }
-
- tl_assert(VG_(thread_get_stack_max)(vg_tid)
- - VG_(thread_get_stack_size)(vg_tid) <= husa
- && husa < VG_(thread_get_stack_max)(vg_tid));
-
- return husa;
+ VG_(needs_client_requests)(DRD_(handle_client_request));
}
/**
@@ -115,11 +82,11 @@
break;
case VG_USERREQ__DRD_START_SUPPRESSION:
- drd_start_suppression(arg[1], arg[1] + arg[2], "client");
+ DRD_(start_suppression)(arg[1], arg[1] + arg[2], "client");
break;
case VG_USERREQ__DRD_FINISH_SUPPRESSION:
- drd_finish_suppression(arg[1], arg[1] + arg[2]);
+ DRD_(finish_suppression)(arg[1], arg[1] + arg[2]);
break;
case VG_USERREQ__DRD_SUPPRESS_CURRENT_STACK:
@@ -143,8 +110,8 @@
}
#endif
thread_set_stack_startup(drd_tid, VG_(get_SP)(vg_tid));
- drd_start_suppression(topmost_sp, VG_(thread_get_stack_max)(vg_tid),
- "stack top");
+ DRD_(start_suppression)(topmost_sp, VG_(thread_get_stack_max)(vg_tid),
+ "stack top");
break;
}
@@ -153,11 +120,11 @@
break;
case VG_USERREQ__DRD_START_TRACE_ADDR:
- drd_start_tracing_address_range(arg[1], arg[1] + arg[2]);
+ DRD_(start_tracing_address_range)(arg[1], arg[1] + arg[2]);
break;
case VG_USERREQ__DRD_STOP_TRACE_ADDR:
- drd_stop_tracing_address_range(arg[1], arg[1] + arg[2]);
+ DRD_(stop_tracing_address_range)(arg[1], arg[1] + arg[2]);
break;
case VG_USERREQ__DRD_STOP_RECORDING:
@@ -411,10 +378,45 @@
}
/**
- * Tell the Valgrind core the address of the DRD function that processes
- * client requests. Must be called before any client code is run.
+ * Walk the stack up to the highest stack frame, and return the stack pointer
+ * of the highest stack frame. It is assumed that there are no more than
+ * ten stack frames above the current frame. This should be no problem
+ * since this function is either called indirectly from the _init() function
+ * in vgpreload_exp-drd-*.so or from the thread wrapper for a newly created
+ * thread. See also drd_pthread_intercepts.c.
*/
-void DRD_(clientreq_init)(void)
+static Addr DRD_(highest_used_stack_address)(const ThreadId vg_tid)
{
- VG_(needs_client_requests)(DRD_(handle_client_request));
+ UInt nframes;
+ const UInt n_ips = 10;
+ UInt i;
+ Addr ips[n_ips], sps[n_ips];
+ Addr husa;
+
+ nframes = VG_(get_StackTrace)(vg_tid, ips, n_ips, sps, 0, 0);
+ tl_assert(1 <= nframes && nframes <= n_ips);
+
+ /* A hack to work around VG_(get_StackTrace)()'s behavior that sometimes */
+ /* the topmost stackframes it returns are bogus (this occurs sometimes */
+ /* at least on amd64, ppc32 and ppc64). */
+
+ husa = sps[0];
+
+ tl_assert(VG_(thread_get_stack_max)(vg_tid)
+ - VG_(thread_get_stack_size)(vg_tid) <= husa
+ && husa < VG_(thread_get_stack_max)(vg_tid));
+
+ for (i = 1; i < nframes; i++)
+ {
+ if (sps[i] == 0)
+ break;
+ if (husa < sps[i] && sps[i] < VG_(thread_get_stack_max)(vg_tid))
+ husa = sps[i];
+ }
+
+ tl_assert(VG_(thread_get_stack_max)(vg_tid)
+ - VG_(thread_get_stack_size)(vg_tid) <= husa
+ && husa < VG_(thread_get_stack_max)(vg_tid));
+
+ return husa;
}
Modified: branches/DRDDEV/drd/drd_clientreq.h
===================================================================
--- branches/DRDDEV/drd/drd_clientreq.h 2009-05-02 14:20:09 UTC (rev 9718)
+++ branches/DRDDEV/drd/drd_clientreq.h 2009-05-02 14:52:31 UTC (rev 9719)
@@ -22,6 +22,7 @@
The GNU General Public License is contained in the file COPYING.
*/
+
/*
* This header file contains the tool-internal interface for the code that
* processes client requests.
Modified: branches/DRDDEV/drd/drd_error.c
===================================================================
--- branches/DRDDEV/drd/drd_error.c 2009-05-02 14:20:09 UTC (rev 9718)
+++ branches/DRDDEV/drd/drd_error.c 2009-05-02 14:52:31 UTC (rev 9719)
@@ -413,7 +413,7 @@
}
}
-void drd_register_error_handlers(void)
+void DRD_(register_error_handlers)(void)
{
// Tool error reporting.
VG_(needs_tool_errors)(drd_tool_error_eq,
Modified: branches/DRDDEV/drd/drd_error.h
===================================================================
--- branches/DRDDEV/drd/drd_error.h 2009-05-02 14:20:09 UTC (rev 9718)
+++ branches/DRDDEV/drd/drd_error.h 2009-05-02 14:52:31 UTC (rev 9719)
@@ -148,7 +148,7 @@
void set_show_conflicting_segments(const Bool scs);
-void drd_register_error_handlers(void);
+void DRD_(register_error_handlers)(void);
#endif /* __DRD_ERROR_H */
Modified: branches/DRDDEV/drd/drd_load_store.c
===================================================================
--- branches/DRDDEV/drd/drd_load_store.c 2009-05-02 14:20:09 UTC (rev 9718)
+++ branches/DRDDEV/drd/drd_load_store.c 2009-05-02 14:52:31 UTC (rev 9719)
@@ -24,6 +24,7 @@
#include "drd_bitmap.h"
#include "drd_thread_bitmap.h"
+#include "drd_vc.h" /* DRD_(vc_snprint)() */
/* Include several source files here in order to allow the compiler to */
/* do more inlining. */
@@ -67,13 +68,13 @@
s_drd_check_stack_accesses = c;
}
-void drd_trace_mem_access(const Addr addr, const SizeT size,
+void DRD_(trace_mem_access)(const Addr addr, const SizeT size,
const BmAccessTypeT access_type)
{
- if (drd_is_any_traced(addr, addr + size))
+ if (DRD_(is_any_traced)(addr, addr + size))
{
char vc[80];
- vc_snprint(vc, sizeof(vc), thread_get_vc(thread_get_running_tid()));
+ DRD_(vc_snprint)(vc, sizeof(vc), thread_get_vc(thread_get_running_tid()));
VG_(message)(Vg_UserMsg,
"%s 0x%lx size %ld (vg %d / drd %d / vc %s)",
access_type == eLoad
@@ -99,12 +100,12 @@
static VG_REGPARM(2) void drd_trace_mem_load(const Addr addr, const SizeT size)
{
- return drd_trace_mem_access(addr, size, eLoad);
+ return DRD_(trace_mem_access)(addr, size, eLoad);
}
static VG_REGPARM(2) void drd_trace_mem_store(const Addr addr,const SizeT size)
{
- return drd_trace_mem_access(addr, size, eStore);
+ return DRD_(trace_mem_access)(addr, size, eStore);
}
static void drd_report_race(const Addr addr, const SizeT size,
@@ -134,7 +135,7 @@
if (running_thread_is_recording()
&& (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
&& bm_access_load_triggers_conflict(addr, addr + size)
- && ! drd_is_suppressed(addr, addr + size))
+ && ! DRD_(is_suppressed)(addr, addr + size))
{
drd_report_race(addr, size, eLoad);
}
@@ -145,7 +146,7 @@
if (running_thread_is_recording()
&& (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
&& bm_access_load_1_triggers_conflict(addr)
- && ! drd_is_suppressed(addr, addr + 1))
+ && ! DRD_(is_suppressed)(addr, addr + 1))
{
drd_report_race(addr, 1, eLoad);
}
@@ -156,7 +157,7 @@
if (running_thread_is_recording()
&& (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
&& bm_access_load_2_triggers_conflict(addr)
- && ! drd_is_suppressed(addr, addr + 2))
+ && ! DRD_(is_suppressed)(addr, addr + 2))
{
drd_report_race(addr, 2, eLoad);
}
@@ -167,7 +168,7 @@
if (running_thread_is_recording()
&& (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
&& bm_access_load_4_triggers_conflict(addr)
- && ! drd_is_suppressed(addr, addr + 4))
+ && ! DRD_(is_suppressed)(addr, addr + 4))
{
drd_report_race(addr, 4, eLoad);
}
@@ -178,7 +179,7 @@
if (running_thread_is_recording()
&& (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
&& bm_access_load_8_triggers_conflict(addr)
- && ! drd_is_suppressed(addr, addr + 8))
+ && ! DRD_(is_suppressed)(addr, addr + 8))
{
drd_report_race(addr, 8, eLoad);
}
@@ -195,7 +196,7 @@
if (running_thread_is_recording()
&& (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
&& bm_access_store_triggers_conflict(addr, addr + size)
- && ! drd_is_suppressed(addr, addr + size))
+ && ! DRD_(is_suppressed)(addr, addr + size))
{
drd_report_race(addr, size, eStore);
}
@@ -206,7 +207,7 @@
if (running_thread_is_recording()
&& (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
&& bm_access_store_1_triggers_conflict(addr)
- && ! drd_is_suppressed(addr, addr + 1))
+ && ! DRD_(is_suppressed)(addr, addr + 1))
{
drd_report_race(addr, 1, eStore);
}
@@ -217,7 +218,7 @@
if (running_thread_is_recording()
&& (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
&& bm_access_store_2_triggers_conflict(addr)
- && ! drd_is_suppressed(addr, addr + 2))
+ && ! DRD_(is_suppressed)(addr, addr + 2))
{
drd_report_race(addr, 2, eStore);
}
@@ -228,7 +229,7 @@
if (running_thread_is_recording()
&& (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
&& bm_access_store_4_triggers_conflict(addr)
- && ! drd_is_suppressed(addr, addr + 4))
+ && ! DRD_(is_suppressed)(addr, addr + 4))
{
drd_report_race(addr, 4, eStore);
}
@@ -239,7 +240,7 @@
if (running_thread_is_recording()
&& (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
&& bm_access_store_8_triggers_conflict(addr)
- && ! drd_is_suppressed(addr, addr + 8))
+ && ! DRD_(is_suppressed)(addr, addr + 8))
{
drd_report_race(addr, 8, eStore);
}
@@ -285,7 +286,7 @@
IRExpr** argv;
IRDirty* di;
- if (UNLIKELY(drd_any_address_is_traced()))
+ if (UNLIKELY(DRD_(any_address_is_traced)()))
{
addStmtToIRSB(bb,
IRStmt_Dirty(
@@ -350,7 +351,7 @@
IRExpr** argv;
IRDirty* di;
- if (UNLIKELY(drd_any_address_is_traced()))
+ if (UNLIKELY(DRD_(any_address_is_traced)()))
{
addStmtToIRSB(bb,
IRStmt_Dirty(
@@ -407,7 +408,7 @@
addStmtToIRSB(bb, IRStmt_Dirty(di));
}
-IRSB* drd_instrument(VgCallbackClosure* const closure,
+IRSB* DRD_(instrument)(VgCallbackClosure* const closure,
IRSB* const bb_in,
VexGuestLayout* const layout,
VexGuestExtents* const vge,
Modified: branches/DRDDEV/drd/drd_load_store.h
===================================================================
--- branches/DRDDEV/drd/drd_load_store.h 2009-05-02 14:20:09 UTC (rev 9718)
+++ branches/DRDDEV/drd/drd_load_store.h 2009-05-02 14:52:31 UTC (rev 9719)
@@ -37,14 +37,14 @@
Bool DRD_(get_check_stack_accesses)(void);
void DRD_(set_check_stack_accesses)(const Bool c);
-IRSB* drd_instrument(VgCallbackClosure* const closure,
- IRSB* const bb_in,
- VexGuestLayout* const layout,
- VexGuestExtents* const vge,
- IRType const gWordTy,
- IRType const hWordTy);
-void drd_trace_mem_access(const Addr addr, const SizeT size,
- const BmAccessTypeT access_type);
+IRSB* DRD_(instrument)(VgCallbackClosure* const closure,
+ IRSB* const bb_in,
+ VexGuestLayout* const layout,
+ VexGuestExtents* const vge,
+ IRType const gWordTy,
+ IRType const hWordTy);
+void DRD_(trace_mem_access)(const Addr addr, const SizeT size,
+ const BmAccessTypeT access_type);
VG_REGPARM(2) void drd_trace_load(Addr addr, SizeT size);
VG_REGPARM(2) void drd_trace_store(Addr addr, SizeT size);
Modified: branches/DRDDEV/drd/drd_main.c
===================================================================
--- branches/DRDDEV/drd/drd_main.c 2009-05-02 14:20:09 UTC (rev 9718)
+++ branches/DRDDEV/drd/drd_main.c 2009-05-02 14:52:31 UTC (rev 9719)
@@ -35,7 +35,6 @@
#include "drd_semaphore.h"
#include "drd_suppression.h"
#include "drd_thread.h"
-#include "drd_vc.h"
#include "libvex_guest_offsets.h"
#include "pub_drd_bitmap.h"
#include "pub_tool_vki.h" // Must be included before pub_tool_libcproc
@@ -53,24 +52,18 @@
#include "pub_tool_tooliface.h"
-// Function declarations.
+/* Local variables. */
-static void drd_start_client_code(const ThreadId tid, const ULong bbs_done);
+static Bool DRD_(s_drd_first_race_only) = False;
+static Bool DRD_(s_print_stats) = False;
+static Bool DRD_(s_var_info) = False;
+static Bool DRD_(s_show_stack_usage) = False;
-// Local variables.
-
-static Bool s_drd_print_stats = False;
-static Bool s_drd_var_info = False;
-static Bool s_drd_first_race_only = False;
-static Bool s_show_stack_usage = False;
-
-
-//
-// Implement the needs_command_line_options for drd.
-//
-
-static Bool drd_process_cmd_line_option(Char* arg)
+/**
+ * Implement the needs_command_line_options for drd.
+ */
+static Bool DRD_(process_cmd_line_option)(Char* arg)
{
int check_stack_accesses = -1;
int exclusive_threshold_ms = -1;
@@ -91,12 +84,12 @@
Char* trace_address = 0;
VG_BOOL_CLO (arg, "--check-stack-var", check_stack_accesses)
- else VG_BOOL_CLO(arg, "--drd-stats", s_drd_print_stats)
- else VG_BOOL_CLO(arg, "--first-race-only", s_drd_first_race_only)
+ else VG_BOOL_CLO(arg, "--drd-stats", DRD_(s_print_stats))
+ else VG_BOOL_CLO(arg, "--first-race-only", DRD_(s_drd_first_race_only))
else VG_BOOL_CLO(arg,"--report-signal-unlocked",s_drd_report_signal_unlocked)
else VG_BOOL_CLO(arg, "--segment-merging", segment_merging)
else VG_BOOL_CLO(arg, "--show-confl-seg", show_confl_seg)
- else VG_BOOL_CLO(arg, "--show-stack-usage", s_show_stack_usage)
+ else VG_BOOL_CLO(arg, "--show-stack-usage", DRD_(s_show_stack_usage))
else VG_BOOL_CLO(arg, "--trace-barrier", trace_barrier)
else VG_BOOL_CLO(arg, "--trace-clientobj", trace_clientobj)
else VG_BOOL_CLO(arg, "--trace-cond", trace_cond)
@@ -108,7 +101,7 @@
else VG_BOOL_CLO(arg, "--trace-segment", trace_segment)
else VG_BOOL_CLO(arg, "--trace-semaphore", trace_semaphore)
else VG_BOOL_CLO(arg, "--trace-suppr", trace_suppression)
- else VG_BOOL_CLO(arg, "--var-info", s_drd_var_info)
+ else VG_BOOL_CLO(arg, "--var-info", DRD_(s_var_info))
else VG_NUM_CLO (arg, "--exclusive-threshold", exclusive_threshold_ms)
else VG_NUM_CLO (arg, "--shared-threshold", shared_threshold_ms)
else VG_STR_CLO (arg, "--trace-addr", trace_address)
@@ -133,7 +126,7 @@
if (trace_address)
{
const Addr addr = VG_(strtoll16)(trace_address, 0);
- drd_start_tracing_address_range(addr, addr + 1);
+ DRD_(start_tracing_address_range)(addr, addr + 1);
}
if (trace_barrier != -1)
barrier_set_trace(trace_barrier);
@@ -152,16 +145,16 @@
if (trace_rwlock != -1)
rwlock_set_trace(trace_rwlock);
if (trace_segment != -1)
- sg_set_trace(trace_segment);
+ DRD_(sg_set_trace)(trace_segment);
if (trace_semaphore != -1)
semaphore_set_trace(trace_semaphore);
if (trace_suppression != -1)
- suppression_set_trace(trace_suppression);
+ DRD_(suppression_set_trace)(trace_suppression);
return True;
}
-static void drd_print_usage(void)
+static void DRD_(print_usage)(void)
{
VG_(printf)(
" --check-stack-var=yes|no Whether or not to report data races on\n"
@@ -203,7 +196,7 @@
VG_(replacement_malloc_print_usage)();
}
-static void drd_print_debug_usage(void)
+static void DRD_(print_debug_usage)(void)
{
VG_(printf)(
" --drd-stats=yes|no Print statistics about DRD activity [no].\n"
@@ -273,9 +266,9 @@
{
tl_assert(a1 < a1 + len);
- if (UNLIKELY(drd_any_address_is_traced()))
+ if (UNLIKELY(DRD_(any_address_is_traced)()))
{
- drd_trace_mem_access(a1, len, eStart);
+ DRD_(trace_mem_access)(a1, len, eStart);
}
}
@@ -301,15 +294,15 @@
tl_assert(a1 < a2);
- if (UNLIKELY(drd_any_address_is_traced()))
+ if (UNLIKELY(DRD_(any_address_is_traced)()))
{
- drd_trace_mem_access(a1, len, eEnd);
+ DRD_(trace_mem_access)(a1, len, eEnd);
}
if (! is_stack_mem || DRD_(get_check_stack_accesses)())
{
thread_stop_using_mem(a1, a2);
clientobj_stop_using_mem(a1, a2);
- drd_suppression_stop_using_mem(a1, a2);
+ DRD_(suppression_stop_using_mem)(a1, a2);
}
}
@@ -319,16 +312,17 @@
drd_stop_using_mem(a1, len, False);
}
-/** Suppress data race reports on all addresses contained in .plt and
- * .got.plt sections inside the address range [ a, a + len [. The data in
- * these sections is modified by _dl_relocate_object() every time a function
- * in a shared library is called for the first time. Since the first call
- * to a function in a shared library can happen from a multithreaded context,
- * such calls can cause conflicting accesses. See also Ulrich Drepper's
- * paper "How to Write Shared Libraries" for more information about relocation
- * (http://people.redhat.com/drepper/dsohowto.pdf).
+/**
+ * Suppress data race reports on all addresses contained in .plt and
+ * .got.plt sections inside the address range [ a, a + len [. The data in
+ * these sections is modified by _dl_relocate_object() every time a function
+ * in a shared library is called for the first time. Since the first call
+ * to a function in a shared library can happen from a multithreaded context,
+ * such calls can cause conflicting accesses. See also Ulrich Drepper's
+ * paper "How to Write Shared Libraries" for more information about relocation
+ * (http://people.redhat.com/drepper/dsohowto.pdf).
*/
-static void suppress_relocation_conflicts(const Addr a, const SizeT len)
+static void DRD_(suppress_relocation_conflicts)(const Addr a, const SizeT len)
{
const DebugInfo* di;
@@ -350,7 +344,7 @@
VG_(printf)("Suppressing .plt @ 0x%lx size %ld\n", avma, size);
#endif
tl_assert(VG_(seginfo_sect_kind)(NULL, 0, avma) == Vg_SectPLT);
- drd_start_suppression(avma, avma + size, ".plt");
+ DRD_(start_suppression)(avma, avma + size, ".plt");
}
avma = VG_(seginfo_get_gotplt_avma)(di);
@@ -362,7 +356,7 @@
VG_(printf)("Suppressing .got.plt @ 0x%lx size %ld\n", avma, size);
#endif
tl_assert(VG_(seginfo_sect_kind)(NULL, 0, avma) == Vg_SectGOTPLT);
- drd_start_suppression(avma, avma + size, ".gotplt");
+ DRD_(start_suppression)(avma, avma + size, ".gotplt");
}
}
}
@@ -376,7 +370,7 @@
drd_start_using_mem(a, len);
- suppress_relocation_conflicts(a, len);
+ DRD_(suppress_relocation_conflicts)(a, len);
}
/* Called by the core when the stack of a thread grows, to indicate that */
@@ -452,10 +446,10 @@
}
if (! DRD_(get_check_stack_accesses)())
{
- drd_start_suppression(thread_get_stack_max(drd_created)
- - thread_get_stack_size(drd_created),
- thread_get_stack_max(drd_created),
- "stack");
+ DRD_(start_suppression)(thread_get_stack_max(drd_created)
+ - thread_get_stack_size(drd_created),
+ thread_get_stack_max(drd_created),
+ "stack");
}
}
@@ -477,7 +471,7 @@
? ""
: " (which is a detached thread)");
}
- if (s_show_stack_usage)
+ if (DRD_(s_show_stack_usage))
{
const SizeT stack_size = thread_get_stack_size(drd_tid);
const SizeT used_stack
@@ -507,8 +501,7 @@
// Implementation of the tool interface.
//
-static
-void drd_post_clo_init(void)
+static void DRD_(post_clo_init)(void)
{
# if defined(VGP_x86_linux) || defined(VGP_amd64_linux) \
|| defined(VGP_ppc32_linux) || defined(VGP_ppc64_linux)
@@ -517,7 +510,7 @@
VG_(printf)("\nWARNING: DRD has only been tested on Linux.\n\n");
# endif
- if (s_drd_var_info)
+ if (DRD_(s_var_info))
{
VG_(needs_var_info)();
}
@@ -529,11 +522,10 @@
thread_set_vg_running_tid(tid);
}
-static
-void drd_fini(Int exitcode)
+static void DRD_(fini)(Int exitcode)
{
// thread_print_all();
- if (VG_(clo_verbosity) > 1 || s_drd_print_stats)
+ if (VG_(clo_verbosity) > 1 || DRD_(s_print_stats))
{
ULong update_conflict_set_count;
ULong dsnsc;
@@ -558,8 +550,8 @@
VG_(message)(Vg_UserMsg,
" segments: created %lld segments, max %lld alive,"
" %lld discard points,",
- sg_get_created_segments_count(),
- sg_get_max_alive_segments_count(),
+ DRD_(sg_get_segments_created_count)(),
+ DRD_(sg_get_max_segments_alive_count)(),
thread_get_discard_ordered_segments_count());
VG_(message)(Vg_UserMsg,
" %lld merges.",
@@ -601,17 +593,17 @@
" by Bart Van Assche.");
VG_(details_bug_reports_to) (VG_BUGS_TO);
- VG_(basic_tool_funcs) (drd_post_clo_init,
- drd_instrument,
- drd_fini);
+ VG_(basic_tool_funcs) (DRD_(post_clo_init),
+ DRD_(instrument),
+ DRD_(fini));
// Command line stuff.
- VG_(needs_command_line_options)(drd_process_cmd_line_option,
- drd_print_usage,
- drd_print_debug_usage);
+ VG_(needs_command_line_options)(DRD_(process_cmd_line_option),
+ DRD_(print_usage),
+ DRD_(print_debug_usage));
// Error handling.
- drd_register_error_handlers();
+ DRD_(register_error_handlers)();
// Core event tracking.
VG_(track_pre_mem_read) (drd_pre_mem_read);
@@ -637,7 +629,7 @@
DRD_(clientreq_init)();
- drd_suppression_init();
+ DRD_(suppression_init)();
clientobj_init();
}
Modified: branches/DRDDEV/drd/drd_mutex.c
===================================================================
--- branches/DRDDEV/drd/drd_mutex.c 2009-05-02 14:20:09 UTC (rev 9718)
+++ branches/DRDDEV/drd/drd_mutex.c 2009-05-02 14:52:31 UTC (rev 9719)
@@ -107,7 +107,7 @@
&MEI);
}
- sg_put(p->last_locked_segment);
+ DRD_(sg_put)(p->last_locked_segment);
p->last_locked_segment = 0;
}
Modified: branches/DRDDEV/drd/drd_mutex.h
===================================================================
--- branches/DRDDEV/drd/drd_mutex.h 2009-05-02 14:20:09 UTC (rev 9718)
+++ branches/DRDDEV/drd/drd_mutex.h 2009-05-02 14:52:31 UTC (rev 9719)
@@ -29,7 +29,6 @@
#include "drd_clientreq.h" // MutexT
#include "drd_thread.h" // DrdThreadId
-#include "drd_vc.h"
#include "pub_tool_basics.h" // Addr
Modified: branches/DRDDEV/drd/drd_pthread_intercepts.c
===================================================================
--- branches/DRDDEV/drd/drd_pthread_intercepts.c 2009-05-02 14:20:09 UTC (rev 9718)
+++ branches/DRDDEV/drd/drd_pthread_intercepts.c 2009-05-02 14:52:31 UTC (rev 9719)
@@ -40,9 +40,9 @@
------------------------------------------------------------------ */
/*
- Define _GNU_SOURCE to make sure that pthread_spinlock_t is available when
- compiling with older glibc versions (2.3 or before).
-*/
+ * Define _GNU_SOURCE to make sure that pthread_spinlock_t is available when
+ * compiling with older glibc versions (2.3 or before).
+ */
#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif
@@ -73,7 +73,8 @@
void* (*start)(void*);
void* arg;
int detachstate;
-} VgPosixThreadArgs;
+ int wrapper_started;
+} DrdPosixThreadArgs;
/* Local function declarations. */
@@ -173,21 +174,16 @@
static void* DRD_(thread_wrapper)(void* arg)
{
int res;
- VgPosixThreadArgs* arg_ptr;
- VgPosixThreadArgs arg_copy;
+ DrdPosixThreadArgs* arg_ptr;
+ DrdPosixThreadArgs arg_copy;
VALGRIND_DO_CLIENT_REQUEST(res, 0, VG_USERREQ__DRD_SUPPRESS_CURRENT_STACK,
0, 0, 0, 0, 0);
- arg_ptr = (VgPosixThreadArgs*)arg;
+ arg_ptr = (DrdPosixThreadArgs*)arg;
arg_copy = *arg_ptr;
+ arg_ptr->wrapper_started = 1;
- /*
- * Free the memory 'arg_ptr' points at now such that it does not get
- * leaked when the function called below throws a C++ exception.
- */
- free(arg_ptr);
-
VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__SET_PTHREADID,
pthread_self(), 0, 0, 0, 0);
@@ -276,42 +272,52 @@
int res;
int ret;
OrigFn fn;
- VgPosixThreadArgs* vgargs;
+ DrdPosixThreadArgs thread_args;
VALGRIND_GET_ORIG_FN(fn);
- vgargs = malloc(sizeof *vgargs);
- assert(vgargs);
- vgargs->start = start;
- vgargs->arg = arg;
+ DRD_IGNORE_VAR(thread_args.wrapper_started);
+ thread_args.start = start;
+ thread_args.arg = arg;
+ thread_args.wrapper_started = 0;
/*
* Find out whether the thread will be started as a joinable thread
* or as a detached thread. If no thread attributes have been specified,
* the new thread will be started as a joinable thread.
*/
- vgargs->detachstate = PTHREAD_CREATE_JOINABLE;
+ thread_args.detachstate = PTHREAD_CREATE_JOINABLE;
if (attr)
{
- if (pthread_attr_getdetachstate(attr, &vgargs->detachstate) != 0)
+ if (pthread_attr_getdetachstate(attr, &thread_args.detachstate) != 0)
{
assert(0);
}
}
- assert(vgargs->detachstate == PTHREAD_CREATE_JOINABLE
- || vgargs->detachstate == PTHREAD_CREATE_DETACHED);
+ assert(thread_args.detachstate == PTHREAD_CREATE_JOINABLE
+ || thread_args.detachstate == PTHREAD_CREATE_DETACHED);
/* Suppress NPTL-specific conflicts between creator and created thread. */
VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__DRD_STOP_RECORDING,
0, 0, 0, 0, 0);
- CALL_FN_W_WWWW(ret, fn, thread, attr, DRD_(thread_wrapper), vgargs);
+ CALL_FN_W_WWWW(ret, fn, thread, attr, DRD_(thread_wrapper), &thread_args);
VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__DRD_START_RECORDING,
0, 0, 0, 0, 0);
- /* Free the memory 'vgargs' points at if pthread_create() failed. */
- if (ret != 0)
- free(vgargs);
+ if (ret == 0)
+ {
+ /*
+ * Wait until the thread wrapper started.
+ * @todo Find out why some regression tests fail if thread arguments are
+ * passed via dynamically allocated memory and if the loop below is
+ * removed.
+ */
+ while (! thread_args.wrapper_started)
+ {
+ sched_yield();
+ }
+ }
return ret;
}
Modified: branches/DRDDEV/drd/drd_rwlock.c
===================================================================
--- branches/DRDDEV/drd/drd_rwlock.c 2009-05-02 14:20:09 UTC (rev 9718)
+++ branches/DRDDEV/drd/drd_rwlock.c 2009-05-02 14:52:31 UTC (rev 9719)
@@ -215,7 +215,7 @@
VG_(OSetGen_ResetIter)(p->thread_info);
for ( ; (q = VG_(OSetGen_Next)(p->thread_info)) != 0; )
{
- sg_put(q->last_unlock_segment);
+ DRD_(sg_put)(q->last_unlock_segment);
}
VG_(OSetGen_Destroy)(p->thread_info);
}
Modified: branches/DRDDEV/drd/drd_rwlock.h
===================================================================
--- branches/DRDDEV/drd/drd_rwlock.h 2009-05-02 14:20:09 UTC (rev 9718)
+++ branches/DRDDEV/drd/drd_rwlock.h 2009-05-02 14:52:31 UTC (rev 9719)
@@ -32,7 +32,6 @@
#include "drd_clientobj.h" // struct rwlock_info
#include "drd_thread.h" // DrdThreadId
-#include "drd_vc.h"
#include "pub_tool_basics.h" // Addr
Modified: branches/DRDDEV/drd/drd_segment.c
===================================================================
--- branches/DRDDEV/drd/drd_segment.c 2009-05-02 14:20:09 UTC (rev 9718)
+++ branches/DRDDEV/drd/drd_segment.c 2009-05-02 14:52:31 UTC (rev 9719)
@@ -36,24 +36,25 @@
#include "pub_tool_threadstate.h" // VG_INVALID_THREADID
-// Local variables.
+/* Local variables. */
-static ULong s_created_segments_count;
-static ULong s_alive_segments_count;
-static ULong s_max_alive_segments_count;
-static ULong s_segment_merge_count;
-static Bool drd_trace_segment = False;
+static ULong DRD_(s_segments_created_count);
+static ULong DRD_(s_segments_alive_count);
+static ULong DRD_(s_max_segments_alive_count);
+static ULong DRD_(s_segment_merge_count);
+static Bool DRD_(s_trace_segment) = False;
-// Function definitions.
+/* Function definitions. */
-/** Initialize the memory pointed at by sg.
+/**
+ * Initialize the memory 'sg' points at.
* @note The creator and created thread ID's may be equal.
*/
static
-void sg_init(Segment* const sg,
- DrdThreadId const creator,
- DrdThreadId const created)
+void DRD_(sg_init)(Segment* const sg,
+ DrdThreadId const creator,
+ DrdThreadId const created)
{
Segment* creator_sg;
ThreadId vg_created = DrdThreadIdToVgThreadId(created);
@@ -74,13 +75,13 @@
sg->stacktrace = 0;
if (creator_sg)
- vc_copy(&sg->vc, &creator_sg->vc);
+ DRD_(vc_copy)(&sg->vc, &creator_sg->vc);
else
- vc_init(&sg->vc, 0, 0);
- vc_increment(&sg->vc, created);
+ DRD_(vc_init)(&sg->vc, 0, 0);
+ DRD_(vc_increment)(&sg->vc, created);
sg->bm = bm_new();
- if (drd_trace_segment)
+ if (DRD_(s_trace_segment))
{
char msg[256];
VG_(snprintf)(msg, sizeof(msg),
@@ -89,64 +90,62 @@
? DrdThreadIdToVgThreadId(created)
: DRD_INVALID_THREADID,
created);
- vc_snprint(msg + VG_(strlen)(msg), sizeof(msg) - VG_(strlen)(msg),
+ DRD_(vc_snprint)(msg + VG_(strlen)(msg), sizeof(msg) - VG_(strlen)(msg),
&sg->vc);
VG_(message)(Vg_UserMsg, "%s", msg);
}
}
/** Deallocate the memory that was allocated by sg_init(). */
-static
-void sg_cleanup(Segment* const sg)
+static void DRD_(sg_cleanup)(Segment* const sg)
{
tl_assert(sg);
tl_assert(sg->refcnt == 0);
- vc_cleanup(&sg->vc);
+ DRD_(vc_cleanup)(&sg->vc);
bm_delete(sg->bm);
sg->bm = 0;
}
/** Allocate and initialize a new segment. */
-Segment* sg_new(ThreadId const creator, ThreadId const created)
+Segment* DRD_(sg_new)(ThreadId const creator, ThreadId const created)
{
Segment* sg;
- s_created_segments_count++;
- s_alive_segments_count++;
- if (s_max_alive_segments_count < s_alive_segments_count)
- s_max_alive_segments_count = s_alive_segments_count;
+ DRD_(s_segments_created_count)++;
+ DRD_(s_segments_alive_count)++;
+ if (DRD_(s_max_segments_alive_count) < DRD_(s_segments_alive_count))
+ DRD_(s_max_segments_alive_count) = DRD_(s_segments_alive_count);
sg = VG_(malloc)("drd.segment.sn.1", sizeof(*sg));
tl_assert(sg);
- sg_init(sg, creator, created);
+ DRD_(sg_init)(sg, creator, created);
return sg;
}
-static
-void sg_delete(Segment* const sg)
+static void DRD_(sg_delete)(Segment* const sg)
{
#if 1
- if (sg_get_trace())
+ if (DRD_(sg_get_trace)())
{
char msg[256];
VG_(snprintf)(msg, sizeof(msg),
"Discarding the segment with vector clock ");
- vc_snprint(msg + VG_(strlen)(msg), sizeof(msg) - VG_(strlen)(msg),
+ DRD_(vc_snprint)(msg + VG_(strlen)(msg), sizeof(msg) - VG_(strlen)(msg),
&sg->vc);
VG_(message)(Vg_UserMsg, "%s", msg);
}
#endif
- s_alive_segments_count--;
+ DRD_(s_segments_alive_count)--;
tl_assert(sg);
- sg_cleanup(sg);
+ DRD_(sg_cleanup)(sg);
VG_(free)(sg);
}
/** Query the reference count of the specified segment. */
-int sg_get_refcnt(const Segment* const sg)
+int DRD_(sg_get_refcnt)(const Segment* const sg)
{
tl_assert(sg);
@@ -154,7 +153,7 @@
}
/** Increment the reference count of the specified segment. */
-Segment* sg_get(Segment* const sg)
+Segment* DRD_(sg_get)(Segment* const sg)
{
tl_assert(sg);
@@ -162,21 +161,22 @@
return sg;
}
-/** Decrement the reference count of the specified segment and deallocate the
- * segment if the reference count became zero.
+/**
+ * Decrement the reference count of the specified segment and deallocate the
+ * segment if the reference count became zero.
*/
-void sg_put(Segment* const sg)
+void DRD_(sg_put)(Segment* const sg)
{
if (sg == 0)
return;
- if (drd_trace_segment)
+ if (DRD_(s_trace_segment))
{
char msg[256];
VG_(snprintf)(msg, sizeof(msg),
"Decrementing segment reference count %d -> %d with vc ",
sg->refcnt, sg->refcnt - 1);
- vc_snprint(msg + VG_(strlen)(msg), sizeof(msg) - VG_(strlen)(msg),
+ DRD_(vc_snprint)(msg + VG_(strlen)(msg), sizeof(msg) - VG_(strlen)(msg),
&sg->vc);
VG_(message)(Vg_UserMsg, "%s", msg);
}
@@ -185,33 +185,33 @@
if (--sg->refcnt == 0)
{
- sg_delete(sg);
+ DRD_(sg_delete)(sg);
}
}
/** Merge sg1 and sg2 into sg1. */
-void sg_merge(const Segment* const sg1, Segment* const sg2)
+void DRD_(sg_merge)(const Segment* const sg1, Segment* const sg2)
{
tl_assert(sg1);
tl_assert(sg1->refcnt == 1);
tl_assert(sg2);
tl_assert(sg2->refcnt == 1);
- if (drd_trace_segment)
+ if (DRD_(s_trace_segment))
{
char msg[256];
VG_(snprintf)(msg, sizeof(msg), "Merging segments with vector clocks ");
- vc_snprint(msg + VG_(strlen)(msg), sizeof(msg) - VG_(strlen)(msg),
+ DRD_(vc_snprint)(msg + VG_(strlen)(msg), sizeof(msg) - VG_(strlen)(msg),
&sg1->vc);
VG_(snprintf)(msg + VG_(strlen)(msg), sizeof(msg) - VG_(strlen)(msg),
" and ");
- vc_snprint(msg + VG_(strlen)(msg), sizeof(msg) - VG_(strlen)(msg),
+ DRD_(vc_snprint)(msg + VG_(strlen)(msg), sizeof(msg) - VG_(strlen)(msg),
&sg2->vc);
VG_(message)(Vg_UserMsg, "%s", msg);
}
- s_segment_merge_count++;
+ DRD_(s_segment_merge_count)++;
// Keep sg1->stacktrace.
// Keep sg1->vc.
@@ -219,42 +219,45 @@
bm_merge(sg1->bm, sg2->bm);
}
-void sg_print(const Segment* const sg)
+/** Print the vector clock and the bitmap of the specified segment. */
+void DRD_(sg_print)(const Segment* const sg)
{
tl_assert(sg);
VG_(printf)("vc: ");
- vc_print(&sg->vc);
+ DRD_(vc_print)(&sg->vc);
VG_(printf)("\n");
bm_print(sg->bm);
}
-Bool sg_get_trace(void)
+/** Query whether segment tracing has been enabled. */
+Bool DRD_(sg_get_trace)(void)
{
- return drd_trace_segment;
+ return DRD_(s_trace_segment);
}
-void sg_set_trace(Bool const trace_segment)
+/** Enable or disable segment tracing. */
+void DRD_(sg_set_trace)(Bool const trace_segment)
{
tl_assert(trace_segment == False || trace_segment == True);
- drd_trace_segment = trace_segment;
+ DRD_(s_trace_segment) = trace_segment;
}
-ULong sg_get_created_segments_count(void)
+ULong DRD_(sg_get_segments_created_count)(void)
{
- return s_created_segments_count;
+ return DRD_(s_segments_created_count);
}
-ULong sg_get_alive_segments_count(void)
+ULong DRD_(sg_get_segments_alive_count)(void)
{
- return s_alive_segments_count;
+ return DRD_(s_segments_alive_count);
}
-ULong sg_get_max_alive_segments_count(void)
+ULong DRD_(sg_get_max_segments_alive_count)(void)
{
- return s_max_alive_segments_count;
+ return DRD_(s_max_segments_alive_count);
}
ULong sg_get_segment_merge_count(void)
{
- return s_segment_merge_count;
+ return DRD_(s_segment_merge_count);
}
Modified: branches/DRDDEV/drd/drd_segment.h
===================================================================
--- branches/DRDDEV/drd/drd_segment.h 2009-05-02 14:20:09 UTC (rev 9718)
+++ branches/DRDDEV/drd/drd_segment.h 2009-05-02 14:52:31 UTC (rev 9719)
@@ -27,9 +27,11 @@
#define __SEGMENT_H
-// Segments and segment lists. A segment represents information about
-// a contiguous group of statements of a specific thread. There is a vector
-// clock associated with each segment.
+/*
+ * Segments and segment lists. A segment represents information about
+ * a contiguous group of statements of a specific thread. There is a vector
+ * clock associated with each segment.
+ */
#include "drd_vc.h"
@@ -40,26 +42,34 @@
typedef struct segment
{
+ /** Pointers to next and previous segments executed by the same thread. */
struct segment* next;
struct segment* prev;
+ /** Reference count: number of pointers that point to this segment. */
int refcnt;
+ /** Stack trace of the first instruction of the segment. */
ExeContext* stacktrace;
+ /** Vector clock associated with the segment. */
VectorClock vc;
+ /**
+ * Bitmap representing the memory accesses by the instructions associated
+ * with the segment.
+ */
struct bitmap* bm;
} Segment;
-Segment* sg_new(const ThreadId creator, const ThreadId created);
-int sg_get_refcnt(const Segment* const sg);
-Segment* sg_get(Segment* const sg);
-void sg_put(Segment* const sg);
-void sg_merge(const Segment* const sg1, Segment* const sg2);
-void sg_print(const Segment* const sg);
-Bool sg_get_trace(void);
-void sg_set_trace(const Bool trace_segment);
-ULong sg_get_created_segments_count(void);
-ULong sg_get_alive_segments_count(void);
-ULong sg_get_max_alive_segments_count(void);
+Segment* DRD_(sg_new)(const ThreadId creator, const ThreadId created);
+int DRD_(sg_get_refcnt)(const Segment* const sg);
+Segment* DRD_(sg_get)(Segment* const sg);
+void DRD_(sg_put)(Segment* const sg);
+void DRD_(sg_merge)(const Segment* const sg1, Segment* const sg2);
+void DRD_(sg_print)(const Segment* const sg);
+Bool DRD_(sg_get_trace)(void);
+void DRD_(sg_set_trace)(const Bool trace_segment);
+ULong DRD_(sg_get_segments_created_count)(void);
+ULong DRD_(sg_get_segments_alive_count)(void);
+ULong DRD_(sg_get_max_segments_alive_count)(void);
ULong sg_get_segment_merge_count(void);
Modified: branches/DRDDEV/drd/drd_semaphore.c
===================================================================
--- branches/DRDDEV/drd/drd_semaphore.c 2009-05-02 14:20:09 UTC (rev 9718)
+++ branches/DRDDEV/drd/drd_semaphore.c 2009-05-02 14:52:31 UTC (rev 9719)
@@ -120,7 +120,7 @@
&sei);
}
while ((sg = segment_pop(p)))
- sg_put(sg);
+ DRD_(sg_put)(sg);
VG_(deleteXA)(p->last_sem_post_seg);
}
@@ -176,7 +176,7 @@
// Remove all segments from the segment stack.
while ((sg = segment_pop(p)))
{
- sg_put(sg);
+ DRD_(sg_put)(sg);
}
}
else
@@ -283,7 +283,7 @@
{
thread_combine_vc2(tid, &sg->vc);
}
- sg_put(sg);
+ DRD_(sg_put)(sg);
thread_new_segment(tid);
s_semaphore_segment_creation_count++;
}
Modified: branches/DRDDEV/drd/drd_semaphore.h
===================================================================
--- branches/DRDDEV/drd/drd_semaphore.h 2009-05-02 14:20:09 UTC (rev 9718)
+++ branches/DRDDEV/drd/drd_semaphore.h 2009-05-02 14:52:31 UTC (rev 9719)
@@ -31,7 +31,6 @@
#include "drd_thread.h" // DrdThreadId
-#include "drd_vc.h"
#include "pub_tool_basics.h" // Addr
Modified: branches/DRDDEV/drd/drd_suppression.c
===================================================================
--- branches/DRDDEV/drd/drd_suppression.c 2009-05-02 14:20:09 UTC (rev 9718)
+++ branches/DRDDEV/drd/drd_suppression.c 2009-05-02 14:52:31 UTC (rev 9719)
@@ -31,31 +31,35 @@
#include "pub_tool_libcprint.h" // Vg_DebugMsg
-// Local variables.
+/* Global variables. */
-static struct bitmap* s_suppressed;
-static Bool s_trace_suppression;
-Bool g_any_address_traced = False;
+Bool DRD_(g_any_address_traced) = False;
-// Function definitions.
+/* Local variables. */
-void suppression_set_trace(const Bool trace_suppression)
+static struct bitmap* DRD_(s_suppressed);
+static Bool DRD_(s_trace_suppression);
+
+
+/* Function definitions. */
+
+void DRD_(suppression_set_trace)(const Bool trace_suppression)
{
- s_trace_suppression = trace_suppression;
+ DRD_(s_trace_suppression) = trace_suppression;
}
-void drd_suppression_init(void)
+void DRD_(suppression_init)(void)
{
- tl_assert(s_suppressed == 0);
- s_suppressed = bm_new();
- tl_assert(s_suppressed);
+ tl_assert(DRD_(s_suppressed) == 0);
+ DRD_(s_suppressed) = bm_new();
+ tl_assert(DRD_(s_suppressed));
}
-void drd_start_suppression(const Addr a1, const Addr a2,
- const char* const reason)
+void DRD_(start_suppression)(const Addr a1, const Addr a2,
+ const char* const reason)
{
- if (s_trace_suppression)
+ if (DRD_(s_trace_suppression))
{
VG_(message)(Vg_DebugMsg, "start suppression of 0x%lx sz %ld (%s)",
a1, a2 - a1, reason);
@@ -63,12 +67,12 @@
tl_assert(a1 < a2);
// tl_assert(! drd_is_any_suppressed(a1, a2));
- bm_access_range_store(s_suppressed, a1, a2);
+ bm_access_range_store(DRD_(s_suppressed), a1, a2);
}
-void drd_finish_suppression(const Addr a1, const Addr a2)
+void DRD_(finish_suppression)(const Addr a1, const Addr a2)
{
- if (s_trace_suppression)
+ if (DRD_(s_trace_suppression))
{
VG_(message)(Vg_DebugMsg, "finish suppression of 0x%lx sz %ld",
a1, a2 - a1);
@@ -76,13 +80,13 @@
}
tl_assert(a1 < a2);
- if (! drd_is_suppressed(a1, a2))
+ if (! DRD_(is_suppressed)(a1, a2))
{
VG_(message)(Vg_DebugMsg, "?? [0x%lx,0x%lx[ not suppressed ??", a1, a2);
VG_(get_and_pp_StackTrace)(VG_(get_running_tid)(), 12);
tl_assert(False);
}
- bm_clear_store(s_suppressed, a1, a2);
+ bm_clear_store(DRD_(s_suppressed), a1, a2);
}
/**
@@ -90,9 +94,9 @@
* bytes in the range a1 .. a2 - 1 inclusive. Return false in case the range
* is only partially suppressed or not suppressed at all.
*/
-Bool drd_is_suppressed(const Addr a1, const Addr a2)
+Bool DRD_(is_suppressed)(const Addr a1, const Addr a2)
{
- return bm_has(s_suppressed, a1, a2, eStore);
+ return bm_has(DRD_(s_suppressed), a1, a2, eStore);
}
/**
@@ -100,46 +104,47 @@
* of the bytes in the range a1 .. a2 - 1 inclusive. Return false in case none
* of the bytes in the specified range is suppressed.
*/
-Bool drd_is_any_suppressed(const Addr a1, const Addr a2)
+Bool DRD_(is_any_suppressed)(const Addr a1, const Addr a2)
{
- return bm_has_any_store(s_suppressed, a1, a2);
+ return bm_has_any_store(DRD_(s_suppressed), a1, a2);
}
-void drd_start_tracing_address_range(const Addr a1, const Addr a2)
+void DRD_(start_tracing_address_range)(const Addr a1, const Addr a2)
{
tl_assert(a1 < a2);
- bm_access_range_load(s_suppressed, a1, a2);
- if (! g_any_address_traced)
+ bm_access_range_load(DRD_(s_suppressed), a1, a2);
+ if (! DRD_(g_any_address_traced))
{
- g_any_address_traced = True;
+ DRD_(g_any_address_traced) = True;
}
}
-void drd_stop_tracing_address_range(const Addr a1, const Addr a2)
+void DRD_(stop_tracing_address_range)(const Addr a1, const Addr a2)
{
tl_assert(a1 < a2);
- bm_clear_load(s_suppressed, a1, a2);
- if (g_any_address_traced)
+ bm_clear_load(DRD_(s_suppressed), a1, a2);
+ if (DRD_(g_any_address_traced))
{
- g_any_address_traced = bm_has_any_load(s_suppressed, 0, ~(Addr)0);
+ DRD_(g_any_address_traced)
+ = bm_has_any_load(DRD_(s_suppressed), 0, ~(Addr)0);
}
}
-Bool drd_is_any_traced(const Addr a1, const Addr a2)
+Bool DRD_(is_any_traced)(const Addr a1, const Addr a2)
{
- return bm_has_any_load(s_suppressed, a1, a2);
+ return bm_has_any_load(DRD_(s_suppressed), a1, a2);
}
-void drd_suppression_stop_using_mem(const Addr a1, const Addr a2)
+void DRD_(suppression_stop_using_mem)(const Addr a1, const Addr a2)
{
- if (s_trace_suppression)
+ if (DRD_(s_trace_suppression))
{
Addr b;
for (b = a1; b < a2; b++)
{
- if (bm_has_1(s_suppressed, b, eStore))
+ if (bm_has_1(DRD_(s_suppressed), b, eStore))
{
VG_(message)(Vg_DebugMsg,
"stop_using_mem(0x%lx, %ld) finish suppression of 0x%lx",
@@ -149,5 +154,5 @@
}
tl_assert(a1);
tl_assert(a1 < a2);
- bm_clear(s_suppressed, a1, a2);
+ bm_clear(DRD_(s_suppressed), a1, a2);
}
Modified: branches/DRDDEV/drd/drd_suppression.h
===================================================================
--- branches/DRDDEV/drd/drd_suppression.h 2009-05-02 14:20:09 UTC (rev 9718)
+++ branches/DRDDEV/drd/drd_suppression.h 2009-05-02 14:52:31 UTC (rev 9719)
@@ -2,28 +2,29 @@
#define __PUB_CORE_DRD_H
+#include "drd_basics.h"
#include "pub_tool_basics.h"
-extern Bool g_any_address_traced;
+extern Bool DRD_(g_any_address_traced);
-void suppression_set_trace(const Bool trace_suppression);
-void drd_suppression_init(void);
-void drd_start_suppression(const Addr a1, const Addr a2,
+void DRD_(suppression_set_trace)(const Bool trace_suppression);
+void DRD_(suppression_init)(void);
+void DRD_(start_suppression)(const Addr a1, const Addr a2,
const char* const reason);
-void drd_finish_suppression(const Addr a1, const Addr a2);
-Bool drd_is_suppressed(const Addr a1, const Addr a2);
-Bool drd_is_any_suppressed(const Addr a1, const Addr a2);
-void drd_start_tracing_address_range(const Addr a1, const Addr a2);
-void drd_stop_tracing_address_range(const Addr a1, const Addr a2);
-Bool drd_is_any_traced(const Addr a1, const Addr a2);
-void drd_suppression_stop_using_mem(const Addr a1, const Addr a2);
+void DRD_(finish_suppression)(const Addr a1, const Addr a2);
+Bool DRD_(is_suppressed)(const Addr a1, const Addr a2);
+Bool DRD_(is_any_suppressed)(const Addr a1, const Addr a2);
+void DRD_(start_tracing_address_range)(const Addr a1, const Addr a2);
+void DRD_(stop_tracing_address_range)(const Addr a1, const Addr a2);
+Bool DRD_(is_any_traced)(const Addr a1, const Addr a2);
+void DRD_(suppression_stop_using_mem)(const Addr a1, const Addr a2);
-static __inline__ Bool drd_any_address_is_traced(void)
+static __inline__ Bool DRD_(any_address_is_traced)(void)
{
- return g_any_address_traced;
+ return DRD_(g_any_address_traced);
}
Modified: branches/DRDDEV/drd/drd_thread.c
===================================================================
--- branches/DRDDEV/drd/drd_thread.c 2009-05-02 14:20:09 UTC (rev 9718)
+++ branches/DRDDEV/drd/drd_thread.c 2009-05-02 14:52:31 UTC (rev 9719)
@@ -213,6 +213,14 @@
}
#endif
+/**
+ * Create the first segment for a newly started thread.
+ *
+ * This function is called from the handler installed via
+ * VG_(track_pre_thread_ll_create)(). The Valgrind core invokes this handler
+ * from the context of the creator thread, before the new thread has been
+ * created.
+ */
DrdThreadId thread_pre_create(const DrdThreadId creator,
const ThreadId vg_created)
{
@@ -225,12 +233,34 @@
tl_assert(s_threadinfo[created].first == 0);
tl_assert(s_threadinfo[created].last == 0);
- thread_append_segment(created, sg_new(creator, created));
+ thread_append_segment(created, DRD_(sg_new)(creator, created));
return created;
}
+/**
+ * Initialize s_threadinfo[] for a newly created thread. Must be called after
+ * the thread has been created and before any client instructioins are run
+ * on the newly created thread, e.g. from the handler installed via
+ * VG_(track_pre_thread_first_insn)().
+ */
+DrdThreadId thread_post_create(const ThreadId vg_created)
+{
+ const DrdThreadId created = VgThreadIdToDrdThreadId(vg_created);
+ tl_assert(0 <= (int)created && created < DRD_N_THREADS
+ && created != DRD_INVALID_THREADID);
+
+ s_threadinfo[created].stack_max = VG_(thread_get_stack_max)(vg_created);
+ s_threadinfo[created].stack_startup = s_threadinfo[created].stack_max;
+ s_threadinfo[created].stack_min = s_threadinfo[created].stack_max;
+ s_threadinfo[created].stack_min_min = s_threadinfo[created].stack_max;
+ s_threadinfo[created].stack_size = VG_(thread_get_stack_size)(vg_created);
+ tl_assert(s_threadinfo[created].stack_max != 0);
+
+ return created;
+}
+
/* Process VG_USERREQ__POST_THREAD_JOIN. This client request is invoked just */
/* after thread drd_joiner joined thread drd_joinee. */
void DRD_(thread_post_join)(DrdThreadId drd_joiner, DrdThreadId drd_joinee)
@@ -257,8 +287,8 @@
{
VG_(snprintf)(msg + VG_(strlen)(msg), msg_size - VG_(strlen)(msg),
", new vc: ");
- vc_snprint(msg + VG_(strlen)(msg), msg_size - VG_(strlen)(msg),
- thread_get_vc(drd_joiner));
+ DRD_(vc_snprint)(msg + VG_(strlen)(msg), msg_size - VG_(strlen)(msg),
+ thread_get_vc(drd_joiner));
}
VG_(message)(Vg_DebugMsg, "%s", msg);
VG_(free)(msg);
@@ -266,9 +296,9 @@
if (! DRD_(get_check_stack_accesses)())
{
- drd_finish_suppression(thread_get_stack_max(drd_joinee)
- - thread_get_stack_size(drd_joinee),
- thread_get_stack_max(drd_joinee));
+ DRD_(finish_suppression)(thread_get_stack_max(drd_joinee)
+ - thread_get_stack_size(drd_joinee),
+ thread_get_stack_max(drd_joinee));
}
thread_delete(drd_joinee);
mutex_thread_delete(drd_joinee);
@@ -277,26 +307,6 @@
barrier_thread_delete(drd_joinee);
}
-/** Allocate the first segment for a thread. Call this just after
- * pthread_create().
- */
-DrdThreadId thread_post_create(const ThreadId vg_created)
-{
- const DrdThreadId created = VgThreadIdToDrdThreadId(vg_created);
-
- tl_assert(0 <= (int)created && created < DRD_N_THREADS
- && created != DRD_INVALID_THREADID);
-
- s_threadinfo[created].stack_max = VG_(thread_get_stack_max)(vg_created);
- s_threadinfo[created].stack_startup = s_threadinfo[created].stack_max;
- s_threadinfo[created].stack_min = s_threadinfo[created].stack_max;
- s_threadinfo[created].stack_min_min = s_threadinfo[created].stack_max;
- s_threadinfo[created].stack_size = VG_(thread_get_stack_size)(vg_created);
- tl_assert(s_threadinfo[created].stack_max != 0);
-
- return created;
-}
-
/* NPTL hack: NPTL allocates the 'struct pthread' on top of the stack, */
/* and accesses this data structure from multiple threads without locking. */
/* Any conflicting accesses in the range stack_startup..stack_max will be */
@@ -355,7 +365,7 @@
sg_prev = sg->prev;
sg->prev = 0;
sg->next = 0;
- sg_put(sg);
+ DRD_(sg_put)(sg);
}
s_threadinfo[tid].vg_thread_exists = False;
s_threadinfo[tid].posix_thread_exists = False;
@@ -459,7 +469,7 @@
" segments: %llu",
s_vg_running_tid, s_drd_running_tid,
DrdThreadIdToVgThreadId(drd_tid), drd_tid,
- sg_get_alive_segments_count());
+ DRD_(sg_get_segments_alive_count)());
}
s_vg_running_tid = vg_tid;
s_drd_running_tid = drd_tid;
@@ -523,7 +533,7 @@
s_threadinfo[tid].first = sg->next;
if (sg == s_threadinfo[tid].last)
s_threadinfo[tid].last = sg->prev;
- sg_put(sg);
+ DRD_(sg_put)(sg);
//tl_assert(sane_ThreadInfo(&s_threadinfo[tid]));
}
@@ -546,8 +556,8 @@
&& tid != DRD_INVALID_THREADID);
tl_assert(s_threadinfo[tid].last);
- sg_put(*sg);
- *sg = sg_get(s_threadinfo[tid].last);
+ DRD_(sg_put)(*sg);
+ *sg = DRD_(sg_get)(s_threadinfo[tid].last);
}
/**
@@ -568,9 +578,9 @@
if (latest_sg)
{
if (first)
- vc_assign(vc, &latest_sg->vc);
+ DRD_(vc_assign)(vc, &latest_sg->vc);
else
- vc_min(vc, &latest_sg->vc);
+ DRD_(vc_min)(vc, &latest_sg->vc);
first = False;
}
}
@@ -589,9 +599,9 @@
if (latest_sg)
{
if (first)
- vc_assign(vc, &latest_sg->vc);
+ DRD_(vc_assign)(vc, &latest_sg->vc);
else
- vc_combine(vc, &latest_sg->vc);
+ DRD_(vc_combine)(vc, &latest_sg->vc);
first = False;
}
}
@@ -609,25 +619,25 @@
s_discard_ordered_segments_count++;
- vc_init(&thread_vc_min, 0, 0);
+ DRD_(vc_init)(&thread_vc_min, 0, 0);
thread_compute_minimum_vc(&thread_vc_min);
- if (sg_get_trace())
+ if (DRD_(sg_get_trace)())
{
char msg[256];
VectorClock thread_vc_max;
- vc_init(&thread_vc_max, 0, 0);
+ DRD_(vc_init)(&thread_vc_max, 0, 0);
thread_compute_maximum_vc(&thread_vc_max);
VG_(snprintf)(msg, sizeof(msg),
"Discarding ordered s...
[truncated message content] |
|
From: <sv...@va...> - 2009-05-02 14:20:15
|
Author: bart
Date: 2009-05-02 15:20:09 +0100 (Sat, 02 May 2009)
New Revision: 9718
Log:
Merged trunk revisions r9149:9153.
Added:
branches/DRDDEV/drd/drd_load_store.c
branches/DRDDEV/drd/drd_load_store.h
Removed:
branches/DRDDEV/drd/drd_track.h
Modified:
branches/DRDDEV/drd/Makefile.am
branches/DRDDEV/drd/drd_bitmap.h
branches/DRDDEV/drd/drd_clientreq.c
branches/DRDDEV/drd/drd_clientreq.h
branches/DRDDEV/drd/drd_main.c
branches/DRDDEV/drd/drd_mutex.c
branches/DRDDEV/drd/drd_mutex.h
branches/DRDDEV/drd/drd_thread.c
branches/DRDDEV/drd/drd_thread.h
branches/DRDDEV/drd/drd_thread_bitmap.h
Modified: branches/DRDDEV/drd/Makefile.am
===================================================================
--- branches/DRDDEV/drd/Makefile.am 2009-05-02 14:11:54 UTC (rev 9717)
+++ branches/DRDDEV/drd/Makefile.am 2009-05-02 14:20:09 UTC (rev 9718)
@@ -92,12 +92,13 @@
$(LIBREPLACEMALLOC_LDFLAGS_PPC64_AIX5)
-DRD_SOURCES = \
+DRD_SOURCES = \
drd_barrier.c \
drd_clientobj.c \
drd_clientreq.c \
drd_cond.c \
drd_error.c \
+ drd_load_store.c \
drd_main.c \
drd_malloc_wrappers.c \
drd_mutex.c \
@@ -111,12 +112,14 @@
noinst_HEADERS = \
drd_barrier.h \
+ drd_basics.h \
drd_bitmap.c \
drd_bitmap.h \
drd_clientobj.h \
drd_clientreq.h \
drd_cond.h \
drd_error.h \
+ drd_load_store.h \
drd_malloc_wrappers.h \
drd_mutex.h \
drd_rwlock.h \
@@ -127,7 +130,6 @@
drd_thread.c \
drd_thread.h \
drd_thread_bitmap.h \
- drd_track.h \
drd_vc.c \
drd_vc.h \
pub_drd_bitmap.h
Modified: branches/DRDDEV/drd/drd_bitmap.h
===================================================================
--- branches/DRDDEV/drd/drd_bitmap.h 2009-05-02 14:11:54 UTC (rev 9717)
+++ branches/DRDDEV/drd/drd_bitmap.h 2009-05-02 14:20:09 UTC (rev 9718)
@@ -27,6 +27,8 @@
#define __DRD_BITMAP_H
+#include "pub_drd_bitmap.h"
+#include "pub_tool_basics.h"
#include "pub_tool_oset.h"
#include "pub_tool_libcbase.h"
Modified: branches/DRDDEV/drd/drd_clientreq.c
===================================================================
--- branches/DRDDEV/drd/drd_clientreq.c 2009-05-02 14:11:54 UTC (rev 9717)
+++ branches/DRDDEV/drd/drd_clientreq.c 2009-05-02 14:20:09 UTC (rev 9718)
@@ -1,8 +1,7 @@
/*
This file is part of drd, a data race detector.
- Copyright (C) 2006-2008 Bart Van Assche
- bar...@gm...
+ Copyright (C) 2006-2009 Bart Van Assche <bar...@gm...>.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
@@ -23,14 +22,14 @@
*/
+#include "drd_barrier.h"
#include "drd_clientreq.h"
#include "drd_cond.h"
#include "drd_mutex.h"
+#include "drd_rwlock.h"
#include "drd_semaphore.h"
#include "drd_suppression.h" // drd_start_suppression()
#include "drd_thread.h"
-#include "drd_track.h"
-#include "drd_rwlock.h"
#include "pub_tool_basics.h" // Bool
#include "pub_tool_debuginfo.h" // VG_(describe_IP)()
#include "pub_tool_libcassert.h"
@@ -41,52 +40,22 @@
#include "pub_tool_tooliface.h" // VG_(needs_...)()
-static void drd_spin_init_or_unlock(const Addr spinlock)
-{
- struct mutex_info* mutex_p = mutex_get(spinlock);
- if (mutex_p)
- {
- mutex_unlock(spinlock, mutex_type_spinlock);
- }
- else
- {
- mutex_init(spinlock, mutex_type_spinlock);
- }
-}
+/* Local function declarations. */
-static void drd_pre_cond_wait(const Addr cond,
- const Addr mutex, const MutexT mutex_type)
-{
- mutex_unlock(mutex, mutex_type);
- cond_pre_wait(cond, mutex);
-}
+static
+Bool DRD_(handle_client_request)(ThreadId vg_tid, UWord* arg, UWord* ret);
+static Addr DRD_(highest_used_stack_address)(const ThreadId vg_tid);
-static void drd_post_cond_wait(const Addr cond,
- const Addr mutex,
- const Bool took_lock)
-{
- cond_post_wait(cond);
- mutex_post_lock(mutex, took_lock, True);
-}
-static void drd_pre_cond_signal(const Addr cond)
-{
- cond_pre_signal(cond);
-}
-
-static void drd_pre_cond_broadcast(const Addr cond)
-{
- cond_pre_broadcast(cond);
-}
-
-/** Walk the stack up to the highest stack frame, and return the stack pointer
- * of the highest stack frame. It is assumed that there are no more than
- * ten stack frames above the current frame. This should be no problem
- * since this function is either called indirectly from the _init() function
- * in vgpreload_exp-drd-*.so or from the thread wrapper for a newly created
- * thread. See also drd_pthread_intercepts.c.
+/**
+ * Walk the stack up to the highest stack frame, and return the stack pointer
+ * of the highest stack frame. It is assumed that there are no more than
+ * ten stack frames above the current frame. This should be no problem
+ * since this function is either called indirectly from the _init() function
+ * in vgpreload_exp-drd-*.so or from the thread wrapper for a newly created
+ * thread. See also drd_pthread_intercepts.c.
*/
-static Addr highest_used_stack_address(const ThreadId vg_tid)
+static Addr DRD_(highest_used_stack_address)(const ThreadId vg_tid)
{
UInt nframes;
const UInt n_ips = 10;
@@ -122,7 +91,12 @@
return husa;
}
-static Bool drd_handle_client_request(ThreadId vg_tid, UWord* arg, UWord* ret)
+/**
+ * DRD's handler for Valgrind client requests. The code below handles both
+ * DRD's public and tool-internal client requests.
+ */
+static
+Bool DRD_(handle_client_request)(ThreadId vg_tid, UWord* arg, UWord* ret)
{
UWord result = 0;
const DrdThreadId drd_tid = thread_get_running_tid();
@@ -150,7 +124,7 @@
case VG_USERREQ__DRD_SUPPRESS_CURRENT_STACK:
{
- const Addr topmost_sp = highest_used_stack_address(vg_tid);
+ const Addr topmost_sp = DRD_(highest_used_stack_address)(vg_tid);
#if 0
UInt nframes;
const UInt n_ips = 20;
@@ -206,23 +180,21 @@
case VG_USERREQ__POST_THREAD_JOIN:
tl_assert(arg[1]);
- drd_post_thread_join(drd_tid,
- PtThreadIdToDrdThreadId(arg[1]));
+ DRD_(thread_post_join)(drd_tid, PtThreadIdToDrdThreadId(arg[1]));
break;
case VG_USERREQ__PRE_THREAD_CANCEL:
tl_assert(arg[1]);
- drd_pre_thread_cancel(drd_tid, PtThreadIdToDrdThreadId(arg[1]));
+ thread_pre_cancel(drd_tid);
break;
case VG_USERREQ__POST_THREAD_CANCEL:
tl_assert(arg[1]);
- drd_post_thread_cancel(drd_tid, PtThreadIdToDrdThreadId(arg[1]), arg[2]);
break;
case VG_USERREQ__PRE_MUTEX_INIT:
if (thread_enter_synchr(drd_tid) == 0)
- drd_pre_mutex_init(arg[1], arg[2]);
+ mutex_init(arg[1], arg[2]);
break;
case VG_USERREQ__POST_MUTEX_INIT:
@@ -235,22 +207,22 @@
case VG_USERREQ__POST_MUTEX_DESTROY:
if (thread_leave_synchr(drd_tid) == 0)
- drd_post_mutex_destroy(arg[1], arg[2]);
+ mutex_post_destroy(arg[1]);
break;
case VG_USERREQ__PRE_MUTEX_LOCK:
if (thread_enter_synchr(drd_tid) == 0)
- drd_pre_mutex_lock(arg[1], arg[2], arg[3]);
+ mutex_pre_lock(arg[1], arg[2], arg[3]);
break;
case VG_USERREQ__POST_MUTEX_LOCK:
if (thread_leave_synchr(drd_tid) == 0)
- drd_post_mutex_lock(arg[1], arg[2]);
+ mutex_post_lock(arg[1], arg[2], False/*post_cond_wait*/);
break;
case VG_USERREQ__PRE_MUTEX_UNLOCK:
if (thread_enter_synchr(drd_tid) == 0)
- drd_pre_mutex_unlock(arg[1], arg[2]);
+ mutex_unlock(arg[1], arg[2]);
break;
case VG_USERREQ__POST_MUTEX_UNLOCK:
@@ -259,7 +231,7 @@
case VG_USERREQ__PRE_SPIN_INIT_OR_UNLOCK:
if (thread_enter_synchr(drd_tid) == 0)
- drd_spin_init_or_unlock(arg[1]);
+ DRD_(spinlock_init_or_unlock)(arg[1]);
break;
case VG_USERREQ__POST_SPIN_INIT_OR_UNLOCK:
@@ -268,7 +240,7 @@
case VG_USERREQ__PRE_COND_INIT:
if (thread_enter_synchr(drd_tid) == 0)
- drd_pre_cond_init(arg[1]);
+ cond_pre_init(arg[1]);
break;
case VG_USERREQ__POST_COND_INIT:
@@ -281,22 +253,34 @@
case VG_USERREQ__POST_COND_DESTROY:
if (thread_leave_synchr(drd_tid) == 0)
- drd_post_cond_destroy(arg[1]);
+ cond_post_destroy(arg[1]);
break;
case VG_USERREQ__PRE_COND_WAIT:
if (thread_enter_synchr(drd_tid) == 0)
- drd_pre_cond_wait(arg[1], arg[2], arg[3]);
+ {
+ const Addr cond = arg[1];
+ const Addr mutex = arg[2];
+ const MutexT mutex_type = arg[3];
+ mutex_unlock(mutex, mutex_type);
+ cond_pre_wait(cond, mutex);
+ }
break;
case VG_USERREQ__POST_COND_WAIT:
if (thread_leave_synchr(drd_tid) == 0)
- drd_post_cond_wait(arg[1], arg[2], arg[3]);
+ {
+ const Addr cond = arg[1];
+ const Addr mutex = arg[2];
+ const Bool took_lock = arg[3];
+ cond_post_wait(cond);
+ mutex_post_lock(mutex, took_lock, True);
+ }
break;
case VG_USERREQ__PRE_COND_SIGNAL:
if (thread_enter_synchr(drd_tid) == 0)
- drd_pre_cond_signal(arg[1]);
+ cond_pre_signal(arg[1]);
break;
case VG_USERREQ__POST_COND_SIGNAL:
@@ -305,7 +289,7 @@
case VG_USERREQ__PRE_COND_BROADCAST:
if (thread_enter_synchr(drd_tid) == 0)
- drd_pre_cond_broadcast(arg[1]);
+ cond_pre_broadcast(arg[1]);
break;
case VG_USERREQ__POST_COND_BROADCAST:
@@ -314,7 +298,7 @@
case VG_USERREQ__PRE_SEM_INIT:
if (thread_enter_synchr(drd_tid) == 0)
- drd_semaphore_init(arg[1], arg[2], arg[3]);
+ semaphore_init(arg[1], arg[2], arg[3]);
break;
case VG_USERREQ__POST_SEM_INIT:
@@ -327,32 +311,32 @@
case VG_USERREQ__POST_SEM_DESTROY:
if (thread_leave_synchr(drd_tid) == 0)
- drd_semaphore_destroy(arg[1]);
+ semaphore_destroy(arg[1]);
break;
case VG_USERREQ__PRE_SEM_WAIT:
if (thread_enter_synchr(drd_tid) == 0)
- drd_semaphore_pre_wait(drd_tid, arg[1]);
+ semaphore_pre_wait(arg[1]);
break;
case VG_USERREQ__POST_SEM_WAIT:
if (thread_leave_synchr(drd_tid) == 0)
- drd_semaphore_post_wait(drd_tid, arg[1], arg[2]);
+ semaphore_post_wait(drd_tid, arg[1], arg[2]);
break;
case VG_USERREQ__PRE_SEM_POST:
if (thread_enter_synchr(drd_tid) == 0)
- drd_semaphore_pre_post(drd_tid, arg[1]);
+ semaphore_pre_post(drd_tid, arg[1]);
break;
case VG_USERREQ__POST_SEM_POST:
if (thread_leave_synchr(drd_tid) == 0)
- drd_semaphore_post_post(drd_tid, arg[1], arg[2]);
+ semaphore_post_post(drd_tid, arg[1], arg[2]);
break;
case VG_USERREQ__PRE_BARRIER_INIT:
if (thread_enter_synchr(drd_tid) == 0)
- drd_barrier_init(arg[1], arg[2], arg[3], arg[4]);
+ barrier_init(arg[1], arg[2], arg[3], arg[4]);
break;
case VG_USERREQ__POST_BARRIER_INIT:
@@ -365,17 +349,17 @@
case VG_USERREQ__POST_BARRIER_DESTROY:
if (thread_leave_synchr(drd_tid) == 0)
- drd_barrier_destroy(arg[1], arg[2]);
+ barrier_destroy(arg[1], arg[2]);
break;
case VG_USERREQ__PRE_BARRIER_WAIT:
if (thread_enter_synchr(drd_tid) == 0)
- drd_barrier_pre_wait(drd_tid, arg[1], arg[2]);
+ barrier_pre_wait(drd_tid, arg[1], arg[2]);
break;
case VG_USERREQ__POST_BARRIER_WAIT:
if (thread_leave_synchr(drd_tid) == 0)
- drd_barrier_post_wait(drd_tid, arg[1], arg[2], arg[3]);
+ barrier_post_wait(drd_tid, arg[1], arg[2], arg[3]);
break;
case VG_USERREQ__PRE_RWLOCK_INIT:
@@ -426,7 +410,11 @@
return True;
}
-void drd_clientreq_init(void)
+/**
+ * Tell the Valgrind core the address of the DRD function that processes
+ * client requests. Must be called before any client code is run.
+ */
+void DRD_(clientreq_init)(void)
{
- VG_(needs_client_requests)(drd_handle_client_request);
+ VG_(needs_client_requests)(DRD_(handle_client_request));
}
Modified: branches/DRDDEV/drd/drd_clientreq.h
===================================================================
--- branches/DRDDEV/drd/drd_clientreq.h 2009-05-02 14:11:54 UTC (rev 9717)
+++ branches/DRDDEV/drd/drd_clientreq.h 2009-05-02 14:20:09 UTC (rev 9718)
@@ -22,14 +22,27 @@
The GNU General Public License is contained in the file COPYING.
*/
+/*
+ * This header file contains the tool-internal interface for the code that
+ * processes client requests.
+ */
+
#ifndef __DRD_CLIENTREQ_H
#define __DRD_CLIENTREQ_H
#include "drd.h"
+#include "drd_basics.h" /* DRD_() */
+/*
+ * While the client requests defined in the header file "drd.h" define a
+ * public interface between client programs and the DRD tool, the client
+ * requests defined below are a tool-internal interface. These last client
+ * requests must only be used by the source code in the various *_intercepts.c
+ * source files.
+ */
enum {
/* Ask drd to suppress data race reports on all currently allocated stack */
/* data of the current thread. */
@@ -194,6 +207,11 @@
};
+/*
+ * Error checking on POSIX recursive mutexes, POSIX error checking mutexes,
+ * POSIX default mutexes and POSIX spinlocks happens by the same code. The
+ * values defined below specify which of these types a mutex really is.
+ */
typedef enum
{
mutex_type_unknown = -1,
@@ -205,13 +223,19 @@
mutex_type_libio_file = 5,
} MutexT;
+/*
+ * Error checking on POSIX barriers and GOMP barriers happens by the same
+ * code. The integer values defined below specify the type of a barrier with
+ * a given client address.
+ */
typedef enum
{
pthread_barrier = 1,
gomp_barrier = 2
} BarrierT;
-void drd_clientreq_init(void);
+void DRD_(clientreq_init)(void);
+
#endif // __DRD_CLIENTREQ_H
Copied: branches/DRDDEV/drd/drd_load_store.c (from rev 9153, trunk/drd/drd_load_store.c)
===================================================================
--- branches/DRDDEV/drd/drd_load_store.c (rev 0)
+++ branches/DRDDEV/drd/drd_load_store.c 2009-05-02 14:20:09 UTC (rev 9718)
@@ -0,0 +1,547 @@
+/*
+ This file is part of drd, a data race detector.
+
+ Copyright (C) 2006-2009 Bart Van Assche <bar...@gm...>.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307, USA.
+
+ The GNU General Public License is contained in the file COPYING.
+*/
+
+
+#include "drd_bitmap.h"
+#include "drd_thread_bitmap.h"
+
+/* Include several source files here in order to allow the compiler to */
+/* do more inlining. */
+#include "drd_bitmap.c"
+#include "drd_load_store.h"
+#include "drd_segment.c"
+#include "drd_thread.c"
+#include "drd_vc.c"
+#include "libvex_guest_offsets.h"
+
+
+/* STACK_POINTER_OFFSET: VEX register offset for the stack pointer register. */
+#if defined(VGA_x86)
+#define STACK_POINTER_OFFSET OFFSET_x86_ESP
+#elif defined(VGA_amd64)
+#define STACK_POINTER_OFFSET OFFSET_amd64_RSP
+#elif defined(VGA_ppc32)
+#define STACK_POINTER_OFFSET ((OFFSET_ppc32_GPR0 + OFFSET_ppc32_GPR2) / 2)
+#elif defined(VGA_ppc64)
+#define STACK_POINTER_OFFSET ((OFFSET_ppc64_GPR0 + OFFSET_ppc64_GPR2) / 2)
+#else
+#error Unknown architecture.
+#endif
+
+
+/* Local variables. */
+
+static Bool s_drd_check_stack_accesses = False;
+
+
+/* Function definitions. */
+
+Bool DRD_(get_check_stack_accesses)()
+{
+ return s_drd_check_stack_accesses;
+}
+
+void DRD_(set_check_stack_accesses)(const Bool c)
+{
+ tl_assert(c == False || c == True);
+ s_drd_check_stack_accesses = c;
+}
+
+void drd_trace_mem_access(const Addr addr, const SizeT size,
+ const BmAccessTypeT access_type)
+{
+ if (drd_is_any_traced(addr, addr + size))
+ {
+ char vc[80];
+ vc_snprint(vc, sizeof(vc), thread_get_vc(thread_get_running_tid()));
+ VG_(message)(Vg_UserMsg,
+ "%s 0x%lx size %ld (vg %d / drd %d / vc %s)",
+ access_type == eLoad
+ ? "load "
+ : access_type == eStore
+ ? "store"
+ : access_type == eStart
+ ? "start"
+ : access_type == eEnd
+ ? "end "
+ : "????",
+ addr,
+ size,
+ VG_(get_running_tid)(),
+ thread_get_running_tid(),
+ vc);
+ VG_(get_and_pp_StackTrace)(VG_(get_running_tid)(),
+ VG_(clo_backtrace_size));
+ tl_assert(DrdThreadIdToVgThreadId(thread_get_running_tid())
+ == VG_(get_running_tid)());
+ }
+}
+
+static VG_REGPARM(2) void drd_trace_mem_load(const Addr addr, const SizeT size)
+{
+ return drd_trace_mem_access(addr, size, eLoad);
+}
+
+static VG_REGPARM(2) void drd_trace_mem_store(const Addr addr,const SizeT size)
+{
+ return drd_trace_mem_access(addr, size, eStore);
+}
+
+static void drd_report_race(const Addr addr, const SizeT size,
+ const BmAccessTypeT access_type)
+{
+ DataRaceErrInfo drei;
+
+ drei.tid = thread_get_running_tid();
+ drei.addr = addr;
+ drei.size = size;
+ drei.access_type = access_type;
+ VG_(maybe_record_error)(VG_(get_running_tid)(),
+ DataRaceErr,
+ VG_(get_IP)(VG_(get_running_tid)()),
+ "Conflicting accesses",
+ &drei);
+}
+
+VG_REGPARM(2) void drd_trace_load(Addr addr, SizeT size)
+{
+#ifdef ENABLE_DRD_CONSISTENCY_CHECKS
+ /* The assert below has been commented out because of performance reasons.*/
+ tl_assert(thread_get_running_tid()
+ == VgThreadIdToDrdThreadId(VG_(get_running_tid())));
+#endif
+
+ if (running_thread_is_recording()
+ && (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
+ && bm_access_load_triggers_conflict(addr, addr + size)
+ && ! drd_is_suppressed(addr, addr + size))
+ {
+ drd_report_race(addr, size, eLoad);
+ }
+}
+
+static VG_REGPARM(1) void drd_trace_load_1(Addr addr)
+{
+ if (running_thread_is_recording()
+ && (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
+ && bm_access_load_1_triggers_conflict(addr)
+ && ! drd_is_suppressed(addr, addr + 1))
+ {
+ drd_report_race(addr, 1, eLoad);
+ }
+}
+
+static VG_REGPARM(1) void drd_trace_load_2(Addr addr)
+{
+ if (running_thread_is_recording()
+ && (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
+ && bm_access_load_2_triggers_conflict(addr)
+ && ! drd_is_suppressed(addr, addr + 2))
+ {
+ drd_report_race(addr, 2, eLoad);
+ }
+}
+
+static VG_REGPARM(1) void drd_trace_load_4(Addr addr)
+{
+ if (running_thread_is_recording()
+ && (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
+ && bm_access_load_4_triggers_conflict(addr)
+ && ! drd_is_suppressed(addr, addr + 4))
+ {
+ drd_report_race(addr, 4, eLoad);
+ }
+}
+
+static VG_REGPARM(1) void drd_trace_load_8(Addr addr)
+{
+ if (running_thread_is_recording()
+ && (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
+ && bm_access_load_8_triggers_conflict(addr)
+ && ! drd_is_suppressed(addr, addr + 8))
+ {
+ drd_report_race(addr, 8, eLoad);
+ }
+}
+
+VG_REGPARM(2) void drd_trace_store(Addr addr, SizeT size)
+{
+#ifdef ENABLE_DRD_CONSISTENCY_CHECKS
+ /* The assert below has been commented out because of performance reasons.*/
+ tl_assert(thread_get_running_tid()
+ == VgThreadIdToDrdThreadId(VG_(get_running_tid())));
+#endif
+
+ if (running_thread_is_recording()
+ && (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
+ && bm_access_store_triggers_conflict(addr, addr + size)
+ && ! drd_is_suppressed(addr, addr + size))
+ {
+ drd_report_race(addr, size, eStore);
+ }
+}
+
+static VG_REGPARM(1) void drd_trace_store_1(Addr addr)
+{
+ if (running_thread_is_recording()
+ && (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
+ && bm_access_store_1_triggers_conflict(addr)
+ && ! drd_is_suppressed(addr, addr + 1))
+ {
+ drd_report_race(addr, 1, eStore);
+ }
+}
+
+static VG_REGPARM(1) void drd_trace_store_2(Addr addr)
+{
+ if (running_thread_is_recording()
+ && (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
+ && bm_access_store_2_triggers_conflict(addr)
+ && ! drd_is_suppressed(addr, addr + 2))
+ {
+ drd_report_race(addr, 2, eStore);
+ }
+}
+
+static VG_REGPARM(1) void drd_trace_store_4(Addr addr)
+{
+ if (running_thread_is_recording()
+ && (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
+ && bm_access_store_4_triggers_conflict(addr)
+ && ! drd_is_suppressed(addr, addr + 4))
+ {
+ drd_report_race(addr, 4, eStore);
+ }
+}
+
+static VG_REGPARM(1) void drd_trace_store_8(Addr addr)
+{
+ if (running_thread_is_recording()
+ && (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
+ && bm_access_store_8_triggers_conflict(addr)
+ && ! drd_is_suppressed(addr, addr + 8))
+ {
+ drd_report_race(addr, 8, eStore);
+ }
+}
+
+/**
+ * Return true if and only if addr_expr matches the pattern (SP) or
+ * <offset>(SP).
+ */
+static Bool is_stack_access(IRSB* const bb, IRExpr* const addr_expr)
+{
+ Bool result = False;
+
+ if (addr_expr->tag == Iex_RdTmp)
+ {
+ int i;
+ for (i = 0; i < bb->stmts_size; i++)
+ {
+ if (bb->stmts[i]
+ && bb->stmts[i]->tag == Ist_WrTmp
+ && bb->stmts[i]->Ist.WrTmp.tmp == addr_expr->Iex.RdTmp.tmp)
+ {
+ IRExpr* e = bb->stmts[i]->Ist.WrTmp.data;
+ if (e->tag == Iex_Get && e->Iex.Get.offset == STACK_POINTER_OFFSET)
+ {
+ result = True;
+ }
+
+ //ppIRExpr(e);
+ //VG_(printf)(" (%s)\n", result ? "True" : "False");
+ break;
+ }
+ }
+ }
+ return result;
+}
+
+static void instrument_load(IRSB* const bb,
+ IRExpr* const addr_expr,
+ const HWord size)
+{
+ IRExpr* size_expr;
+ IRExpr** argv;
+ IRDirty* di;
+
+ if (UNLIKELY(drd_any_address_is_traced()))
+ {
+ addStmtToIRSB(bb,
+ IRStmt_Dirty(
+ unsafeIRDirty_0_N(/*regparms*/2,
+ "drd_trace_load",
+ VG_(fnptr_to_fnentry)
+ (drd_trace_mem_load),
+ mkIRExprVec_2(addr_expr,
+ mkIRExpr_HWord(size)))));
+ }
+
+ if (! s_drd_check_stack_accesses && is_stack_access(bb, addr_expr))
+ return;
+
+ switch (size)
+ {
+ case 1:
+ argv = mkIRExprVec_1(addr_expr);
+ di = unsafeIRDirty_0_N(/*regparms*/1,
+ "drd_trace_load_1",
+ VG_(fnptr_to_fnentry)(drd_trace_load_1),
+ argv);
+ break;
+ case 2:
+ argv = mkIRExprVec_1(addr_expr);
+ di = unsafeIRDirty_0_N(/*regparms*/1,
+ "drd_trace_load_2",
+ VG_(fnptr_to_fnentry)(drd_trace_load_2),
+ argv);
+ break;
+ case 4:
+ argv = mkIRExprVec_1(addr_expr);
+ di = unsafeIRDirty_0_N(/*regparms*/1,
+ "drd_trace_load_4",
+ VG_(fnptr_to_fnentry)(drd_trace_load_4),
+ argv);
+ break;
+ case 8:
+ argv = mkIRExprVec_1(addr_expr);
+ di = unsafeIRDirty_0_N(/*regparms*/1,
+ "drd_trace_load_8",
+ VG_(fnptr_to_fnentry)(drd_trace_load_8),
+ argv);
+ break;
+ default:
+ size_expr = mkIRExpr_HWord(size);
+ argv = mkIRExprVec_2(addr_expr, size_expr);
+ di = unsafeIRDirty_0_N(/*regparms*/2,
+ "drd_trace_load",
+ VG_(fnptr_to_fnentry)(drd_trace_load),
+ argv);
+ break;
+ }
+ addStmtToIRSB(bb, IRStmt_Dirty(di));
+}
+
+static void instrument_store(IRSB* const bb,
+ IRExpr* const addr_expr,
+ const HWord size)
+{
+ IRExpr* size_expr;
+ IRExpr** argv;
+ IRDirty* di;
+
+ if (UNLIKELY(drd_any_address_is_traced()))
+ {
+ addStmtToIRSB(bb,
+ IRStmt_Dirty(
+ unsafeIRDirty_0_N(/*regparms*/2,
+ "drd_trace_store",
+ VG_(fnptr_to_fnentry)
+ (drd_trace_mem_store),
+ mkIRExprVec_2(addr_expr,
+ mkIRExpr_HWord(size)))));
+ }
+
+ if (! s_drd_check_stack_accesses && is_stack_access(bb, addr_expr))
+ return;
+
+ switch (size)
+ {
+ case 1:
+ argv = mkIRExprVec_1(addr_expr);
+ di = unsafeIRDirty_0_N(/*regparms*/1,
+ "drd_trace_store_1",
+ VG_(fnptr_to_fnentry)(drd_trace_store_1),
+ argv);
+ break;
+ case 2:
+ argv = mkIRExprVec_1(addr_expr);
+ di = unsafeIRDirty_0_N(/*regparms*/1,
+ "drd_trace_store_2",
+ VG_(fnptr_to_fnentry)(drd_trace_store_2),
+ argv);
+ break;
+ case 4:
+ argv = mkIRExprVec_1(addr_expr);
+ di = unsafeIRDirty_0_N(/*regparms*/1,
+ "drd_trace_store_4",
+ VG_(fnptr_to_fnentry)(drd_trace_store_4),
+ argv);
+ break;
+ case 8:
+ argv = mkIRExprVec_1(addr_expr);
+ di = unsafeIRDirty_0_N(/*regparms*/1,
+ "drd_trace_store_8",
+ VG_(fnptr_to_fnentry)(drd_trace_store_8),
+ argv);
+ break;
+ default:
+ size_expr = mkIRExpr_HWord(size);
+ argv = mkIRExprVec_2(addr_expr, size_expr);
+ di = unsafeIRDirty_0_N(/*regparms*/2,
+ "drd_trace_store",
+ VG_(fnptr_to_fnentry)(drd_trace_store),
+ argv);
+ break;
+ }
+ addStmtToIRSB(bb, IRStmt_Dirty(di));
+}
+
+IRSB* drd_instrument(VgCallbackClosure* const closure,
+ IRSB* const bb_in,
+ VexGuestLayout* const layout,
+ VexGuestExtents* const vge,
+ IRType const gWordTy,
+ IRType const hWordTy)
+{
+ IRDirty* di;
+ Int i;
+ IRSB* bb;
+ IRExpr** argv;
+ Bool instrument = True;
+ Bool bus_locked = False;
+
+ /* Set up BB */
+ bb = emptyIRSB();
+ bb->tyenv = deepCopyIRTypeEnv(bb_in->tyenv);
+ bb->next = deepCopyIRExpr(bb_in->next);
+ bb->jumpkind = bb_in->jumpkind;
+
+ for (i = 0; i < bb_in->stmts_used; i++)
+ {
+ IRStmt* const st = bb_in->stmts[i];
+ tl_assert(st);
+ if (st->tag == Ist_NoOp)
+ continue;
+
+ switch (st->tag)
+ {
+ /* Note: the code for not instrumenting the code in .plt */
+ /* sections is only necessary on CentOS 3.0 x86 (kernel 2.4.21 */
+ /* + glibc 2.3.2 + NPTL 0.60 + binutils 2.14.90.0.4). */
+ /* This is because on this platform dynamic library symbols are */
+ /* relocated in another way than by later binutils versions. The */
+ /* linker e.g. does not generate .got.plt sections on CentOS 3.0. */
+ case Ist_IMark:
+ instrument = VG_(seginfo_sect_kind)(NULL, 0, st->Ist.IMark.addr)
+ != Vg_SectPLT;
+ addStmtToIRSB(bb, st);
+ break;
+
+ case Ist_MBE:
+ switch (st->Ist.MBE.event)
+ {
+ case Imbe_Fence:
+ break; /* not interesting */
+ case Imbe_BusLock:
+ case Imbe_SnoopedStoreBegin:
+ tl_assert(! bus_locked);
+ bus_locked = True;
+ break;
+ case Imbe_BusUnlock:
+ case Imbe_SnoopedStoreEnd:
+ tl_assert(bus_locked);
+ bus_locked = False;
+ break;
+ default:
+ tl_assert(0);
+ }
+ addStmtToIRSB(bb, st);
+ break;
+
+ case Ist_Store:
+ if (instrument && ! bus_locked)
+ {
+ instrument_store(bb,
+ st->Ist.Store.addr,
+ sizeofIRType(typeOfIRExpr(bb->tyenv,
+ st->Ist.Store.data)));
+ }
+ addStmtToIRSB(bb, st);
+ break;
+
+ case Ist_WrTmp:
+ if (instrument)
+ {
+ const IRExpr* const data = st->Ist.WrTmp.data;
+ if (data->tag == Iex_Load)
+ {
+ instrument_load(bb,
+ data->Iex.Load.addr,
+ sizeofIRType(data->Iex.Load.ty));
+ }
+ }
+ addStmtToIRSB(bb, st);
+ break;
+
+ case Ist_Dirty:
+ if (instrument)
+ {
+ IRDirty* d = st->Ist.Dirty.details;
+ IREffect const mFx = d->mFx;
+ switch (mFx) {
+ case Ifx_None:
+ break;
+ case Ifx_Read:
+ case Ifx_Write:
+ case Ifx_Modify:
+ tl_assert(d->mAddr);
+ tl_assert(d->mSize > 0);
+ argv = mkIRExprVec_2(d->mAddr, mkIRExpr_HWord(d->mSize));
+ if (mFx == Ifx_Read || mFx == Ifx_Modify) {
+ di = unsafeIRDirty_0_N(
+ /*regparms*/2,
+ "drd_trace_load",
+ VG_(fnptr_to_fnentry)(drd_trace_load),
+ argv);
+ addStmtToIRSB(bb, IRStmt_Dirty(di));
+ }
+ if ((mFx == Ifx_Write || mFx == Ifx_Modify)
+ && ! bus_locked)
+ {
+ di = unsafeIRDirty_0_N(
+ /*regparms*/2,
+ "drd_trace_store",
+ VG_(fnptr_to_fnentry)(drd_trace_store),
+ argv);
+ addStmtToIRSB(bb, IRStmt_Dirty(di));
+ }
+ break;
+ default:
+ tl_assert(0);
+ }
+ }
+ addStmtToIRSB(bb, st);
+ break;
+
+ default:
+ addStmtToIRSB(bb, st);
+ break;
+ }
+ }
+
+ tl_assert(! bus_locked);
+
+ return bb;
+}
+
Copied: branches/DRDDEV/drd/drd_load_store.h (from rev 9153, trunk/drd/drd_load_store.h)
===================================================================
--- branches/DRDDEV/drd/drd_load_store.h (rev 0)
+++ branches/DRDDEV/drd/drd_load_store.h 2009-05-02 14:20:09 UTC (rev 9718)
@@ -0,0 +1,52 @@
+/*
+ This file is part of drd, a data race detector.
+
+ Copyright (C) 2006-2009 Bart Van Assche <bar...@gm...>.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307, USA.
+
+ The GNU General Public License is contained in the file COPYING.
+*/
+
+
+/*
+ * Functions related to instrumentation of loads and stores.
+ */
+
+
+#ifndef __DRD_LOAD_STORE_H
+#define __DRD_LOAD_STORE_H
+
+
+#include <libvex.h> /* IRSB */
+#include <pub_tool_tooliface.h> /* VgCallbackClosure */
+
+
+Bool DRD_(get_check_stack_accesses)(void);
+void DRD_(set_check_stack_accesses)(const Bool c);
+IRSB* drd_instrument(VgCallbackClosure* const closure,
+ IRSB* const bb_in,
+ VexGuestLayout* const layout,
+ VexGuestExtents* const vge,
+ IRType const gWordTy,
+ IRType const hWordTy);
+void drd_trace_mem_access(const Addr addr, const SizeT size,
+ const BmAccessTypeT access_type);
+VG_REGPARM(2) void drd_trace_load(Addr addr, SizeT size);
+VG_REGPARM(2) void drd_trace_store(Addr addr, SizeT size);
+
+
+#endif // __DRD_LOAD_STORE_H
Modified: branches/DRDDEV/drd/drd_main.c
===================================================================
--- branches/DRDDEV/drd/drd_main.c 2009-05-02 14:11:54 UTC (rev 9717)
+++ branches/DRDDEV/drd/drd_main.c 2009-05-02 14:20:09 UTC (rev 9718)
@@ -1,8 +1,7 @@
/*
This file is part of drd, a data race detector.
- Copyright (C) 2006-2008 Bart Van Assche
- bar...@gm...
+ Copyright (C) 2006-2009 Bart Van Assche <bar...@gm...>.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
@@ -24,10 +23,11 @@
#include "drd_barrier.h"
-#include "drd_clientreq.h"
#include "drd_clientobj.h"
+#include "drd_clientreq.h"
#include "drd_cond.h"
#include "drd_error.h"
+#include "drd_load_store.h"
#include "drd_malloc_wrappers.h"
#include "drd_mutex.h"
#include "drd_rwlock.h"
@@ -35,8 +35,6 @@
#include "drd_semaphore.h"
#include "drd_suppression.h"
#include "drd_thread.h"
-#include "drd_thread_bitmap.h"
-#include "drd_track.h"
#include "drd_vc.h"
#include "libvex_guest_offsets.h"
#include "pub_drd_bitmap.h"
@@ -55,15 +53,6 @@
#include "pub_tool_tooliface.h"
-/* Include several source files here in order to allow the compiler to */
-/* do more inlining. */
-#include "drd_bitmap.c"
-#include "drd_segment.c"
-#include "drd_thread.c"
-#include "drd_vc.c"
-
-
-
// Function declarations.
static void drd_start_client_code(const ThreadId tid, const ULong bbs_done);
@@ -71,9 +60,7 @@
// Local variables.
-static Bool s_drd_check_stack_accesses = False;
static Bool s_drd_print_stats = False;
-static Bool s_drd_trace_fork_join = False;
static Bool s_drd_var_info = False;
static Bool s_drd_first_race_only = False;
static Bool s_show_stack_usage = False;
@@ -85,6 +72,7 @@
static Bool drd_process_cmd_line_option(Char* arg)
{
+ int check_stack_accesses = -1;
int exclusive_threshold_ms = -1;
int segment_merging = -1;
int shared_threshold_ms = -1;
@@ -93,6 +81,7 @@
int trace_clientobj = -1;
int trace_cond = -1;
int trace_csw = -1;
+ int trace_fork_join = -1;
int trace_conflict_set = -1;
int trace_mutex = -1;
int trace_rwlock = -1;
@@ -101,7 +90,7 @@
int trace_suppression = -1;
Char* trace_address = 0;
- VG_BOOL_CLO (arg, "--check-stack-var", s_drd_check_stack_accesses)
+ VG_BOOL_CLO (arg, "--check-stack-var", check_stack_accesses)
else VG_BOOL_CLO(arg, "--drd-stats", s_drd_print_stats)
else VG_BOOL_CLO(arg, "--first-race-only", s_drd_first_race_only)
else VG_BOOL_CLO(arg,"--report-signal-unlocked",s_drd_report_signal_unlocked)
@@ -113,7 +102,7 @@
else VG_BOOL_CLO(arg, "--trace-cond", trace_cond)
else VG_BOOL_CLO(arg, "--trace-conflict-set", trace_conflict_set)
else VG_BOOL_CLO(arg, "--trace-csw", trace_csw)
- else VG_BOOL_CLO(arg, "--trace-fork-join", s_drd_trace_fork_join)
+ else VG_BOOL_CLO(arg, "--trace-fork-join", trace_fork_join)
else VG_BOOL_CLO(arg, "--trace-mutex", trace_mutex)
else VG_BOOL_CLO(arg, "--trace-rwlock", trace_rwlock)
else VG_BOOL_CLO(arg, "--trace-segment", trace_segment)
@@ -126,6 +115,8 @@
else
return VG_(replacement_malloc_process_cmd_line_option)(arg);
+ if (check_stack_accesses != -1)
+ DRD_(set_check_stack_accesses)(check_stack_accesses);
if (exclusive_threshold_ms != -1)
{
mutex_set_lock_threshold(exclusive_threshold_ms);
@@ -152,6 +143,8 @@
cond_set_trace(trace_cond);
if (trace_csw != -1)
thread_trace_context_switches(trace_csw);
+ if (trace_fork_join != -1)
+ DRD_(thread_set_trace_fork_join)(trace_fork_join);
if (trace_conflict_set != -1)
thread_trace_conflict_set(trace_conflict_set);
if (trace_mutex != -1)
@@ -228,190 +221,6 @@
// Implements the thread-related core callbacks.
//
-static void drd_trace_mem_access(const Addr addr, const SizeT size,
- const BmAccessTypeT access_type)
-{
- if (drd_is_any_traced(addr, addr + size))
- {
- char vc[80];
- vc_snprint(vc, sizeof(vc), thread_get_vc(thread_get_running_tid()));
- VG_(message)(Vg_UserMsg,
- "%s 0x%lx size %ld (vg %d / drd %d / vc %s)",
- access_type == eLoad
- ? "load "
- : access_type == eStore
- ? "store"
- : access_type == eStart
- ? "start"
- : access_type == eEnd
- ? "end "
- : "????",
- addr,
- size,
- VG_(get_running_tid)(),
- thread_get_running_tid(),
- vc);
- VG_(get_and_pp_StackTrace)(VG_(get_running_tid)(),
- VG_(clo_backtrace_size));
- tl_assert(DrdThreadIdToVgThreadId(thread_get_running_tid())
- == VG_(get_running_tid)());
- }
-}
-
-static VG_REGPARM(2) void drd_trace_mem_load(const Addr addr, const SizeT size)
-{
- return drd_trace_mem_access(addr, size, eLoad);
-}
-
-static VG_REGPARM(2) void drd_trace_mem_store(const Addr addr,const SizeT size)
-{
- return drd_trace_mem_access(addr, size, eStore);
-}
-
-static void drd_report_race(const Addr addr, const SizeT size,
- const BmAccessTypeT access_type)
-{
- DataRaceErrInfo drei;
-
- drei.tid = thread_get_running_tid();
- drei.addr = addr;
- drei.size = size;
- drei.access_type = access_type;
- VG_(maybe_record_error)(VG_(get_running_tid)(),
- DataRaceErr,
- VG_(get_IP)(VG_(get_running_tid)()),
- "Conflicting accesses",
- &drei);
-
- if (s_drd_first_race_only)
- {
- drd_start_suppression(addr, addr + size, "no repetitive race reports");
- }
-}
-
-static VG_REGPARM(2) void drd_trace_load(Addr addr, SizeT size)
-{
-#ifdef ENABLE_DRD_CONSISTENCY_CHECKS
- /* The assert below has been commented out because of performance reasons.*/
- tl_assert(thread_get_running_tid()
- == VgThreadIdToDrdThreadId(VG_(get_running_tid())));
-#endif
-
- if (running_thread_is_recording()
- && (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
- && bm_access_load_triggers_conflict(addr, addr + size)
- && ! drd_is_suppressed(addr, addr + size))
- {
- drd_report_race(addr, size, eLoad);
- }
-}
-
-static VG_REGPARM(1) void drd_trace_load_1(Addr addr)
-{
- if (running_thread_is_recording()
- && (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
- && bm_access_load_1_triggers_conflict(addr)
- && ! drd_is_suppressed(addr, addr + 1))
- {
- drd_report_race(addr, 1, eLoad);
- }
-}
-
-static VG_REGPARM(1) void drd_trace_load_2(Addr addr)
-{
- if (running_thread_is_recording()
- && (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
- && bm_access_load_2_triggers_conflict(addr)
- && ! drd_is_suppressed(addr, addr + 2))
- {
- drd_report_race(addr, 2, eLoad);
- }
-}
-
-static VG_REGPARM(1) void drd_trace_load_4(Addr addr)
-{
- if (running_thread_is_recording()
- && (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
- && bm_access_load_4_triggers_conflict(addr)
- && ! drd_is_suppressed(addr, addr + 4))
- {
- drd_report_race(addr, 4, eLoad);
- }
-}
-
-static VG_REGPARM(1) void drd_trace_load_8(Addr addr)
-{
- if (running_thread_is_recording()
- && (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
- && bm_access_load_8_triggers_conflict(addr)
- && ! drd_is_suppressed(addr, addr + 8))
- {
- drd_report_race(addr, 8, eLoad);
- }
-}
-
-static
-VG_REGPARM(2) void drd_trace_store(Addr addr, SizeT size)
-{
-#ifdef ENABLE_DRD_CONSISTENCY_CHECKS
- /* The assert below has been commented out because of performance reasons.*/
- tl_assert(thread_get_running_tid()
- == VgThreadIdToDrdThreadId(VG_(get_running_tid())));
-#endif
-
- if (running_thread_is_recording()
- && (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
- && bm_access_store_triggers_conflict(addr, addr + size)
- && ! drd_is_suppressed(addr, addr + size))
- {
- drd_report_race(addr, size, eStore);
- }
-}
-
-static VG_REGPARM(1) void drd_trace_store_1(Addr addr)
-{
- if (running_thread_is_recording()
- && (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
- && bm_access_store_1_triggers_conflict(addr)
- && ! drd_is_suppressed(addr, addr + 1))
- {
- drd_report_race(addr, 1, eStore);
- }
-}
-
-static VG_REGPARM(1) void drd_trace_store_2(Addr addr)
-{
- if (running_thread_is_recording()
- && (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
- && bm_access_store_2_triggers_conflict(addr)
- && ! drd_is_suppressed(addr, addr + 2))
- {
- drd_report_race(addr, 2, eStore);
- }
-}
-
-static VG_REGPARM(1) void drd_trace_store_4(Addr addr)
-{
- if (running_thread_is_recording()
- && (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
- && bm_access_store_4_triggers_conflict(addr)
- && ! drd_is_suppressed(addr, addr + 4))
- {
- drd_report_race(addr, 4, eStore);
- }
-}
-
-static VG_REGPARM(1) void drd_trace_store_8(Addr addr)
-{
- if (running_thread_is_recording()
- && (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
- && bm_access_store_8_triggers_conflict(addr)
- && ! drd_is_suppressed(addr, addr + 8))
- {
- drd_report_race(addr, 8, eStore);
- }
-}
-
static void drd_pre_mem_read(const CorePart part,
const ThreadId tid,
Char* const s,
@@ -496,7 +305,7 @@
{
drd_trace_mem_access(a1, len, eEnd);
}
- if (! is_stack_mem || s_drd_check_stack_accesses)
+ if (! is_stack_mem || DRD_(get_check_stack_accesses)())
{
thread_stop_using_mem(a1, a2);
clientobj_stop_using_mem(a1, a2);
@@ -616,7 +425,7 @@
{
thread_new_segment(drd_creator);
}
- if (s_drd_trace_fork_join)
+ if (DRD_(thread_get_trace_fork_join)())
{
VG_(message)(Vg_DebugMsg,
"drd_pre_thread_create creator = %d/%d, created = %d",
@@ -635,13 +444,13 @@
tl_assert(vg_created != VG_INVALID_THREADID);
drd_created = thread_post_create(vg_created);
- if (s_drd_trace_fork_join)
+ if (DRD_(thread_get_trace_fork_join)())
{
VG_(message)(Vg_DebugMsg,
"drd_post_thread_create created = %d/%d",
vg_created, drd_created);
}
- if (! s_drd_check_stack_accesses)
+ if (! DRD_(get_check_stack_accesses)())
{
drd_start_suppression(thread_get_stack_max(drd_created)
- thread_get_stack_size(drd_created),
@@ -650,60 +459,6 @@
}
}
-/* Process VG_USERREQ__POST_THREAD_JOIN. This client request is invoked just */
-/* after thread drd_joiner joined thread drd_joinee. */
-void drd_post_thread_join(DrdThreadId drd_joiner, DrdThreadId drd_joinee)
-{
- tl_assert(IsValidDrdThreadId(drd_joiner));
- tl_assert(IsValidDrdThreadId(drd_joinee));
- thread_new_segment(drd_joinee);
- thread_combine_vc(drd_joiner, drd_joinee);
- thread_new_segment(drd_joiner);
-
- if (s_drd_trace_fork_join)
- {
- const ThreadId joiner = DrdThreadIdToVgThreadId(drd_joiner);
- const ThreadId joinee = DrdThreadIdToVgThreadId(drd_joinee);
- const unsigned msg_size = 256;
- char* msg;
-
- msg = VG_(malloc)("drd.main.dptj.1", msg_size);
- tl_assert(msg);
- VG_(snprintf)(msg, msg_size,
- "drd_post_thread_join joiner = %d/%d, joinee = %d/%d",
- joiner, drd_joiner, joinee, drd_joinee);
- if (joiner)
- {
- VG_(snprintf)(msg + VG_(strlen)(msg), msg_size - VG_(strlen)(msg),
- ", new vc: ");
- vc_snprint(msg + VG_(strlen)(msg), msg_size - VG_(strlen)(msg),
- thread_get_vc(drd_joiner));
- }
- VG_(message)(Vg_DebugMsg, "%s", msg);
- VG_(free)(msg);
- }
-
- if (! s_drd_check_stack_accesses)
- {
- drd_finish_suppression(thread_get_stack_max(drd_joinee)
- - thread_get_stack_size(drd_joinee),
- thread_get_stack_max(drd_joinee));
- }
- thread_delete(drd_joinee);
- mutex_thread_delete(drd_joinee);
- cond_thread_delete(drd_joinee);
- semaphore_thread_delete(drd_joinee);
- barrier_thread_delete(drd_joinee);
-}
-
-void drd_pre_thread_cancel(DrdThreadId canceling, DrdThreadId canceled)
-{
- thread_pre_cancel(canceled);
-}
-
-void drd_post_thread_cancel(DrdThreadId canceling, DrdThreadId canceled, Bool succeeded)
-{ }
-
/* Called after a thread has performed its last memory access. */
static void drd_thread_finished(ThreadId vg_tid)
{
@@ -712,7 +467,7 @@
tl_assert(VG_(get_running_tid)() == vg_tid);
drd_tid = VgThreadIdToDrdThreadId(vg_tid);
- if (s_drd_trace_fork_join)
+ if (DRD_(thread_get_trace_fork_join)())
{
VG_(message)(Vg_DebugMsg,
"drd_thread_finished tid = %d/%d%s",
@@ -748,101 +503,6 @@
thread_finished(drd_tid);
}
-void drd_pre_mutex_init(const Addr mutex, const MutexT mutex_type)
-{
- mutex_init(mutex, mutex_type);
-}
-
-void drd_post_mutex_destroy(const Addr mutex, const MutexT mutex_type)
-{
- mutex_post_destroy(mutex);
-}
-
-void drd_pre_mutex_lock(const Addr mutex, const MutexT mutex_type,
- const Bool trylock)
-{
- mutex_pre_lock(mutex, mutex_type, trylock);
-}
-
-void drd_post_mutex_lock(const Addr mutex, const Bool took_lock)
-{
- mutex_post_lock(mutex, took_lock, False);
-}
-
-void drd_pre_mutex_unlock(const Addr mutex, const MutexT mutex_type)
-{
- mutex_unlock(mutex, mutex_type);
-}
-
-void drd_pre_cond_init(Addr cond)
-{
- cond_pre_init(cond);
-}
-
-void drd_post_cond_destroy(Addr cond)
-{
- cond_post_destroy(cond);
-}
-
-void drd_semaphore_init(const Addr semaphore,
- const Word pshared, const Word value)
-{
- semaphore_init(semaphore, pshared, value);
-}
-
-void drd_semaphore_destroy(const Addr semaphore)
-{
- semaphore_destroy(semaphore);
-}
-
-void drd_semaphore_pre_wait(const DrdThreadId tid, const Addr semaphore)
-{
- semaphore_pre_wait(semaphore);
-}
-
-void drd_semaphore_post_wait(const DrdThreadId tid, const Addr semaphore,
- const Bool waited)
-{
- semaphore_post_wait(tid, semaphore, waited);
-}
-
-void drd_semaphore_pre_post(const DrdThreadId tid, const Addr semaphore)
-{
- semaphore_pre_post(tid, semaphore);
-}
-
-void drd_semaphore_post_post(const DrdThreadId tid, const Addr semaphore,
- const Bool waited)
-{
- semaphore_post_post(tid, semaphore, waited);
-}
-
-
-void drd_barrier_init(const Addr barrier,
- const BarrierT barrier_type, const Word count,
- const Bool reinitialization)
-{
- barrier_init(barrier, barrier_type, count, reinitialization);
-}
-
-void drd_barrier_destroy(const Addr barrier, const BarrierT barrier_type)
-{
- barrier_destroy(barrier, barrier_type);
-}
-
-void drd_barrier_pre_wait(const DrdThreadId tid, const Addr barrier,
- const BarrierT barrier_type)
-{
- barrier_pre_wait(tid, barrier, barrier_type);
-}
-
-void drd_barrier_post_wait(const DrdThreadId tid, const Addr barrier,
- const BarrierT barrier_type, const Bool waited)
-{
- barrier_post_wait(tid, barrier, barrier_type, waited);
-}
-
-
//
// Implementation of the tool interface.
//
@@ -863,319 +523,6 @@
}
}
-#if defined(VGA_x86)
-#define STACK_POINTER_OFFSET OFFSET_x86_ESP
-#elif defined(VGA_amd64)
-#define STACK_POINTER_OFFSET OFFSET_amd64_RSP
-#elif defined(VGA_ppc32)
-#define STACK_POINTER_OFFSET ((OFFSET_ppc32_GPR0 + OFFSET_ppc32_GPR2) / 2)
-#elif defined(VGA_ppc64)
-#define STACK_POINTER_OFFSET ((OFFSET_ppc64_GPR0 + OFFSET_ppc64_GPR2) / 2)
-#else
-#error Unknown architecture.
-#endif
-
-
-/** Return true if and only if addr_expr matches the pattern (SP) or
- * <offset>(SP).
- */
-static Bool is_stack_access(IRSB* const bb, IRExpr* const addr_expr)
-{
- Bool result = False;
-
- if (addr_expr->tag == Iex_RdTmp)
- {
- int i;
- for (i = 0; i < bb->stmts_size; i++)
- {
- if (bb->stmts[i]
- && bb->stmts[i]->tag == Ist_WrTmp
- && bb->stmts[i]->Ist.WrTmp.tmp == addr_expr->Iex.RdTmp.tmp)
- {
- IRExpr* e = bb->stmts[i]->Ist.WrTmp.data;
- if (e->tag == Iex_Get && e->Iex.Get.offset == STACK_POINTER_OFFSET)
- {
- result = True;
- }
-
- //ppIRExpr(e);
- //VG_(printf)(" (%s)\n", result ? "True" : "False");
- break;
- }
- }
- }
- return result;
-}
-
-static void instrument_load(IRSB* const bb,
- IRExpr* const addr_expr,
- const HWord size)
-{
- IRExpr* size_expr;
- IRExpr** argv;
- IRDirty* di;
-
- if (UNLIKELY(drd_any_address_is_traced()))
- {
- addStmtToIRSB(bb,
- IRStmt_Dirty(
- unsafeIRDirty_0_N(/*regparms*/2,
- "drd_trace_load",
- VG_(fnptr_to_fnentry)
- (drd_trace_mem_load),
- mkIRExprVec_2(addr_expr,
- mkIRExpr_HWord(size)))));
- }
-
- if (! s_drd_check_stack_accesses && is_stack_access(bb, addr_expr))
- return;
-
- switch (size)
- {
- case 1:
- argv = mkIRExprVec_1(addr_expr);
- di = unsafeIRDirty_0_N(/*regparms*/1,
- "drd_trace_load_1",
- VG_(fnptr_to_fnentry)(drd_trace_load_1),
- argv);
- break;
- case 2:
- argv = mkIRExprVec_1(addr_expr);
- di = unsafeIRDirty_0_N(/*regparms*/1,
- "drd_trace_load_2",
- VG_(fnptr_to_fnentry)(drd_trace_load_2),
- argv);
- break;
- case 4:
- argv = mkIRExprVec_1(addr_expr);
- di = unsafeIRDirty_0_N(/*regparms*/1,
- "drd_trace_load_4",
- VG_(fnptr_to_fnentry)(drd_trace_load_4),
- argv);
- break;
- case 8:
- argv = mkIRExprVec_1(addr_expr);
- di = unsafeIRDirty_0_N(/*regparms*/1,
- "drd_trace_load_8",
- VG_(fnptr_to_fnentry)(drd_trace_load_8),
- argv);
- break;
- default:
- size_expr = mkIRExpr_HWord(size);
- argv = mkIRExprVec_2(addr_expr, size_expr);
- di = unsafeIRDirty_0_N(/*regparms*/2,
- "drd_trace_load",
- VG_(fnptr_to_fnentry)(drd_trace_load),
- argv);
- break;
- }
- addStmtToIRSB(bb, IRStmt_Dirty(di));
-}
-
-static void instrument_store(IRSB* const bb,
- IRExpr* const addr_expr,
- const HWord size)
-{
- IRExpr* size_expr;
- IRExpr** argv;
- IRDirty* di;
-
- if (UNLIKELY(drd_any_address_is_traced()))
- {
- addStmtToIRSB(bb,
- IRStmt_Dirty(
- unsafeIRDirty_0_N(/*regparms*/2,
- "drd_trace_store",
- VG_(fnptr_to_fnentry)
- (drd_trace_mem_store),
- mkIRExprVec_2(addr_expr,
- mkIRExpr_HWord(size)))));
- }
-
- if (! s_drd_check_stack_accesses && is_stack_access(bb, addr_expr))
- return;
-
- switch (size)
- {
- case 1:
- argv = mkIRExprVec_1(addr_expr);
- di = unsafeIRDirty_0_N(/*regparms*/1,
- "drd_trace_store_1",
- VG_(fnptr_to_fnentry)(drd_trace_store_1),
- argv);
- break;
- case 2:
- argv = mkIRExprVec_1(addr_expr);
- di = unsafeIRDirty_0_N(/*regparms*/1,
- "drd_trace_store_2",
- VG_(fnptr_to_fnentry)(drd_trace_store_2),
- argv);
- break;
- case 4:
- argv = mkIRExprVec_1(addr_expr);
- di = unsafeIRDirty_0_N(/*regparms*/1,
- "drd_trace_store_4",
- VG_(fnptr_to_fnentry)(drd_trace_store_4),
- argv);
- break;
- case 8:
- argv = mkIRExprVec_1(addr_expr);
- di = unsafeIRDirty_0_N(/*regparms*/1,
- "drd_trace_store_8",
- VG_(fnptr_to_fnentry)(drd_trace_store_8),
- argv);
- break;
- default:
- size_expr = mkIRExpr_HWord(size);
- argv = mkIRExprVec_2(addr_expr, size_expr);
- di = unsafeIRDirty_0_N(/*regparms*/2,
- "drd_trace_store",
- VG_(fnptr_to_fnentry)(drd_trace_store),
- argv);
- break;
- }
- addStmtToIRSB(bb, IRStmt_Dirty(di));
-}
-
-static
-IRSB* drd_instrument(VgCallbackClosure* const closure,
- IRSB* const bb_in,
- VexGuestLayout* const layout,
- VexGuestExtents* const vge,
- IRType const gWordTy,
- IRType const hWordTy)
-{
- IRDirty* di;
- Int i;
- IRSB* bb;
- IRExpr** argv;
- Bool instrument = True;
- Bool bus_locked = False;
-
- /* Set up BB */
- bb = emptyIRSB();
- bb->tyenv = deepCopyIRTypeEnv(bb_in->tyenv);
- bb->next = deepCopyIRExpr(bb_in->next);
- bb->jumpkind = bb_in->jumpkind;
-
- for (i = 0; i < bb_in->stmts_used; i++)
- {
- IRStmt* const st = bb_in->stmts[i];
- tl_assert(st);
- if (st->tag == Ist_NoOp)
- continue;
-
- switch (st->tag)
- {
- /* Note: the code for not instrumenting the code in .plt */
- /* sections is only necessary on CentOS 3.0 x86 (kernel 2.4.21 */
- /* + glibc 2.3.2 + NPTL 0.60 + binutils 2.14.90.0.4). */
- /* This is because on this platform dynamic library symbols are */
- /* relocated in another way than by later binutils versions. The */
- /* linker e.g. does not generate .got.plt sections on CentOS 3.0. */
- case Ist_IMark:
- instrument = VG_(seginfo_sect_kind)(NULL, 0, st->Ist.IMark.addr)
- != Vg_SectPLT;
- addStmtToIRSB(bb, st);
- break;
-
- case Ist_MBE:
- switch (st->Ist.MBE.event)
- {
- case Imbe_Fence:
- break; /* not interesting */
- case Imbe_BusLock:
- case Imbe_SnoopedStoreBegin:
- tl_assert(! bus_locked);
- bus_locked = True;
- break;
- case Imbe_BusUnlock:
- case Imbe_SnoopedStoreEnd:
- tl_assert(bus_locked);
- bus_locked = False;
- break;
- default:
- tl_assert(0);
- }
- addStmtToIRSB(bb, st);
- break;
-
- case Ist_Store:
- if (instrument && ! bus_locked)
- {
- instrument_store(bb,
- st->Ist.Store.addr,
- sizeofIRType(typeOfIRExpr(bb->tyenv,
- st->Ist.Store.data)));
- }
- addStmtToIRSB(bb, st);
- break;
-
- case Ist_WrTmp:
- if (instrument)
- {
- const IRExpr* const data = st->Ist.WrTmp.data;
- if (data->tag == Iex_Load)
- {
- instrument_load(bb,
- data->Iex.Load.addr,
- sizeofIRType(data->Iex.Load.ty));
- }
- }
- addStmtToIRSB(bb, st);
- break;
-
- case Ist_Dirty:
- if (instrument)
- {
- IRDirty* d = st->Ist.Dirty.details;
- IREffect const mFx = d->mFx;
- switch (mFx) {
- case Ifx_None:
- break;
- case Ifx_Read:
- case Ifx_Write:
- case Ifx_Modify:
- tl_assert(d->mAddr);
- tl_assert(d->mSize > 0);
- argv = mkIRExprVec_2(d->mAddr, mkIRExpr_HWord(d->mSize));
- if (mFx == Ifx_Read || mFx == Ifx_Modify) {
- di = unsafeIRDirty_0_N(
- /*regparms*/2,
- "drd_trace_load",
- VG_(fnptr_to_fnentry)(drd_trace_load),
- argv);
- addStmtToIRSB(bb, IRStmt_Dirty(di));
- }
- if ((mFx == Ifx_Write || mFx == Ifx_Modify)
- && ! bus_locked)
- {
- di = unsafeIRDirty_0_N(
- /*regparms*/2,
- "drd_trace_store",
- VG_(fnptr_to_fnentry)(drd_trace_store),
- argv);
- addStmtToIRSB(bb, IRStmt_Dirty(di));
- }
- break;
- default:
- tl_assert(0);
- }
- }
- addStmtToIRSB(bb, st);
- break;
-
- default:
- addStmtToIRSB(bb, st);
- break;
- }
- }
-
- tl_assert(! bus_locked);
-
- return bb;
-}
-
static void drd_start_client_code(const ThreadId tid, const ULong bbs_done)
{
tl_assert(tid == VG_(get_running_tid)());
@@ -1288,7 +635,7 @@
drd_register_malloc_wrappers(drd_start_using_mem_w_ecu,
drd_stop_using_nonstack_mem);
- drd_clientreq_init();
+ DRD_(clientreq_init)();
drd_suppression_init();
Modified: branches/DRDDEV/drd/drd_mutex.c
===================================================================
--- branches/DRDDEV/drd/drd_mutex.c 2009-05-02 14:11:54 UTC (rev 9717)
+++ branches/DRDDEV/drd/drd_mutex.c 2009-05-02 14:20:09 UTC (rev 9718)
@@ -1,8 +1,7 @@
/*
This file is part of drd, a data race detector.
- Copyright (C) 2006-2008 Bart Van Assche
- bar...@gm...
+ Copyright (C) 2006-2009 Bart Van Assche <bar...@gm...>.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
@@ -23,6 +22,7 @@
*/
+#include "drd_basics.h"
#include "drd_clientobj.h"
#include "drd_error.h"
#include "drd_mutex.h"
@@ -425,6 +425,19 @@
}
}
+void DRD_(spinlock_init_or_unlock)(const Addr spinlock)
+{
+ struct mutex_info* mutex_p = mutex_get(spinlock);
+ if (mutex_p)
+ {
+ mutex_unlock(spinlock, mutex_type_spinlock);
+ }
+ else
+ {
+ mutex_init(spinlock, mutex_type_spinlock);
+ }
+}
+
const char* mutex_get_typename(struct mutex_info* const p)
{
tl_assert(p);
Modified: branches/DRDDEV/drd/drd_mutex.h
===================================================================
--- branches/DRDDEV/drd/drd_mutex.h 2009-05-02 14:11:54 UTC (rev 9717)
+++ branches/DRDDEV/drd/drd_mutex.h 2009-05-02 14:20:09 UTC (rev 9718)
@@ -48,6 +48,7 @@
void mutex_post_lock(const Addr mutex, const Bool took_lock,
const Bool post_cond_wait);
void mutex_unlock(const Addr mutex, const MutexT mutex_type);
+void DRD_(spinlock_init_or_unlock)(const Addr spinlock);
const char* mutex_get_typename(struct mutex_info* const p);
const char* mutex_type_name(const MutexT mt);
Bool mutex_is_locked_by(const Addr mutex, const DrdThreadId tid);
Modified: branches/DRDDEV/drd/drd_thread.c
===================================================================
--- branches/DRDDEV/drd/drd_thread.c 2009-05-02 14:11:54 UTC (rev 9717)
+++ branches/DRDDEV/drd/drd_thread.c 2009-05-02 14:20:09 UTC (rev 9718)
@@ -24,7 +24,11 @@
#include "drd_error.h"
+#include "drd_barrier.h"
+#include "drd_cond.h"
+#include "drd_mutex.h"
#include "drd_segment.h"
+#include "drd_semaphore.h"
#include "drd_suppression.h"
#include "drd_thread.h"
#include "pub_tool_vki.h"
@@ -66,6 +70,7 @@
static DrdTh...
[truncated message content] |
|
From: <sv...@va...> - 2009-05-02 14:12:01
|
Author: bart
Date: 2009-05-02 15:11:54 +0100 (Sat, 02 May 2009)
New Revision: 9717
Log:
Merged trunk revisions r9149.
Modified:
branches/DRDDEV/drd/drd_pthread_intercepts.c
Modified: branches/DRDDEV/drd/drd_pthread_intercepts.c
===================================================================
--- branches/DRDDEV/drd/drd_pthread_intercepts.c 2009-05-02 13:53:14 UTC (rev 9716)
+++ branches/DRDDEV/drd/drd_pthread_intercepts.c 2009-05-02 14:11:54 UTC (rev 9717)
@@ -1,13 +1,12 @@
/*--------------------------------------------------------------------*/
-/*--- Client-space code for drd. drd_pthread_intercepts.c ---*/
+/*--- Client-space code for DRD. drd_pthread_intercepts.c ---*/
/*--------------------------------------------------------------------*/
/*
- This file is part of drd, a data race detector.
+ This file is part of DRD, a data race detector.
- Copyright (C) 2006-2008 Bart Van Assche
- bar...@gm...
+ Copyright (C) 2006-2009 Bart Van Assche <bar...@gm...>.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
@@ -40,26 +39,27 @@
originates from Valgrind.
------------------------------------------------------------------ */
-// Make sure pthread_spinlock_t is available when compiling with older glibc
-// versions (2.3 or before).
+/*
+ Define _GNU_SOURCE to make sure that pthread_spinlock_t is available when
+ compiling with older glibc versions (2.3 or before).
+*/
#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif
-#include <assert.h>
-#include <inttypes.h> // uintptr_t
-#include <pthread.h>
-#include <semaphore.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h> // confstr()
-#include "config.h"
-#include "drd_basics.h"
+#include <assert.h> /* assert() */
+#include <pthread.h> /* pthread_mutex_t */
+#include <semaphore.h> /* sem_t */
+#include <stdio.h> /* fprintf() */
+#include <stdlib.h> /* malloc(), free() */
+#include <unistd.h> /* confstr() */
+#include "config.h" /* HAVE_PTHREAD_MUTEX_ADAPTIVE_NP etc. */
+#include "drd_basics.h" /* DRD_() */
#include "drd_clientreq.h"
-#include "pub_tool_redir.h"
+#include "pub_tool_redir.h" /* VG_WRAP_FUNCTION_ZZ() */
-// Defines.
+/* Defines. */
#define PTH_FUNC(ret_ty, f, args...) \
ret_ty VG_WRAP_FUNCTION_ZZ(libpthreadZdsoZd0,f)(args); \
@@ -73,65 +73,78 @@
void* (*start)(void*);
void* arg;
int detachstate;
-#if 0
- pthread_mutex_t mutex;
- pthread_cond_t cond;
-#else
- int wrapper_started;
-#endif
} VgPosixThreadArgs;
-/* Function declarations. */
+/* Local function declarations. */
-static void init(void) __attribute__((constructor));
-static void check_threading_library(void);
-static void vg_set_main_thread_state(void);
+static void DRD_(init)(void) __attribute__((constructor));
+static void DRD_(check_threading_library)(void);
+static void DRD_(set_main_thread_state)(void);
/* Function definitions. */
-/** Shared library initialization function: the _init() function is called
- * after dlopen() has loaded the shared library. This function must not
- * be declared static.
+/**
+ * Shared library initialization function. The function init() is called after
+ * dlopen() has loaded the shared library with DRD client intercepts because
+ * the constructor attribute was specified in the declaration of this function.
+ * Note: do specify the -nostdlib option to gcc when linking this code into a
+ * shared library because doing so would cancel the effect of the constructor
+ * attribute ! Using the gcc option -nodefaultlibs is fine because this last
+ * option preserves the shared library initialization code that calls
+ * constructor and destructor functions.
*/
-static void init(void)
+static void DRD_(init)(void)
{
- check_threading_library();
- vg_set_main_thread_state();
+ DRD_(check_threading_library)();
+ DRD_(set_main_thread_state)();
}
-static MutexT pthread_to_drd_mutex_type(const int kind)
+/**
+ * POSIX threads and DRD each have their own mutex type identification.
+ * Convert POSIX threads' mutex type to DRD's mutex type. In the code below
+ * if-statements are used to test the value of 'kind' instead of a switch
+ * statement because some of the PTHREAD_MUTEX_ macro's may have the same
+ * value.
+ */
+static MutexT DRD_(pthread_to_drd_mutex_type)(const int kind)
{
- switch (kind)
- {
- /* PTHREAD_MUTEX_RECURSIVE_NP */
- case PTHREAD_MUTEX_RECURSIVE:
+ if (kind == PTHREAD_MUTEX_RECURSIVE)
return mutex_type_recursive_mutex;
- /* PTHREAD_MUTEX_ERRORCHECK_NP */
- case PTHREAD_MUTEX_ERRORCHECK:
+ else if (kind == PTHREAD_MUTEX_ERRORCHECK)
return mutex_type_errorcheck_mutex;
- /* PTHREAD_MUTEX_TIMED_NP */
- /* PTHREAD_MUTEX_NORMAL */
- case PTHREAD_MUTEX_DEFAULT:
+ else if (kind == PTHREAD_MUTEX_NORMAL)
+ return mutex_type_default_mutex;
+ else if (kind == PTHREAD_MUTEX_DEFAULT)
+ return mutex_type_default_mutex;
#if defined(HAVE_PTHREAD_MUTEX_ADAPTIVE_NP)
- case PTHREAD_MUTEX_ADAPTIVE_NP:
+ else if (kind == PTHREAD_MUTEX_ADAPTIVE_NP)
+ return mutex_type_default_mutex;
#endif
- return mutex_type_default_mutex;
+ else
+ {
+ return mutex_type_invalid_mutex;
}
- return mutex_type_invalid_mutex;
}
-/** @note The function mutex_type() has been declared inline in order
- * to avoid that it shows up in call stacks.
+/**
+ * Read the mutex type stored in the client memory used for the mutex
+ * implementation.
+ *
+ * @note This function depends on the implementation of the POSIX threads
+ * library -- the POSIX standard does not define the name of the member in
+ * which the mutex type is stored.
+ * @note The function mutex_type() has been declared inline in order
+ * to avoid that it shows up in call stacks (drd/tests/...exp* files).
*/
-static __inline__ MutexT mutex_type(pthread_mutex_t* mutex)
+static __inline__ MutexT DRD_(mutex_type)(pthread_mutex_t* mutex)
{
#if defined(HAVE_PTHREAD_MUTEX_T__M_KIND)
- /* LinuxThreads. */
+ /* glibc + LinuxThreads. */
const int kind = mutex->__m_kind;
#elif defined(HAVE_PTHREAD_MUTEX_T__DATA__KIND)
- /* NPTL. */
+ /* glibc + NPTL. */
const int kind = mutex->__data.__kind;
#else
/* Another POSIX threads implementation. Regression tests will fail. */
@@ -140,55 +153,56 @@
"Did not recognize your POSIX threads implementation. Giving up.\n");
assert(0);
#endif
- return pthread_to_drd_mutex_type(kind);
+ return DRD_(pthread_to_drd_mutex_type)(kind);
}
-static void vg_start_suppression(const void* const p, size_t const size)
+/**
+ * Tell DRD whether 'tid' is a joinable thread or a detached thread.
+ */
+static void DRD_(set_joinable)(const pthread_t tid, const int joinable)
{
int res;
- VALGRIND_DO_CLIENT_REQUEST(res, 0, VG_USERREQ__DRD_START_SUPPRESSION,
- p, size, 0, 0, 0);
-}
-
-static void vg_set_joinable(const pthread_t tid, const int joinable)
-{
- int res;
assert(joinable == 0 || joinable == 1);
VALGRIND_DO_CLIENT_REQUEST(res, 0, VG_USERREQ__SET_JOINABLE,
tid, joinable, 0, 0, 0);
}
+/**
+ * The function called from the thread created by pthread_create().
+ */
static void* DRD_(thread_wrapper)(void* arg)
{
int res;
+ VgPosixThreadArgs* arg_ptr;
+ VgPosixThreadArgs arg_copy;
VALGRIND_DO_CLIENT_REQUEST(res, 0, VG_USERREQ__DRD_SUPPRESS_CURRENT_STACK,
0, 0, 0, 0, 0);
- {
- VgPosixThreadArgs* const arg_ptr = (VgPosixThreadArgs*)arg;
- VgPosixThreadArgs const arg_copy = *arg_ptr;
- void* result;
+ arg_ptr = (VgPosixThreadArgs*)arg;
+ arg_copy = *arg_ptr;
-#if 0
- pthread_mutex_lock(arg_ptr->mutex);
- pthread_cond_signal(arg_ptr->cond);
- pthread_mutex_unlock(arg_ptr->mutex);
-#else
- arg_ptr->wrapper_started = 1;
-#endif
+ /*
+ * Free the memory 'arg_ptr' points at now such that it does not get
+ * leaked when the function called below throws a C++ exception.
+ */
+ free(arg_ptr);
- VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__SET_PTHREADID,
- pthread_self(), 0, 0, 0, 0);
- vg_set_joinable(pthread_self(),
- arg_copy.detachstate == PTHREAD_CREATE_JOINABLE);
- result = (arg_copy.start)(arg_copy.arg);
- return result;
- }
+ VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__SET_PTHREADID,
+ pthread_self(), 0, 0, 0, 0);
+
+ DRD_(set_joinable)(pthread_self(),
+ arg_copy.detachstate == PTHREAD_CREATE_JOINABLE);
+
+ return (arg_copy.start)(arg_copy.arg);
}
-/** Return 1 if LinuxThread has been detected, and 0 otherwise. */
-static int detected_linuxthreads(void)
+/**
+ * Return 1 if the LinuxThread implementation has been detected, and 0
+ * otherwise. For more information about the confstr() function, see also
+ * http://www.opengroup.org/onlinepubs/009695399/functions/confstr.html
+ */
+static int DRD_(detected_linuxthreads)(void)
{
#if defined(linux)
#if defined(_CS_GNU_LIBPTHREAD_VERSION)
@@ -208,35 +222,40 @@
#endif
}
-/** Stop and print an error message in case a non-supported threading
- * library (LinuxThreads) has been detected.
+/**
+ * Stop and print an error message in case a non-supported threading
+ * library implementation (LinuxThreads) has been detected.
*/
-static void check_threading_library(void)
+static void DRD_(check_threading_library)(void)
{
- if (detected_linuxthreads())
+ if (DRD_(detected_linuxthreads)())
{
if (getenv("LD_ASSUME_KERNEL"))
{
fprintf(stderr,
- "Detected the LinuxThreads threading library. Sorry, but DRD only supports\n"
- "the newer NPTL (Native POSIX Threads Library). Please try to rerun DRD\n"
- "after having unset the environment variable LD_ASSUME_KERNEL. Giving up.\n"
+"Detected the LinuxThreads threading library. Sorry, but DRD only supports\n"
+"the newer NPTL (Native POSIX Threads Library). Please try to rerun DRD\n"
+"after having unset the environment variable LD_ASSUME_KERNEL. Giving up.\n"
);
}
else
{
fprintf(stderr,
- "Detected the LinuxThreads threading library. Sorry, but DRD only supports\n"
- "the newer NPTL (Native POSIX Threads Library). Please try to rerun DRD\n"
- "after having upgraded to a newer version of your Linux distribution.\n"
- "Giving up.\n"
+"Detected the LinuxThreads threading library. Sorry, but DRD only supports\n"
+"the newer NPTL (Native POSIX Threads Library). Please try to rerun DRD\n"
+"after having upgraded to a newer version of your Linux distribution.\n"
+"Giving up.\n"
);
}
abort();
}
}
-static void vg_set_main_thread_state(void)
+/**
+ * The main thread is the only thread not created by pthread_create().
+ * Update DRD's state information about the main thread.
+ */
+static void DRD_(set_main_thread_state)(void)
{
int res;
@@ -257,55 +276,43 @@
int res;
int ret;
OrigFn fn;
- VgPosixThreadArgs vgargs;
+ VgPosixThreadArgs* vgargs;
VALGRIND_GET_ORIG_FN(fn);
- vg_start_suppression(&vgargs.wrapper_started,
- sizeof(vgargs.wrapper_started));
- vgargs.start = start;
- vgargs.arg = arg;
- vgargs.wrapper_started = 0;
- vgargs.detachstate = PTHREAD_CREATE_JOINABLE;
+ vgargs = malloc(sizeof *vgargs);
+ assert(vgargs);
+ vgargs->start = start;
+ vgargs->arg = arg;
+ /*
+ * Find out whether the thread will be started as a joinable thread
+ * or as a detached thread. If no thread attributes have been specified,
+ * the new thread will be started as a joinable thread.
+ */
+ vgargs->detachstate = PTHREAD_CREATE_JOINABLE;
if (attr)
{
- if (pthread_attr_getdetachstate(attr, &vgargs.detachstate) != 0)
+ if (pthread_attr_getdetachstate(attr, &vgargs->detachstate) != 0)
{
assert(0);
}
}
- assert(vgargs.detachstate == PTHREAD_CREATE_JOINABLE
- || vgargs.detachstate == PTHREAD_CREATE_DETACHED);
-#if 0
- pthread_mutex_init(&vgargs.mutex, 0);
- pthread_cond_init(&vgargs.cond, 0);
- pthread_mutex_lock(&vgargs.mutex);
-#endif
+ assert(vgargs->detachstate == PTHREAD_CREATE_JOINABLE
+ || vgargs->detachstate == PTHREAD_CREATE_DETACHED);
+
/* Suppress NPTL-specific conflicts between creator and created thread. */
VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__DRD_STOP_RECORDING,
0, 0, 0, 0, 0);
- CALL_FN_W_WWWW(ret, fn, thread, attr, DRD_(thread_wrapper), &vgargs);
+
+ CALL_FN_W_WWWW(ret, fn, thread, attr, DRD_(thread_wrapper), vgargs);
+
VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__DRD_START_RECORDING,
0, 0, 0, 0, 0);
-#if 0
- pthread_cond_wait(&vgargs.cond, &vgargs.mutex);
- pthread_mutex_unlock(&vgargs.mutex);
- pthread_cond_destroy(&vgargs.cond);
- pthread_mutex_destroy(&vgargs.mutex);
-#else
- // Yes, you see it correctly, busy waiting ... The problem is that
- // POSIX threads functions cannot be called here -- the functions defined
- // in this file (drd_intercepts.c) would be called instead of those in
- // libpthread.so. This loop is necessary because vgargs is allocated on the
- // stack, and the created thread reads it.
- if (ret == 0)
- {
- while (! vgargs.wrapper_started)
- {
- sched_yield();
- }
- }
-#endif
+
+ /* Free the memory 'vgargs' points at if pthread_create() failed. */
+ if (ret != 0)
+ free(vgargs);
+
return ret;
}
@@ -337,7 +344,7 @@
CALL_FN_W_W(ret, fn, pt_thread);
if (ret == 0)
{
- vg_set_joinable(pt_thread, 0);
+ DRD_(set_joinable)(pt_thread, 0);
}
}
return ret;
@@ -372,7 +379,8 @@
if (attr)
pthread_mutexattr_gettype(attr, &mt);
VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__PRE_MUTEX_INIT,
- mutex, pthread_to_drd_mutex_type(mt), 0, 0, 0);
+ mutex, DRD_(pthread_to_drd_mutex_type)(mt),
+ 0, 0, 0);
CALL_FN_W_WW(ret, fn, mutex, attr);
VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__POST_MUTEX_INIT,
mutex, 0, 0, 0, 0);
@@ -391,7 +399,7 @@
mutex, 0, 0, 0, 0);
CALL_FN_W_W(ret, fn, mutex);
VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__POST_MUTEX_DESTROY,
- mutex, mutex_type(mutex), 0, 0, 0);
+ mutex, DRD_(mutex_type)(mutex), 0, 0, 0);
return ret;
}
@@ -404,7 +412,7 @@
OrigFn fn;
VALGRIND_GET_ORIG_FN(fn);
VALGRIND_DO_CLIENT_REQUEST(res, 0, VG_USERREQ__PRE_MUTEX_LOCK,
- mutex, mutex_type(mutex), 0, 0, 0);
+ mutex, DRD_(mutex_type)(mutex), 0, 0, 0);
CALL_FN_W_W(ret, fn, mutex);
VALGRIND_DO_CLIENT_REQUEST(res, 0, VG_USERREQ__POST_MUTEX_LOCK,
mutex, ret == 0, 0, 0, 0);
@@ -420,7 +428,7 @@
OrigFn fn;
VALGRIND_GET_ORIG_FN(fn);
VALGRIND_DO_CLIENT_REQUEST(res, 0, VG_USERREQ__PRE_MUTEX_LOCK,
- mutex, mutex_type(mutex), 1, 0, 0);
+ mutex, DRD_(mutex_type)(mutex), 1, 0, 0);
CALL_FN_W_W(ret, fn, mutex);
VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__POST_MUTEX_LOCK,
mutex, ret == 0, 0, 0, 0);
@@ -437,7 +445,7 @@
OrigFn fn;
VALGRIND_GET_ORIG_FN(fn);
VALGRIND_DO_CLIENT_REQUEST(res, 0, VG_USERREQ__PRE_MUTEX_LOCK,
- mutex, mutex_type(mutex), 0, 0, 0);
+ mutex, DRD_(mutex_type)(mutex), 0, 0, 0);
CALL_FN_W_WW(ret, fn, mutex, abs_timeout);
VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__POST_MUTEX_LOCK,
mutex, ret == 0, 0, 0, 0);
@@ -454,7 +462,7 @@
VALGRIND_GET_ORIG_FN(fn);
VALGRIND_DO_CLIENT_REQUEST(res, -1,
VG_USERREQ__PRE_MUTEX_UNLOCK,
- mutex, mutex_type(mutex), 0, 0, 0);
+ mutex, DRD_(mutex_type)(mutex), 0, 0, 0);
CALL_FN_W_W(ret, fn, mutex);
VALGRIND_DO_CLIENT_REQUEST(res, -1,
VG_USERREQ__POST_MUTEX_UNLOCK,
@@ -505,7 +513,7 @@
OrigFn fn;
VALGRIND_GET_ORIG_FN(fn);
VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__PRE_COND_WAIT,
- cond, mutex, mutex_type(mutex), 0, 0);
+ cond, mutex, DRD_(mutex_type)(mutex), 0, 0);
CALL_FN_W_WW(ret, fn, cond, mutex);
VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__POST_COND_WAIT,
cond, mutex, 1, 0, 0);
@@ -523,7 +531,7 @@
OrigFn fn;
VALGRIND_GET_ORIG_FN(fn);
VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__PRE_COND_WAIT,
- cond, mutex, mutex_type(mutex), 0, 0);
+ cond, mutex, DRD_(mutex_type)(mutex), 0, 0);
CALL_FN_W_WWW(ret, fn, cond, mutex, abstime);
VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__POST_COND_WAIT,
cond, mutex, 1, 0, 0);
|
|
From: <sv...@va...> - 2009-05-02 14:00:08
|
Author: bart
Date: 2009-05-02 14:53:14 +0100 (Sat, 02 May 2009)
New Revision: 9716
Log:
Updated expected output of tc16_byterace after the changed of ADDR_IGNORED_BITS from 2 to 0.
Modified:
branches/DRDDEV/drd/tests/tc16_byterace.stderr.exp
Modified: branches/DRDDEV/drd/tests/tc16_byterace.stderr.exp
===================================================================
--- branches/DRDDEV/drd/tests/tc16_byterace.stderr.exp 2009-05-02 13:22:58 UTC (rev 9715)
+++ branches/DRDDEV/drd/tests/tc16_byterace.stderr.exp 2009-05-02 13:53:14 UTC (rev 9716)
@@ -1,114 +1,6 @@
Conflicting load by thread 1/1 at 0x........ size 1
- at 0x........: main (tc16_byterace.c:30)
-Location 0x........ is 0 bytes inside bytes[1],
-a global variable declared at tc16_byterace.c:7
-Other segment start (thread 0/2)
- (thread finished, call stack no longer available)
-Other segment end (thread 0/2)
- (thread finished, call stack no longer available)
-
-Conflicting store by thread 1/1 at 0x........ size 1
- at 0x........: main (tc16_byterace.c:30)
-Location 0x........ is 0 bytes inside bytes[1],
-a global variable declared at tc16_byterace.c:7
-Other segment start (thread 0/2)
- (thread finished, call stack no longer available)
-Other segment end (thread 0/2)
- (thread finished, call stack no longer available)
-
-Conflicting load by thread 1/1 at 0x........ size 1
- at 0x........: main (tc16_byterace.c:30)
-Location 0x........ is 0 bytes inside bytes[3],
-a global variable declared at tc16_byterace.c:7
-Other segment start (thread 0/2)
- (thread finished, call stack no longer available)
-Other segment end (thread 0/2)
- (thread finished, call stack no longer available)
-
-Conflicting store by thread 1/1 at 0x........ size 1
- at 0x........: main (tc16_byterace.c:30)
-Location 0x........ is 0 bytes inside bytes[3],
-a global variable declared at tc16_byterace.c:7
-Other segment start (thread 0/2)
- (thread finished, call stack no longer available)
-Other segment end (thread 0/2)
- (thread finished, call stack no longer available)
-
-Conflicting load by thread 1/1 at 0x........ size 1
- at 0x........: main (tc16_byterace.c:30)
-Location 0x........ is 0 bytes inside bytes[5],
-a global variable declared at tc16_byterace.c:7
-Other segment start (thread 0/2)
- (thread finished, call stack no longer available)
-Other segment end (thread 0/2)
- (thread finished, call stack no longer available)
-
-Conflicting store by thread 1/1 at 0x........ size 1
- at 0x........: main (tc16_byterace.c:30)
-Location 0x........ is 0 bytes inside bytes[5],
-a global variable declared at tc16_byterace.c:7
-Other segment start (thread 0/2)
- (thread finished, call stack no longer available)
-Other segment end (thread 0/2)
- (thread finished, call stack no longer available)
-
-Conflicting load by thread 1/1 at 0x........ size 1
- at 0x........: main (tc16_byterace.c:30)
-Location 0x........ is 0 bytes inside bytes[7],
-a global variable declared at tc16_byterace.c:7
-Other segment start (thread 0/2)
- (thread finished, call stack no longer available)
-Other segment end (thread 0/2)
- (thread finished, call stack no longer available)
-
-Conflicting store by thread 1/1 at 0x........ size 1
- at 0x........: main (tc16_byterace.c:30)
-Location 0x........ is 0 bytes inside bytes[7],
-a global variable declared at tc16_byterace.c:7
-Other segment start (thread 0/2)
- (thread finished, call stack no longer available)
-Other segment end (thread 0/2)
- (thread finished, call stack no longer available)
-
-Conflicting load by thread 1/1 at 0x........ size 1
- at 0x........: main (tc16_byterace.c:30)
-Location 0x........ is 0 bytes inside bytes[9],
-a global variable declared at tc16_byterace.c:7
-Other segment start (thread 0/2)
- (thread finished, call stack no longer available)
-Other segment end (thread 0/2)
- (thread finished, call stack no longer available)
-
-Conflicting store by thread 1/1 at 0x........ size 1
- at 0x........: main (tc16_byterace.c:30)
-Location 0x........ is 0 bytes inside bytes[9],
-a global variable declared at tc16_byterace.c:7
-Other segment start (thread 0/2)
- (thread finished, call stack no longer available)
-Other segment end (thread 0/2)
- (thread finished, call stack no longer available)
-
-Conflicting load by thread 1/1 at 0x........ size 1
at 0x........: main (tc16_byterace.c:34)
-Location 0x........ is 0 bytes inside bytes[1],
-a global variable declared at tc16_byterace.c:7
-Other segment start (thread 0/2)
- (thread finished, call stack no longer available)
-Other segment end (thread 0/2)
- (thread finished, call stack no longer available)
-
-Conflicting store by thread 1/1 at 0x........ size 1
- at 0x........: main (tc16_byterace.c:34)
-Location 0x........ is 0 bytes inside bytes[1],
-a global variable declared at tc16_byterace.c:7
-Other segment start (thread 0/2)
- (thread finished, call stack no longer available)
-Other segment end (thread 0/2)
- (thread finished, call stack no longer available)
-
-Conflicting load by thread 1/1 at 0x........ size 1
- at 0x........: main (tc16_byterace.c:34)
Location 0x........ is 0 bytes inside bytes[4],
a global variable declared at tc16_byterace.c:7
Other segment start (thread 0/2)
@@ -125,22 +17,4 @@
Other segment end (thread 0/2)
(thread finished, call stack no longer available)
-Conflicting load by thread 1/1 at 0x........ size 1
- at 0x........: main (tc16_byterace.c:34)
-Location 0x........ is 0 bytes inside bytes[7],
-a global variable declared at tc16_byterace.c:7
-Other segment start (thread 0/2)
- (thread finished, call stack no longer available)
-Other segment end (thread 0/2)
- (thread finished, call stack no longer available)
-
-Conflicting store by thread 1/1 at 0x........ size 1
- at 0x........: main (tc16_byterace.c:34)
-Location 0x........ is 0 bytes inside bytes[7],
-a global variable declared at tc16_byterace.c:7
-Other segment start (thread 0/2)
- (thread finished, call stack no longer available)
-Other segment end (thread 0/2)
- (thread finished, call stack no longer available)
-
-ERROR SUMMARY: 16 errors from 16 contexts (suppressed: 0 from 0)
+ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)
|
Author: bart Date: 2009-05-02 14:22:58 +0100 (Sat, 02 May 2009) New Revision: 9715 Log: Merged trunk revisions r8887:9148. Added: branches/DRDDEV/cachegrind/tests/notpower2.stderr.exp branches/DRDDEV/cachegrind/tests/notpower2.vgtest branches/DRDDEV/callgrind/tests/notpower2-hwpref.stderr.exp branches/DRDDEV/callgrind/tests/notpower2-hwpref.vgtest branches/DRDDEV/callgrind/tests/notpower2-use.stderr.exp branches/DRDDEV/callgrind/tests/notpower2-use.vgtest branches/DRDDEV/callgrind/tests/notpower2-wb.stderr.exp branches/DRDDEV/callgrind/tests/notpower2-wb.vgtest branches/DRDDEV/callgrind/tests/notpower2.stderr.exp branches/DRDDEV/callgrind/tests/notpower2.vgtest branches/DRDDEV/coregrind/m_ume/ branches/DRDDEV/drd/drd_basics.h branches/DRDDEV/drd/tests/atomic_var.stderr.exp-with-atomic-builtins-1 branches/DRDDEV/drd/tests/atomic_var.stderr.exp-with-atomic-builtins-2 branches/DRDDEV/drd/tests/pth_create_chain.stderr.exp-ppc branches/DRDDEV/drd/tests/pth_inconsistent_cond_wait.stderr.exp1 branches/DRDDEV/drd/tests/pth_inconsistent_cond_wait.stderr.exp2 branches/DRDDEV/memcheck/tests/linux/ branches/DRDDEV/memcheck/tests/x86-linux/ branches/DRDDEV/nightly/conf/georgia-tech-cellbuzz-cross.conf branches/DRDDEV/nightly/conf/georgia-tech-cellbuzz-cross.sendmail branches/DRDDEV/nightly/conf/georgia-tech-cellbuzz-native.conf branches/DRDDEV/nightly/conf/georgia-tech-cellbuzz-native.sendmail branches/DRDDEV/none/tests/linux/ Removed: branches/DRDDEV/Makefile.core.am branches/DRDDEV/Makefile.tool-flags.am branches/DRDDEV/Makefile.tool-inplace.am branches/DRDDEV/cachegrind/tests/amd64/ branches/DRDDEV/cachegrind/tests/ppc32/ branches/DRDDEV/cachegrind/tests/ppc64/ branches/DRDDEV/cachegrind/tests/wrap5.c branches/DRDDEV/coregrind/m_ume.c branches/DRDDEV/drd/tests/atomic_var.stderr.exp-with-atomic-builtins branches/DRDDEV/drd/tests/pth_inconsistent_cond_wait.stderr.exp branches/DRDDEV/memcheck/tests/badjump.stderr.exp2 branches/DRDDEV/memcheck/tests/brk.c branches/DRDDEV/memcheck/tests/brk.stderr.exp branches/DRDDEV/memcheck/tests/brk.stderr.exp2 branches/DRDDEV/memcheck/tests/brk.vgtest branches/DRDDEV/memcheck/tests/brk2.stderr.exp2 branches/DRDDEV/memcheck/tests/linux-capget.c branches/DRDDEV/memcheck/tests/linux-capget.stderr.exp branches/DRDDEV/memcheck/tests/linux-capget.vgtest branches/DRDDEV/memcheck/tests/linux-timerfd-syscall.c branches/DRDDEV/memcheck/tests/linux-timerfd-syscall.stderr.exp branches/DRDDEV/memcheck/tests/linux-timerfd-syscall.stdout.exp branches/DRDDEV/memcheck/tests/linux-timerfd-syscall.vgtest branches/DRDDEV/memcheck/tests/ppc32/ branches/DRDDEV/memcheck/tests/ppc64/ branches/DRDDEV/memcheck/tests/stack_switch.c branches/DRDDEV/memcheck/tests/stack_switch.stderr.exp branches/DRDDEV/memcheck/tests/stack_switch.vgtest branches/DRDDEV/memcheck/tests/vcpu_bz2.c branches/DRDDEV/memcheck/tests/vgtest_ume.c branches/DRDDEV/memcheck/tests/vgtest_ume.disabled branches/DRDDEV/memcheck/tests/vgtest_ume.stderr.exp branches/DRDDEV/memcheck/tests/x86/scalar.c branches/DRDDEV/memcheck/tests/x86/scalar.h branches/DRDDEV/memcheck/tests/x86/scalar.stderr.exp branches/DRDDEV/memcheck/tests/x86/scalar.stderr.exp2 branches/DRDDEV/memcheck/tests/x86/scalar.vgtest branches/DRDDEV/memcheck/tests/x86/scalar_exit_group.c branches/DRDDEV/memcheck/tests/x86/scalar_exit_group.stderr.exp branches/DRDDEV/memcheck/tests/x86/scalar_exit_group.stderr.exp2 branches/DRDDEV/memcheck/tests/x86/scalar_exit_group.vgtest branches/DRDDEV/memcheck/tests/x86/scalar_fork.c branches/DRDDEV/memcheck/tests/x86/scalar_fork.stderr.exp branches/DRDDEV/memcheck/tests/x86/scalar_fork.vgtest branches/DRDDEV/memcheck/tests/x86/scalar_supp.c branches/DRDDEV/memcheck/tests/x86/scalar_supp.stderr.exp branches/DRDDEV/memcheck/tests/x86/scalar_supp.stderr.exp2 branches/DRDDEV/memcheck/tests/x86/scalar_supp.supp branches/DRDDEV/memcheck/tests/x86/scalar_supp.vgtest branches/DRDDEV/memcheck/tests/x86/scalar_vfork.c branches/DRDDEV/memcheck/tests/x86/scalar_vfork.stderr.exp branches/DRDDEV/memcheck/tests/x86/scalar_vfork.vgtest branches/DRDDEV/nightly/conf/georgia-tech-cellbuzz.conf branches/DRDDEV/nightly/conf/georgia-tech-cellbuzz.sendmail branches/DRDDEV/none/tests/mremap.c branches/DRDDEV/none/tests/mremap.stderr.exp branches/DRDDEV/none/tests/mremap.stderr.exp-glibc27 branches/DRDDEV/none/tests/mremap.stdout.exp branches/DRDDEV/none/tests/mremap.vgtest branches/DRDDEV/none/tests/mremap2.c branches/DRDDEV/none/tests/mremap2.stderr.exp branches/DRDDEV/none/tests/mremap2.stdout.exp branches/DRDDEV/none/tests/mremap2.stdout.exp-glibc28-amd64 branches/DRDDEV/none/tests/mremap2.stdout.exp2 branches/DRDDEV/none/tests/mremap2.vgtest Modified: branches/DRDDEV/Makefile.am branches/DRDDEV/Makefile.flags.am branches/DRDDEV/Makefile.install.am branches/DRDDEV/Makefile.tool.am branches/DRDDEV/NEWS branches/DRDDEV/auxprogs/Makefile.am branches/DRDDEV/cachegrind/Makefile.am branches/DRDDEV/cachegrind/cg-amd64.c branches/DRDDEV/cachegrind/cg-x86.c branches/DRDDEV/cachegrind/cg_arch.h branches/DRDDEV/cachegrind/cg_main.c branches/DRDDEV/cachegrind/cg_sim.c branches/DRDDEV/cachegrind/docs/cg-manual.xml branches/DRDDEV/cachegrind/tests/Makefile.am branches/DRDDEV/cachegrind/tests/wrap5.vgtest branches/DRDDEV/callgrind/Makefile.am branches/DRDDEV/callgrind/bb.c branches/DRDDEV/callgrind/global.h branches/DRDDEV/callgrind/sim.c branches/DRDDEV/callgrind/tests/Makefile.am branches/DRDDEV/configure.in branches/DRDDEV/coregrind/Makefile.am branches/DRDDEV/coregrind/launcher-aix5.c branches/DRDDEV/coregrind/launcher-linux.c branches/DRDDEV/coregrind/m_aspacemgr/aspacemgr-aix5.c branches/DRDDEV/coregrind/m_aspacemgr/aspacemgr-linux.c branches/DRDDEV/coregrind/m_debuginfo/d3basics.c branches/DRDDEV/coregrind/m_debuginfo/debuginfo.c branches/DRDDEV/coregrind/m_debuginfo/priv_d3basics.h branches/DRDDEV/coregrind/m_debuginfo/priv_readstabs.h branches/DRDDEV/coregrind/m_debuginfo/priv_storage.h branches/DRDDEV/coregrind/m_debuginfo/priv_tytypes.h branches/DRDDEV/coregrind/m_debuginfo/readdwarf.c branches/DRDDEV/coregrind/m_debuginfo/readdwarf3.c branches/DRDDEV/coregrind/m_debuginfo/readelf.c branches/DRDDEV/coregrind/m_debuginfo/readstabs.c branches/DRDDEV/coregrind/m_debuginfo/readxcoff.c branches/DRDDEV/coregrind/m_debuginfo/storage.c branches/DRDDEV/coregrind/m_debuginfo/tytypes.c branches/DRDDEV/coregrind/m_demangle/demangle.c branches/DRDDEV/coregrind/m_errormgr.c branches/DRDDEV/coregrind/m_initimg/initimg-aix5.c branches/DRDDEV/coregrind/m_initimg/initimg-linux.c branches/DRDDEV/coregrind/m_libcfile.c branches/DRDDEV/coregrind/m_machine.c branches/DRDDEV/coregrind/m_main.c branches/DRDDEV/coregrind/m_oset.c branches/DRDDEV/coregrind/m_redir.c branches/DRDDEV/coregrind/m_replacemalloc/vg_replace_malloc.c branches/DRDDEV/coregrind/m_stacktrace.c branches/DRDDEV/coregrind/m_syswrap/priv_syswrap-generic.h branches/DRDDEV/coregrind/m_syswrap/priv_syswrap-linux.h branches/DRDDEV/coregrind/m_syswrap/syswrap-amd64-linux.c branches/DRDDEV/coregrind/m_syswrap/syswrap-generic.c branches/DRDDEV/coregrind/m_syswrap/syswrap-linux.c branches/DRDDEV/coregrind/m_syswrap/syswrap-ppc32-linux.c branches/DRDDEV/coregrind/m_syswrap/syswrap-ppc64-linux.c branches/DRDDEV/coregrind/m_syswrap/syswrap-x86-linux.c branches/DRDDEV/coregrind/m_tooliface.c branches/DRDDEV/coregrind/m_wordfm.c branches/DRDDEV/coregrind/pub_core_debuginfo.h branches/DRDDEV/coregrind/pub_core_demangle.h branches/DRDDEV/coregrind/pub_core_libcfile.h branches/DRDDEV/coregrind/pub_core_options.h branches/DRDDEV/coregrind/pub_core_tooliface.h branches/DRDDEV/coregrind/pub_core_ume.h branches/DRDDEV/docs/internals/multiple-architectures.txt branches/DRDDEV/docs/internals/porting-HOWTO.txt branches/DRDDEV/docs/xml/FAQ.xml branches/DRDDEV/docs/xml/manual-core.xml branches/DRDDEV/drd/Makefile.am branches/DRDDEV/drd/docs/drd-manual.xml branches/DRDDEV/drd/drd.h branches/DRDDEV/drd/drd_error.h branches/DRDDEV/drd/drd_main.c branches/DRDDEV/drd/drd_pthread_intercepts.c branches/DRDDEV/drd/drd_strmem_intercepts.c branches/DRDDEV/drd/tests/Makefile.am branches/DRDDEV/drd/tests/bar_bad.vgtest branches/DRDDEV/drd/tests/bar_trivial.vgtest branches/DRDDEV/drd/tests/hg03_inherit.stderr.exp branches/DRDDEV/drd/tests/hg04_race.stderr.exp branches/DRDDEV/drd/tests/hg05_race2.stderr.exp branches/DRDDEV/drd/tests/hg05_race2.stderr.exp-powerpc branches/DRDDEV/drd/tests/matinv.c branches/DRDDEV/drd/tests/matinv.vgtest branches/DRDDEV/drd/tests/monitor_example.cpp branches/DRDDEV/drd/tests/pth_barrier.vgtest branches/DRDDEV/drd/tests/pth_barrier2.vgtest branches/DRDDEV/drd/tests/pth_barrier3.vgtest branches/DRDDEV/drd/tests/pth_barrier_reinit.vgtest branches/DRDDEV/drd/tests/pth_cond_race.stderr.exp branches/DRDDEV/drd/tests/pth_spinlock.vgtest branches/DRDDEV/drd/tests/rwlock_race.stderr.exp branches/DRDDEV/drd/tests/rwlock_race.stderr.exp2 branches/DRDDEV/drd/tests/sigalrm.c branches/DRDDEV/drd/tests/tc09_bad_unlock.stderr.exp branches/DRDDEV/drd/tests/tc09_bad_unlock.stderr.exp-glibc2.8 branches/DRDDEV/drd/tests/tc20_verifywrap.stderr.exp-glibc2.8 branches/DRDDEV/drd/tests/tc20_verifywrap.vgtest branches/DRDDEV/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.8 branches/DRDDEV/drd/tests/tc22_exit_w_lock.stderr.exp-64bit branches/DRDDEV/drd/tests/tc23_bogus_condwait.stderr.exp branches/DRDDEV/drd/tests/trylock.c branches/DRDDEV/exp-omega/Makefile.am branches/DRDDEV/exp-ptrcheck.supp branches/DRDDEV/exp-ptrcheck/Makefile.am branches/DRDDEV/exp-ptrcheck/h_intercepts.c branches/DRDDEV/exp-ptrcheck/h_main.c branches/DRDDEV/exp-ptrcheck/h_main.h branches/DRDDEV/exp-ptrcheck/pc_common.c branches/DRDDEV/exp-ptrcheck/sg_main.c branches/DRDDEV/exp-ptrcheck/tests/Makefile.am branches/DRDDEV/exp-ptrcheck/tests/bad_percentify.stderr.exp-glibc28-amd64 branches/DRDDEV/exp-ptrcheck/tests/filter_stderr branches/DRDDEV/exp-ptrcheck/tests/hackedbz2.c branches/DRDDEV/exp-ptrcheck/tests/hackedbz2.stderr.exp-glibc28-amd64 branches/DRDDEV/glibc-2.34567-NPTL-helgrind.supp branches/DRDDEV/glibc-2.X-drd.supp branches/DRDDEV/helgrind/Makefile.am branches/DRDDEV/helgrind/hg_intercepts.c branches/DRDDEV/helgrind/hg_main.c branches/DRDDEV/helgrind/libhb_core.c branches/DRDDEV/helgrind/tests/ branches/DRDDEV/helgrind/tests/Makefile.am branches/DRDDEV/helgrind/tests/bar_bad.vgtest branches/DRDDEV/helgrind/tests/bar_trivial.vgtest branches/DRDDEV/helgrind/tests/pth_barrier1.vgtest branches/DRDDEV/helgrind/tests/pth_barrier2.vgtest branches/DRDDEV/helgrind/tests/pth_barrier3.vgtest branches/DRDDEV/helgrind/tests/tc04_free_lock.stderr.exp-glibc25-amd64 branches/DRDDEV/helgrind/tests/tc09_bad_unlock.stderr.exp-glibc25-amd64 branches/DRDDEV/helgrind/tests/tc09_bad_unlock.stderr.exp-glibc27-amd64 branches/DRDDEV/helgrind/tests/tc20_verifywrap.stderr.exp-glibc25-amd64 branches/DRDDEV/helgrind/tests/tc20_verifywrap.stderr.exp-glibc27-amd64 branches/DRDDEV/helgrind/tests/tc20_verifywrap.stderr.exp-glibc28-amd64 branches/DRDDEV/helgrind/tests/tc22_exit_w_lock.stderr.exp-glibc25-x86 branches/DRDDEV/include/pub_tool_aspacemgr.h branches/DRDDEV/include/pub_tool_basics.h branches/DRDDEV/include/pub_tool_debuginfo.h branches/DRDDEV/include/pub_tool_machine.h branches/DRDDEV/include/pub_tool_options.h branches/DRDDEV/include/pub_tool_oset.h branches/DRDDEV/include/pub_tool_redir.h branches/DRDDEV/include/pub_tool_tooliface.h branches/DRDDEV/lackey/Makefile.am branches/DRDDEV/massif/Makefile.am branches/DRDDEV/massif/ms_main.c branches/DRDDEV/massif/tests/deep-D.post.exp branches/DRDDEV/memcheck/Makefile.am branches/DRDDEV/memcheck/docs/mc-manual.xml branches/DRDDEV/memcheck/mc_errors.c branches/DRDDEV/memcheck/mc_leakcheck.c branches/DRDDEV/memcheck/mc_main.c branches/DRDDEV/memcheck/mc_replace_strmem.c branches/DRDDEV/memcheck/tests/Makefile.am branches/DRDDEV/memcheck/tests/badjump.stderr.exp branches/DRDDEV/memcheck/tests/badjump2.stderr.exp branches/DRDDEV/memcheck/tests/brk2.stderr.exp branches/DRDDEV/memcheck/tests/brk2.vgtest branches/DRDDEV/memcheck/tests/buflen_check.stderr.exp2 branches/DRDDEV/memcheck/tests/execve.stderr.exp2 branches/DRDDEV/memcheck/tests/execve2.stderr.exp2 branches/DRDDEV/memcheck/tests/filter_xml branches/DRDDEV/memcheck/tests/fwrite.stderr.exp branches/DRDDEV/memcheck/tests/origin4-many.stderr.exp-glibc25-amd64 branches/DRDDEV/memcheck/tests/origin4-many.stderr.exp-glibc25-x86 branches/DRDDEV/memcheck/tests/origin5-bz2.c branches/DRDDEV/memcheck/tests/partiallydefinedeq.c branches/DRDDEV/memcheck/tests/supp_unknown.stderr.exp branches/DRDDEV/memcheck/tests/varinfo6.c branches/DRDDEV/memcheck/tests/vcpu_bz2.vgtest branches/DRDDEV/memcheck/tests/wrap5.c branches/DRDDEV/memcheck/tests/wrap8.c branches/DRDDEV/memcheck/tests/x86/Makefile.am branches/DRDDEV/memcheck/tests/xml1.stderr.exp2 branches/DRDDEV/memcheck/tests/xml1.stderr.exp3 branches/DRDDEV/memcheck/tests/xml1.stderr.exp64_2 branches/DRDDEV/nightly/README.txt branches/DRDDEV/nightly/bin/nightly branches/DRDDEV/nightly/conf/nemesis.sendmail branches/DRDDEV/none/Makefile.am branches/DRDDEV/none/tests/Makefile.am branches/DRDDEV/none/tests/amd64/insn_ssse3.vgtest branches/DRDDEV/none/tests/amd64/ssse3_misaligned.vgtest branches/DRDDEV/none/tests/blockfault.stderr.exp branches/DRDDEV/none/tests/execve.c branches/DRDDEV/none/tests/fdleak_creat.stderr.exp branches/DRDDEV/none/tests/fdleak_dup.stderr.exp branches/DRDDEV/none/tests/fdleak_dup.stderr.exp2 branches/DRDDEV/none/tests/fdleak_dup2.stderr.exp branches/DRDDEV/none/tests/fdleak_dup2.stderr.exp2 branches/DRDDEV/none/tests/fdleak_fcntl.stderr.exp branches/DRDDEV/none/tests/fdleak_fcntl.stderr.exp2 branches/DRDDEV/none/tests/fdleak_fcntl.stderr.exp3 branches/DRDDEV/none/tests/fdleak_open.stderr.exp branches/DRDDEV/none/tests/fdleak_pipe.stderr.exp branches/DRDDEV/none/tests/fdleak_socketpair.stderr.exp branches/DRDDEV/none/tests/filter_stderr branches/DRDDEV/none/tests/x86/Makefile.am branches/DRDDEV/none/tests/x86/bug137714-x86.c branches/DRDDEV/none/tests/x86/insn_ssse3.vgtest branches/DRDDEV/none/tests/x86/ssse3_misaligned.vgtest branches/DRDDEV/none/tests/x86/yield.c branches/DRDDEV/tests/Makefile.am branches/DRDDEV/tests/cputest.c branches/DRDDEV/tests/filter_libc branches/DRDDEV/tests/filter_stderr_basic branches/DRDDEV/valgrind.pc.in branches/DRDDEV/xfree-4.supp [... diff too large to include ...] |
|
From: <sv...@va...> - 2009-05-02 13:16:19
|
Author: bart Date: 2009-05-02 14:16:14 +0100 (Sat, 02 May 2009) New Revision: 9714 Log: Changed ADDR_IGNORED_BITS from 2 to 0. Modified: branches/DRDDEV/drd/drd_bitmap.h Modified: branches/DRDDEV/drd/drd_bitmap.h =================================================================== --- branches/DRDDEV/drd/drd_bitmap.h 2009-05-02 08:06:53 UTC (rev 9713) +++ branches/DRDDEV/drd/drd_bitmap.h 2009-05-02 13:16:14 UTC (rev 9714) @@ -51,7 +51,7 @@ /** Number of least significant address bits that are ignored. */ -#define ADDR_IGNORED_BITS 2 +#define ADDR_IGNORED_BITS 0 #define ADDR_IGNORED_MASK ((1U << ADDR_IGNORED_BITS) - 1U) /** Round argument a up to a multiple of (1 << ADDR_GRANULARITY), and next |
|
From: <sv...@va...> - 2009-05-02 08:07:05
|
Author: bart
Date: 2009-05-02 09:06:53 +0100 (Sat, 02 May 2009)
New Revision: 9713
Log:
Simplified client request handling.
Modified:
trunk/drd/drd_clientreq.c
Modified: trunk/drd/drd_clientreq.c
===================================================================
--- trunk/drd/drd_clientreq.c 2009-05-01 12:23:47 UTC (rev 9712)
+++ trunk/drd/drd_clientreq.c 2009-05-02 08:06:53 UTC (rev 9713)
@@ -91,16 +91,6 @@
}
break;
- case VG_USERREQ__CREATE_MEMPOOL:
- case VG_USERREQ__DESTROY_MEMPOOL:
- case VG_USERREQ__MEMPOOL_ALLOC:
- case VG_USERREQ__MEMPOOL_FREE:
- case VG_USERREQ__MEMPOOL_TRIM:
- case VG_USERREQ__MOVE_MEMPOOL:
- case VG_USERREQ__MEMPOOL_CHANGE:
- case VG_USERREQ__MEMPOOL_EXISTS:
- break;
-
case VG_USERREQ__DRD_GET_VALGRIND_THREAD_ID:
result = vg_tid;
break;
@@ -401,6 +391,11 @@
break;
default:
+#if 0
+ VG_(message)(Vg_DebugMsg, "Unrecognized client request 0x%lx 0x%lx",
+ arg[0], arg[1]);
+ tl_assert(0);
+#endif
return False;
}
|
|
From: Tom H. <th...@cy...> - 2009-05-02 02:53:23
|
Nightly build on lloyd ( x86_64, Fedora 7 ) started at 2009-05-02 03:05:04 BST Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... done Regression test results follow == 479 tests, 0 stderr failures, 0 stdout failures, 0 post failures == ================================================= == Results from 24 hours ago == ================================================= Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... done Regression test results follow == 478 tests, 0 stderr failures, 0 stdout failures, 0 post failures == ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short Sat May 2 03:24:37 2009 --- new.short Sat May 2 03:52:59 2009 *************** *** 8,10 **** ! == 478 tests, 0 stderr failures, 0 stdout failures, 0 post failures == --- 8,10 ---- ! == 479 tests, 0 stderr failures, 0 stdout failures, 0 post failures == |
|
From: Tom H. <th...@cy...> - 2009-05-02 02:27:49
|
Nightly build on mg ( x86_64, Fedora 9 ) started at 2009-05-02 03:10:05 BST Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 485 tests, 0 stderr failures, 1 stdout failure, 0 post failures == none/tests/linux/mremap2 (stdout) ================================================= == Results from 24 hours ago == ================================================= Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 484 tests, 0 stderr failures, 1 stdout failure, 0 post failures == none/tests/linux/mremap2 (stdout) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short Sat May 2 03:18:46 2009 --- new.short Sat May 2 03:27:26 2009 *************** *** 8,10 **** ! == 484 tests, 0 stderr failures, 1 stdout failure, 0 post failures == none/tests/linux/mremap2 (stdout) --- 8,10 ---- ! == 485 tests, 0 stderr failures, 1 stdout failure, 0 post failures == none/tests/linux/mremap2 (stdout) |
|
From: <sv...@va...> - 2009-05-02 00:00:45
|
Author: bart
Date: 2009-05-01 13:23:47 +0100 (Fri, 01 May 2009)
New Revision: 9712
Log:
Added support for the VG_USERREQ__MALLOCLIKE_BLOCK and VG_USERREQ__FREELIKE_BLOCK client requests.
Added:
trunk/drd/tests/custom_alloc.stderr.exp
trunk/drd/tests/custom_alloc.vgtest
Modified:
trunk/drd/drd_clientreq.c
trunk/drd/tests/Makefile.am
Modified: trunk/drd/drd_clientreq.c
===================================================================
--- trunk/drd/drd_clientreq.c 2009-05-01 12:21:39 UTC (rev 9711)
+++ trunk/drd/drd_clientreq.c 2009-05-01 12:23:47 UTC (rev 9712)
@@ -26,7 +26,9 @@
#include "drd_barrier.h"
#include "drd_clientreq.h"
#include "drd_cond.h"
+#include "drd_error.h"
#include "drd_load_store.h"
+#include "drd_malloc_wrappers.h"
#include "drd_mutex.h"
#include "drd_rwlock.h"
#include "drd_semaphore.h"
@@ -44,9 +46,8 @@
/* Local function declarations. */
-static
-Bool DRD_(handle_client_request)(ThreadId vg_tid, UWord* arg, UWord* ret);
-static Addr DRD_(highest_used_stack_address)(const ThreadId vg_tid);
+static Bool handle_client_request(ThreadId vg_tid, UWord* arg, UWord* ret);
+static Addr highest_used_stack_address(const ThreadId vg_tid);
/* Function definitions. */
@@ -57,15 +58,14 @@
*/
void DRD_(clientreq_init)(void)
{
- VG_(needs_client_requests)(DRD_(handle_client_request));
+ VG_(needs_client_requests)(handle_client_request);
}
/**
* DRD's handler for Valgrind client requests. The code below handles both
* DRD's public and tool-internal client requests.
*/
-static
-Bool DRD_(handle_client_request)(ThreadId vg_tid, UWord* arg, UWord* ret)
+static Bool handle_client_request(ThreadId vg_tid, UWord* arg, UWord* ret)
{
UWord result = 0;
const DrdThreadId drd_tid = DRD_(thread_get_running_tid)();
@@ -75,6 +75,32 @@
switch (arg[0])
{
+ case VG_USERREQ__MALLOCLIKE_BLOCK:
+ if (arg[1])
+ DRD_(malloclike_block)(vg_tid, arg[1]/*addr*/, arg[2]/*size*/);
+ break;
+
+ case VG_USERREQ__FREELIKE_BLOCK:
+ if (arg[1] && ! DRD_(freelike_block)(vg_tid, arg[1]/*addr*/))
+ {
+ VG_(maybe_record_error)(vg_tid,
+ GenericErr,
+ VG_(get_IP)(vg_tid),
+ "Invalid VG_USERREQ__FREELIKE_BLOCK request",
+ NULL);
+ }
+ break;
+
+ case VG_USERREQ__CREATE_MEMPOOL:
+ case VG_USERREQ__DESTROY_MEMPOOL:
+ case VG_USERREQ__MEMPOOL_ALLOC:
+ case VG_USERREQ__MEMPOOL_FREE:
+ case VG_USERREQ__MEMPOOL_TRIM:
+ case VG_USERREQ__MOVE_MEMPOOL:
+ case VG_USERREQ__MEMPOOL_CHANGE:
+ case VG_USERREQ__MEMPOOL_EXISTS:
+ break;
+
case VG_USERREQ__DRD_GET_VALGRIND_THREAD_ID:
result = vg_tid;
break;
@@ -93,7 +119,7 @@
case VG_USERREQ__DRD_SUPPRESS_CURRENT_STACK:
{
- const Addr topmost_sp = DRD_(highest_used_stack_address)(vg_tid);
+ const Addr topmost_sp = highest_used_stack_address(vg_tid);
#if 0
UInt nframes;
const UInt n_ips = 20;
@@ -375,9 +401,6 @@
break;
default:
- VG_(message)(Vg_DebugMsg, "Unrecognized client request 0x%lx 0x%lx",
- arg[0], arg[1]);
- tl_assert(0);
return False;
}
@@ -393,7 +416,7 @@
* in vgpreload_exp-drd-*.so or from the thread wrapper for a newly created
* thread. See also drd_pthread_intercepts.c.
*/
-static Addr DRD_(highest_used_stack_address)(const ThreadId vg_tid)
+static Addr highest_used_stack_address(const ThreadId vg_tid)
{
UInt nframes;
const UInt n_ips = 10;
Modified: trunk/drd/tests/Makefile.am
===================================================================
--- trunk/drd/tests/Makefile.am 2009-05-01 12:21:39 UTC (rev 9711)
+++ trunk/drd/tests/Makefile.am 2009-05-01 12:23:47 UTC (rev 9712)
@@ -27,6 +27,8 @@
circular_buffer.stderr.exp-with-atomic-builtins \
circular_buffer.stderr.exp-without-atomic-builtins \
circular_buffer.vgtest \
+ custom_alloc.vgtest \
+ custom_alloc.stderr.exp \
drd_bitmap_test.stderr.exp \
drd_bitmap_test.stdout.exp \
drd_bitmap_test.vgtest \
Added: trunk/drd/tests/custom_alloc.stderr.exp
===================================================================
--- trunk/drd/tests/custom_alloc.stderr.exp (rev 0)
+++ trunk/drd/tests/custom_alloc.stderr.exp 2009-05-01 12:23:47 UTC (rev 9712)
@@ -0,0 +1,3 @@
+
+
+ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
Added: trunk/drd/tests/custom_alloc.vgtest
===================================================================
--- trunk/drd/tests/custom_alloc.vgtest (rev 0)
+++ trunk/drd/tests/custom_alloc.vgtest 2009-05-01 12:23:47 UTC (rev 9712)
@@ -0,0 +1 @@
+prog: ../../memcheck/tests/custom_alloc
|