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
(5) |
2
(3) |
|
3
(2) |
4
(3) |
5
(16) |
6
(8) |
7
(6) |
8
(2) |
9
(4) |
|
10
(10) |
11
(22) |
12
(7) |
13
(10) |
14
(11) |
15
(8) |
16
(6) |
|
17
(11) |
18
|
19
(6) |
20
(8) |
21
(5) |
22
(11) |
23
(6) |
|
24
(1) |
25
(6) |
26
(4) |
27
(2) |
28
(1) |
29
|
30
(2) |
|
31
(5) |
|
|
|
|
|
|
|
From: <sv...@va...> - 2015-05-14 22:37:38
|
Author: philippe
Date: Thu May 14 23:37:30 2015
New Revision: 15234
Log:
* add some comments in stack_limits
* add UNLIKELY indications for unlikely conditions
No functional difference.
Modified:
trunk/coregrind/m_stacks.c
Modified: trunk/coregrind/m_stacks.c
==============================================================================
--- trunk/coregrind/m_stacks.c (original)
+++ trunk/coregrind/m_stacks.c Thu May 14 23:37:30 2015
@@ -272,7 +272,7 @@
Stack* stack = find_stack_by_addr(SP);
NSegment const *stackseg = VG_(am_find_nsegment) (SP);
- if (stack) {
+ if (LIKELY(stack)) {
*start = stack->start;
*end = stack->end;
}
@@ -284,7 +284,7 @@
stack for SP, and set *start and *end to 0.
Otherwise, possibly reduce the stack limits using the boundaries of
the RW segment/SkResvn segments containing SP. */
- if (stackseg == NULL) {
+ if (UNLIKELY(stackseg == NULL)) {
VG_(debugLog)(2, "stacks",
"no addressable segment for SP %p\n",
(void*)SP);
@@ -293,8 +293,8 @@
return;
}
- if ((!stackseg->hasR || !stackseg->hasW)
- && (stackseg->kind != SkResvn || stackseg->smode != SmUpper)) {
+ if (UNLIKELY((!stackseg->hasR || !stackseg->hasW)
+ && (stackseg->kind != SkResvn || stackseg->smode != SmUpper))) {
VG_(debugLog)(2, "stacks",
"segment for SP %p is not RW or not a SmUpper Resvn\n",
(void*)SP);
@@ -303,8 +303,9 @@
return;
}
- // SP is in a RW segment, or in the SkResvn of an extensible stack.
- if (*start < stackseg->start) {
+ /* SP is in a RW segment, or in the SkResvn of an extensible stack.
+ We can use the seg start as the stack start limit. */
+ if (UNLIKELY(*start < stackseg->start)) {
VG_(debugLog)(2, "stacks",
"segment for SP %p changed stack start limit"
" from %p to %p\n",
@@ -312,7 +313,10 @@
*start = stackseg->start;
}
- if (stackseg->kind == SkResvn) {
+ /* Now, determine the stack end limit. If the stackseg is SkResvn,
+ we need to get the neighbour segment (towards higher addresses).
+ This segment must be anonymous and RW. */
+ if (UNLIKELY(stackseg->kind == SkResvn)) {
stackseg = VG_(am_next_nsegment)(stackseg, /*forward*/ True);
if (!stackseg || !stackseg->hasR || !stackseg->hasW
|| stackseg->kind != SkAnonC) {
@@ -326,7 +330,8 @@
}
}
- if (*end > stackseg->end) {
+ /* Limit the stack end limit, using the found segment. */
+ if (UNLIKELY(*end > stackseg->end)) {
VG_(debugLog)(2, "stacks",
"segment for SP %p changed stack end limit"
" from %p to %p\n",
@@ -336,7 +341,7 @@
/* If reducing start and/or end to the SP segment gives an
empty range, return 'empty' limits */
- if (*start > *end) {
+ if (UNLIKELY(*start > *end)) {
VG_(debugLog)(2, "stacks",
"stack for SP %p start %p after end %p\n",
(void*)SP, (void*)*start, (void*)end);
|
|
From: Carl E. L. <ce...@us...> - 2015-05-14 22:07:31
|
On Mon, 2015-05-11 at 12:14 -0500, Will Schmidt wrote:
> Add a .exp for the tc06_two_races_xml for power.
> This is specifically to cover the last line of output as
> seen on ppc64BE, which is "ERROR SUMMARY: X errors from 3 contexts",
> where X is 6, versus 3 as seen on other architectures.
> The additional errors show up on BE during the "Thread #1: pthread_cond
> _destroy: destruction of condition variable being waited upon."
>
> Signed-off-by: Will Schmidt <wil...@vn...>
>
> --
>
> I did do some experimentation with filters for this change. Though I could
> squash the 3/6 values down to 0 to match, it would affect a number of other
> tests, and seemed rather invasive. I'm going with this as the most
> straightforward fix.
> ---
> helgrind/tests/Makefile.am | 1
> .../tests/pth_cond_destroy_busy.stderr.exp-ppc64 | 50 ++++++++++++++++++++
Will:
The first line of your message says "Add a .exp for the
tc06_two_races_xml.." but the expect file you are adding is for
"pth_cond_destroy_busy.stderr.exp-ppc64" I am guessing the first line
of your message was in error?
Just want to make sure I am not missing something here.
Carl Love
> 2 files changed, 51 insertions(+)
> create mode 100644 helgrind/tests/pth_cond_destroy_busy.stderr.exp-ppc64
>
> diff --git a/helgrind/tests/Makefile.am b/helgrind/tests/Makefile.am
> index e3dff80..c8409e1 100644
> --- a/helgrind/tests/Makefile.am
> +++ b/helgrind/tests/Makefile.am
> @@ -46,6 +46,7 @@ EXTRA_DIST = \
> pth_destroy_cond.vgtest \
> pth_destroy_cond.stdout.exp pth_destroy_cond.stderr.exp \
> pth_cond_destroy_busy.vgtest pth_cond_destroy_busy.stderr.exp \
> + pth_cond_destroy_busy.stderr.exp-ppc64 \
> pth_spinlock.vgtest pth_spinlock.stdout.exp pth_spinlock.stderr.exp \
> rwlock_race.vgtest rwlock_race.stdout.exp rwlock_race.stderr.exp \
> rwlock_test.vgtest rwlock_test.stdout.exp rwlock_test.stderr.exp \
> diff --git a/helgrind/tests/pth_cond_destroy_busy.stderr.exp-ppc64 b/helgrind/tests/pth_cond_destroy_busy.stderr.exp-ppc64
> new file mode 100644
> index 0000000..2da688e
> --- /dev/null
> +++ b/helgrind/tests/pth_cond_destroy_busy.stderr.exp-ppc64
> @@ -0,0 +1,50 @@
> +
> +---Thread-Announcement------------------------------------------
> +
> +Thread #x is the program's root thread
> +
> +---Thread-Announcement------------------------------------------
> +
> +Thread #x was created
> + ...
> + by 0x........: pthread_create@* (hg_intercepts.c:...)
> + by 0x........: main (pth_cond_destroy_busy.c:45)
> +
> +----------------------------------------------------------------
> +
> +Possible data race during read of size 1 at 0x........ by thread #x
> +Locks held: none
> + at 0x........: my_memcmp (hg_intercepts.c:...)
> + by 0x........: pthread_cond_destroy_WRK (hg_intercepts.c:...)
> + by 0x........: pthread_cond_destroy@* (hg_intercepts.c:...)
> + by 0x........: main (pth_cond_destroy_busy.c:52)
> +
> +This conflicts with a previous write of size 4 by thread #x
> +Locks held: none
> + ...
> + by 0x........: pthread_cond_wait_WRK (hg_intercepts.c:...)
> + by 0x........: pthread_cond_wait@* (hg_intercepts.c:...)
> + by 0x........: thread_func (pth_cond_destroy_busy.c:31)
> + by 0x........: mythread_wrapper (hg_intercepts.c:...)
> + ...
> + Address 0x........ is 4 bytes inside data symbol "s_cond"
> +
> +----------------------------------------------------------------
> +
> +Thread #x: pthread_cond_destroy: destruction of condition variable being waited upon
> + at 0x........: pthread_cond_destroy_WRK (hg_intercepts.c:...)
> + by 0x........: pthread_cond_destroy@* (hg_intercepts.c:...)
> + by 0x........: main (pth_cond_destroy_busy.c:52)
> +
> +----------------------------------------------------------------
> +
> +Thread #x's call to pthread_cond_destroy failed
> + with error code 16 (EBUSY: Device or resource busy)
> + at 0x........: pthread_cond_destroy_WRK (hg_intercepts.c:...)
> + by 0x........: pthread_cond_destroy@* (hg_intercepts.c:...)
> + by 0x........: main (pth_cond_destroy_busy.c:52)
> +
> +First pthread_cond_destroy() call returned EBUSY.
> +Second pthread_cond_destroy() call returned success.
> +
> +ERROR SUMMARY: 6 errors from 3 contexts (suppressed: 0 from 0)
>
|
|
From: <sv...@va...> - 2015-05-14 21:53:07
|
Author: carll
Date: Thu May 14 22:52:59 2015
New Revision: 15233
Log:
Patch 4 in a revised series of cleanup patches from Will Schmidt
Add a suppression to handle a "Jump to the invalid address..." message
that gets generated on power. This is a variation of the existing
suppressions.
While here, I also updated the "prog:" line in the vgtest file to reference
the supp_unknown executable, versus the badjump executable. They share the
same source code, so I think this is effectively cosmetic.
This patch fixes Vagrind bugzilla 347686
Modified:
trunk/memcheck/tests/supp_unknown.supp
trunk/memcheck/tests/supp_unknown.vgtest
Modified: trunk/memcheck/tests/supp_unknown.supp
==============================================================================
--- trunk/memcheck/tests/supp_unknown.supp (original)
+++ trunk/memcheck/tests/supp_unknown.supp Thu May 14 22:52:59 2015
@@ -13,3 +13,10 @@
fun:main
}
+{
+ <insert_a_suppression_name_here>
+ Memcheck:Jump
+ obj:*
+ fun:generic_start_main.isra.0
+ fun:(below main)
+}
Modified: trunk/memcheck/tests/supp_unknown.vgtest
==============================================================================
--- trunk/memcheck/tests/supp_unknown.vgtest (original)
+++ trunk/memcheck/tests/supp_unknown.vgtest Thu May 14 22:52:59 2015
@@ -1,4 +1,4 @@
vgopts: -q --suppressions=supp_unknown.supp
-prog: badjump
+prog: supp_unknown
cleanup: rm -f vgcore.*
stderr_filter_args: badjump.c
|
|
From: <sv...@va...> - 2015-05-14 21:26:43
|
Author: philippe
Date: Thu May 14 22:26:36 2015
New Revision: 15232
Log:
avoid warning
m_xarray.c:133:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
(I have double checked that passing a negative argument makes the
assert fail)
Modified:
trunk/coregrind/m_xarray.c
Modified: trunk/coregrind/m_xarray.c
==============================================================================
--- trunk/coregrind/m_xarray.c (original)
+++ trunk/coregrind/m_xarray.c Thu May 14 22:26:36 2015
@@ -128,9 +128,10 @@
inline void* VG_(indexXA) ( const XArray* xa, Word n )
{
vg_assert(xa);
- // vg_assert(n >= 0); If n negative, the UWord conversion will make
- // it bigger than usedsizeE.
- vg_assert((UWord)n < xa->usedsizeE);
+ /* vg_assert(n >= 0); If n negative, the UWord conversion will make
+ it bigger than usedsizeE, which is verified to be non negative when
+ xa is modified. */
+ vg_assert((UWord)n < (UWord)xa->usedsizeE);
return ((char*)xa->arr) + n * xa->elemSzB;
}
|
|
From: <sv...@va...> - 2015-05-14 21:05:56
|
Author: philippe
Date: Thu May 14 22:05:49 2015
New Revision: 15231
Log:
Add the lwpid in the scheduler status information
E.g. we now have:
Thread 1: status = VgTs_Runnable (lwpid 15782)
==15782== at 0x8048EB5: main (sleepers.c:188)
client stack range: [0xBE836000 0xBE839FFF] client SP: 0xBE838F80
valgrind stack top usage: 10264 of 1048576
Thread 2: status = VgTs_WaitSys (lwpid 15828)
==15782== at 0x2E9451: ??? (syscall-template.S:82)
==15782== by 0x8048AD3: sleeper_or_burner (sleepers.c:84)
==15782== by 0x39B924: start_thread (pthread_create.c:297)
==15782== by 0x2F107D: clone (clone.S:130)
client stack range: [0x442F000 0x4E2EFFF] client SP: 0x4E2E338
valgrind stack top usage: 2288 of 1048576
This allows to attach with GDB to the good lwpid in case
you want to examine the valgrind state rather than the guest state.
(it is needed to attach to the specific lwpid as valgrind is not
linked with lib pthread, so GDB cannot discover the threads
of the process).
Modified:
trunk/coregrind/m_libcassert.c
Modified: trunk/coregrind/m_libcassert.c
==============================================================================
--- trunk/coregrind/m_libcassert.c (original)
+++ trunk/coregrind/m_libcassert.c Thu May 14 22:05:49 2015
@@ -369,8 +369,9 @@
has exited, then valgrind_stack_base points to the stack base. */
if (VG_(threads)[i].status == VgTs_Empty
&& (!exited_threads || stack == 0)) continue;
- VG_(printf)("\nThread %d: status = %s\n", i,
- VG_(name_of_ThreadStatus)(VG_(threads)[i].status) );
+ VG_(printf)("\nThread %d: status = %s (lwpid %d)\n", i,
+ VG_(name_of_ThreadStatus)(VG_(threads)[i].status),
+ VG_(threads)[i].os_state.lwpid);
if (VG_(threads)[i].status != VgTs_Empty)
VG_(get_and_pp_StackTrace)( i, BACKTRACE_DEPTH );
if (stack_usage && VG_(threads)[i].client_stack_highest_byte != 0 ) {
@@ -388,8 +389,8 @@
if (stack_usage && stack != 0)
VG_(printf)("valgrind stack top usage: %ld of %ld\n",
VG_(clo_valgrind_stacksize)
- - VG_(am_get_VgStack_unused_szB)(stack,
- VG_(clo_valgrind_stacksize)),
+ - VG_(am_get_VgStack_unused_szB)
+ (stack, VG_(clo_valgrind_stacksize)),
(SizeT) VG_(clo_valgrind_stacksize));
}
VG_(printf)("\n");
|
|
From: Philippe W. <phi...@sk...> - 2015-05-14 20:27:53
|
The patch below aims at allowing a backtrace when Valgrind does
client syscalls.
Doing a test on x86 (running sleep 100 under valgrind),
I see that backtraces are already working on x86 with GDB 7.7.
(gdb) bt
#0 vgModuleLocal_do_syscall_for_client_WRK () at m_syswrap/syscall-x86-linux.S:117
#1 0x3807f5fe in do_syscall_for_client (syscall_mask=<optimized out>, tst=<optimized out>, syscallno=<optimized out>)
at m_syswrap/syswrap-main.c:313
#2 vgPlain_client_syscall (tid=0, trc=77) at m_syswrap/syswrap-main.c:1743
#3 0x3807c351 in handle_syscall (tid=4294966780, tid@entry=1, trc=134538532) at m_scheduler/scheduler.c:1099
#4 0x3807da27 in vgPlain_scheduler (tid=1) at m_scheduler/scheduler.c:1413
#5 0x3808b6d2 in thread_wrapper (tidW=<optimized out>) at m_syswrap/syswrap-linux.c:102
#6 run_a_thread_NORETURN (tidW=1) at m_syswrap/syswrap-linux.c:155
#7 0x00000000 in ?? ()
(gdb)
On amd64, GDB 7.7 also succeeds to make a backtrace (but containing
strange program counters) :
(gdb) bt
#0 vgModuleLocal_do_syscall_for_client_WRK () at m_syswrap/syscall-amd64-linux.S:147
#1 0x0000000000000008 in ?? ()
#2 0x000000080308bdd0 in ?? ()
#3 0x000000080308bd90 in ?? ()
#4 0x00000008020083a0 in ?? ()
#5 0x0000000000000023 in ?? ()
#6 0x00000008023844a8 in ?? ()
#7 0x00000008023844f0 in ?? ()
#8 0x0000000000000023 in ?? ()
#9 0x0000000000000001 in ?? ()
#10 0x0000000802008390 in ?? ()
#11 0x0000000802384460 in ?? ()
#12 0x0000000038090f72 in do_syscall_for_client (syscall_mask=0x80308bd90, tst=0x802008390, syscallno=35) at m_syswrap/syswrap-main.c:313
#13 vgPlain_client_syscall (tid=tid@entry=1, trc=trc@entry=73) at m_syswrap/syswrap-main.c:1743
#14 0x000000003808d943 in handle_syscall (tid=tid@entry=1, trc=73) at m_scheduler/scheduler.c:1099
....
Is the patch improving the above (for x86 and/or amd64) ?
Or is the backtrace not working at all in your environment ?
Which GDB version are you using ?
Thanks
Philippe
On Thu, 2015-05-14 at 21:20 +0200, Matthias Schwarzott wrote:
> These allow to attach gdb and see the backtrace while valgrind is doing a syscall.
> ---
> coregrind/m_syswrap/syscall-amd64-linux.S | 59 ++++++++++++++++++++++++-------
> coregrind/m_syswrap/syscall-x86-linux.S | 15 ++++++++
> 2 files changed, 61 insertions(+), 13 deletions(-)
>
> diff --git a/coregrind/m_syswrap/syscall-amd64-linux.S b/coregrind/m_syswrap/syscall-amd64-linux.S
> index 0810b54..9498b98 100644
> --- a/coregrind/m_syswrap/syscall-amd64-linux.S
> +++ b/coregrind/m_syswrap/syscall-amd64-linux.S
> @@ -77,29 +77,46 @@
>
> .globl ML_(do_syscall_for_client_WRK)
> ML_(do_syscall_for_client_WRK):
> + .cfi_startproc
> /* save callee-saved regs */
> pushq %rbx
> + .cfi_adjust_cfa_offset 8
> pushq %rbp
> + .cfi_adjust_cfa_offset 8
> pushq %r12
> + .cfi_adjust_cfa_offset 8
> pushq %r13
> + .cfi_adjust_cfa_offset 8
> pushq %r14
> + .cfi_adjust_cfa_offset 8
> pushq %r15
> + .cfi_adjust_cfa_offset 8
>
> #define FSZ ((4+1)*4) /* 4 args + ret addr */
>
> -#define PUSH_di_si_dx_cx_8 \
> - pushq %rdi ; \
> - pushq %rsi ; \
> - pushq %rdx ; \
> - pushq %rcx ; \
> - pushq %r8
> -
> -#define POP_di_si_dx_cx_8 \
> - popq %r8 ; \
> - popq %rcx ; \
> - popq %rdx ; \
> - popq %rsi ; \
> - popq %rdi
> +#define PUSH_di_si_dx_cx_8 \
> + pushq %rdi ; \
> + .cfi_adjust_cfa_offset 8 ; \
> + pushq %rsi ; \
> + .cfi_adjust_cfa_offset 8 ; \
> + pushq %rdx ; \
> + .cfi_adjust_cfa_offset 8 ; \
> + pushq %rcx ; \
> + .cfi_adjust_cfa_offset 8 ; \
> + pushq %r8 ; \
> + .cfi_adjust_cfa_offset 8
> +
> +#define POP_di_si_dx_cx_8 \
> + popq %r8 ; \
> + .cfi_adjust_cfa_offset -8 ; \
> + popq %rcx ; \
> + .cfi_adjust_cfa_offset -8 ; \
> + popq %rdx ; \
> + .cfi_adjust_cfa_offset -8 ; \
> + popq %rsi ; \
> + .cfi_adjust_cfa_offset -8 ; \
> + popq %rdi ; \
> + .cfi_adjust_cfa_offset -8
>
> 1: /* Even though we can't take a signal until the sigprocmask completes,
> start the range early.
> @@ -129,6 +146,7 @@ ML_(do_syscall_for_client_WRK):
>
> movq %rsi, %rax /* rax --> VexGuestAMD64State * */
> pushq %rdi /* syscallno -> stack */
> + .cfi_adjust_cfa_offset 8
> movq OFFSET_amd64_RDI(%rax), %rdi
> movq OFFSET_amd64_RSI(%rax), %rsi
> movq OFFSET_amd64_RDX(%rax), %rdx
> @@ -136,6 +154,7 @@ ML_(do_syscall_for_client_WRK):
> movq OFFSET_amd64_R8(%rax), %r8
> movq OFFSET_amd64_R9(%rax), %r9
> popq %rax /* syscallno -> %rax */
> + .cfi_adjust_cfa_offset -8
>
> /* If rip==2, then the syscall was either just about
> to start, or was interrupted and the kernel was
> @@ -168,24 +187,38 @@ ML_(do_syscall_for_client_WRK):
> 5: /* now safe from signals */
> movq $0, %rax /* SUCCESS */
> popq %r15
> + .cfi_adjust_cfa_offset -8
> popq %r14
> + .cfi_adjust_cfa_offset -8
> popq %r13
> + .cfi_adjust_cfa_offset -8
> popq %r12
> + .cfi_adjust_cfa_offset -8
> popq %rbp
> + .cfi_adjust_cfa_offset -8
> popq %rbx
> + .cfi_adjust_cfa_offset -8
> ret
> + .cfi_adjust_cfa_offset 6*8
>
> 7: /* failure: return 0x8000 | error code */
> negq %rax
> andq $0x7FFF, %rax
> orq $0x8000, %rax
> popq %r15
> + .cfi_adjust_cfa_offset -8
> popq %r14
> + .cfi_adjust_cfa_offset -8
> popq %r13
> + .cfi_adjust_cfa_offset -8
> popq %r12
> + .cfi_adjust_cfa_offset -8
> popq %rbp
> + .cfi_adjust_cfa_offset -8
> popq %rbx
> + .cfi_adjust_cfa_offset -8
> ret
> + .cfi_endproc
> #undef FSZ
>
> .section .rodata
> diff --git a/coregrind/m_syswrap/syscall-x86-linux.S b/coregrind/m_syswrap/syscall-x86-linux.S
> index 78b3df4..fc8d792 100644
> --- a/coregrind/m_syswrap/syscall-x86-linux.S
> +++ b/coregrind/m_syswrap/syscall-x86-linux.S
> @@ -78,11 +78,16 @@
>
> .globl ML_(do_syscall_for_client_WRK)
> ML_(do_syscall_for_client_WRK):
> + .cfi_startproc
> /* save callee-saved regs */
> push %esi
> + .cfi_adjust_cfa_offset 4
> push %edi
> + .cfi_adjust_cfa_offset 4
> push %ebx
> + .cfi_adjust_cfa_offset 4
> push %ebp
> + .cfi_adjust_cfa_offset 4
> #define FSZ ((4+1)*4) /* 4 args + ret addr */
>
> 1: /* Even though we can't take a signal until the sigprocmask completes,
> @@ -131,20 +136,30 @@ ML_(do_syscall_for_client_WRK):
> 5: /* now safe from signals */
> movl $0, %eax /* SUCCESS */
> popl %ebp
> + .cfi_adjust_cfa_offset -4
> popl %ebx
> + .cfi_adjust_cfa_offset -4
> popl %edi
> + .cfi_adjust_cfa_offset -4
> popl %esi
> + .cfi_adjust_cfa_offset -4
> ret
> + .cfi_adjust_cfa_offset 4*4
>
> 7: /* failure: return 0x8000 | error code */
> negl %eax
> andl $0x7FFF, %eax
> orl $0x8000, %eax
> popl %ebp
> + .cfi_adjust_cfa_offset -4
> popl %ebx
> + .cfi_adjust_cfa_offset -4
> popl %edi
> + .cfi_adjust_cfa_offset -4
> popl %esi
> + .cfi_adjust_cfa_offset -4
> ret
> + .cfi_endproc
> #undef FSZ
>
>
|
|
From: <sv...@va...> - 2015-05-14 19:56:54
|
Author: philippe
Date: Thu May 14 20:56:47 2015
New Revision: 15230
Log:
Implement 'qXfer:exec-file:read' packet in Valgrind gdbserver.
Thanks to this packet, with recent GDB (>= 7.9.50.20150514-cvs), the
command 'target remote' will automatically load the executable file of
the process running under Valgrind. This means you do not need to
specify the executable file yourself, GDB will discover it itself.
See GDB documentation about 'qXfer:exec-file:read' packet for more
info.
Modified:
trunk/NEWS
trunk/coregrind/m_gdbserver/server.c
Modified: trunk/NEWS
==============================================================================
--- trunk/NEWS (original)
+++ trunk/NEWS Thu May 14 20:56:47 2015
@@ -48,6 +48,14 @@
* Valgrind can be built with Intel's ICC compiler. The required
compiler version is 14.0 or later.
+* New and modified GDB server monitor features:
+
+ - With recent GDB (>= 7.9.50.20150514-cvs), the command 'target remote'
+ will automatically load the executable file of the process running
+ under Valgrind. This means you do not need to specify the executable
+ file yourself, GDB will discover it itself.
+ See GDB documentation about 'qXfer:exec-file:read' packet for more info.
+
* ==================== FIXED BUGS ====================
The following bugs have been fixed or resolved. Note that "n-i-bz"
Modified: trunk/coregrind/m_gdbserver/server.c
==============================================================================
--- trunk/coregrind/m_gdbserver/server.c (original)
+++ trunk/coregrind/m_gdbserver/server.c Thu May 14 20:56:47 2015
@@ -916,6 +916,63 @@
return;
}
+ if (strncmp ("qXfer:exec-file:read:", arg_own_buf, 21) == 0) {
+ unsigned char *data;
+ int n;
+ CORE_ADDR ofs;
+ unsigned int len;
+ const char *annex;
+ unsigned long pid;
+ const HChar *name;
+
+ /* Reject any annex; grab the offset and length. */
+ if (decode_xfer_read (arg_own_buf + 21, &annex, &ofs, &len) < 0) {
+ strcpy (arg_own_buf, "E00");
+ return;
+ }
+
+ if (strlen(annex) > 0)
+ pid = strtoul (annex, NULL, 16);
+ else
+ pid = 0;
+ if ((int)pid != VG_(getpid)() && pid != 0) {
+ VG_(sprintf) (arg_own_buf,
+ "E.Valgrind gdbserver pid is %d."
+ " Cannot give info for pid %d",
+ VG_(getpid)(), (int) pid);
+ return;
+ }
+
+ if (len > PBUFSIZ - 2)
+ len = PBUFSIZ - 2;
+ data = malloc (len);
+
+ if (!VG_(resolve_filename)(VG_(cl_exec_fd), &name)) {
+ VG_(sprintf) (arg_own_buf,
+ "E.Valgrind gdbserver could not"
+ " resolve pid %d exec filename.",
+ VG_(getpid)());
+ return;
+ }
+
+ if (ofs >= strlen(name))
+ n = -1;
+ else {
+ n = strlen(name) - ofs;
+ VG_(memcpy) (data, name, n);
+ }
+
+ if (n < 0)
+ write_enn (arg_own_buf);
+ else if (n > len)
+ *new_packet_len_p = write_qxfer_response (arg_own_buf, data, len, 1);
+ else
+ *new_packet_len_p = write_qxfer_response (arg_own_buf, data, n, 0);
+
+ free (data);
+
+ return;
+ }
/* Protocol features query. */
if (strncmp ("qSupported", arg_own_buf, 10) == 0
@@ -923,7 +980,7 @@
VG_(sprintf) (arg_own_buf, "PacketSize=%x", PBUFSIZ - 1);
/* Note: max packet size including frame and checksum, but without
trailing null byte, which is not sent/received. */
-
+
strcat (arg_own_buf, ";QStartNoAckMode+");
strcat (arg_own_buf, ";QPassSignals+");
if (VG_(client_auxv))
@@ -942,6 +999,7 @@
not properly connect. */
initialize_shadow_low(False);
}
+ strcat (arg_own_buf, ";qXfer:exec-file:read+");
return;
}
|
|
From: Matthias S. <zz...@ge...> - 2015-05-14 19:22:10
|
These allow to attach gdb and see the backtrace while valgrind is doing a syscall. --- coregrind/m_syswrap/syscall-amd64-linux.S | 59 ++++++++++++++++++++++++------- coregrind/m_syswrap/syscall-x86-linux.S | 15 ++++++++ 2 files changed, 61 insertions(+), 13 deletions(-) diff --git a/coregrind/m_syswrap/syscall-amd64-linux.S b/coregrind/m_syswrap/syscall-amd64-linux.S index 0810b54..9498b98 100644 --- a/coregrind/m_syswrap/syscall-amd64-linux.S +++ b/coregrind/m_syswrap/syscall-amd64-linux.S @@ -77,29 +77,46 @@ .globl ML_(do_syscall_for_client_WRK) ML_(do_syscall_for_client_WRK): + .cfi_startproc /* save callee-saved regs */ pushq %rbx + .cfi_adjust_cfa_offset 8 pushq %rbp + .cfi_adjust_cfa_offset 8 pushq %r12 + .cfi_adjust_cfa_offset 8 pushq %r13 + .cfi_adjust_cfa_offset 8 pushq %r14 + .cfi_adjust_cfa_offset 8 pushq %r15 + .cfi_adjust_cfa_offset 8 #define FSZ ((4+1)*4) /* 4 args + ret addr */ -#define PUSH_di_si_dx_cx_8 \ - pushq %rdi ; \ - pushq %rsi ; \ - pushq %rdx ; \ - pushq %rcx ; \ - pushq %r8 - -#define POP_di_si_dx_cx_8 \ - popq %r8 ; \ - popq %rcx ; \ - popq %rdx ; \ - popq %rsi ; \ - popq %rdi +#define PUSH_di_si_dx_cx_8 \ + pushq %rdi ; \ + .cfi_adjust_cfa_offset 8 ; \ + pushq %rsi ; \ + .cfi_adjust_cfa_offset 8 ; \ + pushq %rdx ; \ + .cfi_adjust_cfa_offset 8 ; \ + pushq %rcx ; \ + .cfi_adjust_cfa_offset 8 ; \ + pushq %r8 ; \ + .cfi_adjust_cfa_offset 8 + +#define POP_di_si_dx_cx_8 \ + popq %r8 ; \ + .cfi_adjust_cfa_offset -8 ; \ + popq %rcx ; \ + .cfi_adjust_cfa_offset -8 ; \ + popq %rdx ; \ + .cfi_adjust_cfa_offset -8 ; \ + popq %rsi ; \ + .cfi_adjust_cfa_offset -8 ; \ + popq %rdi ; \ + .cfi_adjust_cfa_offset -8 1: /* Even though we can't take a signal until the sigprocmask completes, start the range early. @@ -129,6 +146,7 @@ ML_(do_syscall_for_client_WRK): movq %rsi, %rax /* rax --> VexGuestAMD64State * */ pushq %rdi /* syscallno -> stack */ + .cfi_adjust_cfa_offset 8 movq OFFSET_amd64_RDI(%rax), %rdi movq OFFSET_amd64_RSI(%rax), %rsi movq OFFSET_amd64_RDX(%rax), %rdx @@ -136,6 +154,7 @@ ML_(do_syscall_for_client_WRK): movq OFFSET_amd64_R8(%rax), %r8 movq OFFSET_amd64_R9(%rax), %r9 popq %rax /* syscallno -> %rax */ + .cfi_adjust_cfa_offset -8 /* If rip==2, then the syscall was either just about to start, or was interrupted and the kernel was @@ -168,24 +187,38 @@ ML_(do_syscall_for_client_WRK): 5: /* now safe from signals */ movq $0, %rax /* SUCCESS */ popq %r15 + .cfi_adjust_cfa_offset -8 popq %r14 + .cfi_adjust_cfa_offset -8 popq %r13 + .cfi_adjust_cfa_offset -8 popq %r12 + .cfi_adjust_cfa_offset -8 popq %rbp + .cfi_adjust_cfa_offset -8 popq %rbx + .cfi_adjust_cfa_offset -8 ret + .cfi_adjust_cfa_offset 6*8 7: /* failure: return 0x8000 | error code */ negq %rax andq $0x7FFF, %rax orq $0x8000, %rax popq %r15 + .cfi_adjust_cfa_offset -8 popq %r14 + .cfi_adjust_cfa_offset -8 popq %r13 + .cfi_adjust_cfa_offset -8 popq %r12 + .cfi_adjust_cfa_offset -8 popq %rbp + .cfi_adjust_cfa_offset -8 popq %rbx + .cfi_adjust_cfa_offset -8 ret + .cfi_endproc #undef FSZ .section .rodata diff --git a/coregrind/m_syswrap/syscall-x86-linux.S b/coregrind/m_syswrap/syscall-x86-linux.S index 78b3df4..fc8d792 100644 --- a/coregrind/m_syswrap/syscall-x86-linux.S +++ b/coregrind/m_syswrap/syscall-x86-linux.S @@ -78,11 +78,16 @@ .globl ML_(do_syscall_for_client_WRK) ML_(do_syscall_for_client_WRK): + .cfi_startproc /* save callee-saved regs */ push %esi + .cfi_adjust_cfa_offset 4 push %edi + .cfi_adjust_cfa_offset 4 push %ebx + .cfi_adjust_cfa_offset 4 push %ebp + .cfi_adjust_cfa_offset 4 #define FSZ ((4+1)*4) /* 4 args + ret addr */ 1: /* Even though we can't take a signal until the sigprocmask completes, @@ -131,20 +136,30 @@ ML_(do_syscall_for_client_WRK): 5: /* now safe from signals */ movl $0, %eax /* SUCCESS */ popl %ebp + .cfi_adjust_cfa_offset -4 popl %ebx + .cfi_adjust_cfa_offset -4 popl %edi + .cfi_adjust_cfa_offset -4 popl %esi + .cfi_adjust_cfa_offset -4 ret + .cfi_adjust_cfa_offset 4*4 7: /* failure: return 0x8000 | error code */ negl %eax andl $0x7FFF, %eax orl $0x8000, %eax popl %ebp + .cfi_adjust_cfa_offset -4 popl %ebx + .cfi_adjust_cfa_offset -4 popl %edi + .cfi_adjust_cfa_offset -4 popl %esi + .cfi_adjust_cfa_offset -4 ret + .cfi_endproc #undef FSZ -- 2.4.0 |
|
From: Carl E. L. <ce...@us...> - 2015-05-14 18:02:22
|
On Mon, 2015-05-11 at 12:13 -0500, Will Schmidt wrote:
> Add a tc06_two_races_xml exp output for ppc64. This differs from the
> existing .exp in that does not contain the pthread_create_WRK entry frame.
> Note that the filter_stderr helper also removes the pthread_create_WRK
> content, so I believe this to be an extension of that change.
>
> Signed-off-by: Will Schmidt <wil...@vn...>
Will:
When I checked this test on my Power 7 box, the test passes. I looked
at the nightly regression test results for Power 7 and it fails. I also
see it failing on Power 8. I spent a fair bit of time digging into the
test and feel like there is something here we don't understand. My
concern is adding the expect file for this test might be covering up
something more fundamental. In my digging, I found that on the power 8
machine I wasn't able to find the glibc debug info but it was present on
the power 7 box I was using. Not sure if this is the root cause or not.
I was pursuing that on the thought that there might be an issue with
Valgrind/Helgrind in wrapping the pthread_create calls. I have seen
issues in the past with Valgrind not wrapping functions correctly
because the library name on Power 8 changed (due to the API difference
for LE). Still not sure if that might be part of the issue here or
not.
The bottom line is I think we need to investigate this test failure more
to make sure adding an additional expect file is really the right thing
to do.
Carl Love
> --
> ---
> helgrind/tests/Makefile.am | 2
> helgrind/tests/tc06_two_races_xml.stderr.exp-ppc64 | 259 ++++++++++++++++++++
> 2 files changed, 260 insertions(+), 1 deletion(-)
> create mode 100644 helgrind/tests/tc06_two_races_xml.stderr.exp-ppc64
>
> diff --git a/helgrind/tests/Makefile.am b/helgrind/tests/Makefile.am
> index 7ed3478..e3dff80 100644
> --- a/helgrind/tests/Makefile.am
> +++ b/helgrind/tests/Makefile.am
> @@ -64,7 +64,7 @@ EXTRA_DIST = \
> tc06_two_races.vgtest tc06_two_races.stdout.exp \
> tc06_two_races.stderr.exp \
> tc06_two_races_xml.vgtest tc06_two_races_xml.stdout.exp \
> - tc06_two_races_xml.stderr.exp \
> + tc06_two_races_xml.stderr.exp tc06_two_races_xml.stderr.exp-ppc64 \
> tc07_hbl1.vgtest tc07_hbl1.stdout.exp tc07_hbl1.stderr.exp \
> tc08_hbl2.vgtest tc08_hbl2.stdout.exp tc08_hbl2.stderr.exp \
> tc09_bad_unlock.vgtest tc09_bad_unlock.stdout.exp \
> diff --git a/helgrind/tests/tc06_two_races_xml.stderr.exp-ppc64 b/helgrind/tests/tc06_two_races_xml.stderr.exp-ppc64
> new file mode 100644
> index 0000000..e75829e
> --- /dev/null
> +++ b/helgrind/tests/tc06_two_races_xml.stderr.exp-ppc64
> @@ -0,0 +1,259 @@
> +<?xml version="1.0"?>
> +
> +<valgrindoutput>
> +
> +<protocolversion>4</protocolversion>
> +<protocoltool>helgrind</protocoltool>
> +
> +<preamble>
> + <line>Helgrind, a thread error detector</line>
> + <line>Copyright (C) XXXX-YYYY, and GNU GPL'd, by OpenWorks LLP et al.</line>
> + <line>Using Valgrind-X.Y.X and LibVEX; rerun with -h for copyright info</line>
> + <line>Command: ./tc06_two_races</line>
> +</preamble>
> +
> +<pid>...</pid>
> +<ppid>...</ppid>
> +<tool>helgrind</tool>
> +
> +<args>
> + <vargv>
> + <exe>...</exe>
> + <arg>--command-line-only=yes</arg>
> + <arg>--memcheck:leak-check=no</arg>
> + <arg>--tool=helgrind</arg>
> + <arg>--read-var-info=yes</arg>
> + <arg>--xml=yes</arg>
> + <arg>--xml-fd=2</arg>
> + <arg>--log-file=/dev/null</arg>
> + </vargv>
> + <argv>
> + <exe>...</exe>
> + </argv>
> +</args>
> +
> +<status>
> + <state>RUNNING</state>
> + <time>...</time>
> +</status>
> +
> +<announcethread>
> + <hthreadid>1</hthreadid>
> + <isrootthread></isrootthread>
> +</announcethread>
> +
> +<announcethread>
> + <hthreadid>2</hthreadid>
> + <stack>
> + <frame>...</frame>
> + <frame>
> + <ip>0x........</ip>
> + <obj>...</obj>
> + <fn>pthread_create@*</fn>
> + <dir>...</dir>
> + <file>hg_intercepts.c</file>
> + <line>...</line>
> + </frame>
> + <frame>
> + <ip>0x........</ip>
> + <obj>...</obj>
> + <fn>main</fn>
> + <dir>...</dir>
> + <file>tc06_two_races.c</file>
> + <line>26</line>
> + </frame>
> + </stack>
> +</announcethread>
> +
> +<error>
> + <unique>...</unique>
> + <tid>...</tid>
> + <kind>Race</kind>
> + <xwhat>
> + <text>Possible data race during read of size 4 at 0x........ by thread #x</text>
> + <hthreadid>1</hthreadid>
> + </xwhat>
> + <stack>
> + <frame>
> + <ip>0x........</ip>
> + <obj>...</obj>
> + <fn>main</fn>
> + <dir>...</dir>
> + <file>tc06_two_races.c</file>
> + <line>31</line>
> + </frame>
> + </stack>
> + <xauxwhat>
> + <text>This conflicts with a previous write of size 4 by thread #x</text>
> + <hthreadid>2</hthreadid>
> + </xauxwhat>
> + <stack>
> + <frame>
> + <ip>0x........</ip>
> + <obj>...</obj>
> + <fn>child_fn</fn>
> + <dir>...</dir>
> + <file>tc06_two_races.c</file>
> + <line>14</line>
> + </frame>
> + <frame>
> + <ip>0x........</ip>
> + <obj>...</obj>
> + <fn>mythread_wrapper</fn>
> + <dir>...</dir>
> + <file>hg_intercepts.c</file>
> + <line>...</line>
> + </frame>
> + <frame>...</frame>
> + </stack>
> + <auxwhat>Location 0x........ is 0 bytes inside global var "unprot1"</auxwhat>
> + <xauxwhat><text>declared at tc06_two_races.c:9</text> <file>tc06_two_races.c</file> <line>9</line> </xauxwhat>
> +</error>
> +
> +<error>
> + <unique>...</unique>
> + <tid>...</tid>
> + <kind>Race</kind>
> + <xwhat>
> + <text>Possible data race during write of size 4 at 0x........ by thread #x</text>
> + <hthreadid>1</hthreadid>
> + </xwhat>
> + <stack>
> + <frame>
> + <ip>0x........</ip>
> + <obj>...</obj>
> + <fn>main</fn>
> + <dir>...</dir>
> + <file>tc06_two_races.c</file>
> + <line>31</line>
> + </frame>
> + </stack>
> + <xauxwhat>
> + <text>This conflicts with a previous write of size 4 by thread #x</text>
> + <hthreadid>2</hthreadid>
> + </xauxwhat>
> + <stack>
> + <frame>
> + <ip>0x........</ip>
> + <obj>...</obj>
> + <fn>child_fn</fn>
> + <dir>...</dir>
> + <file>tc06_two_races.c</file>
> + <line>14</line>
> + </frame>
> + <frame>
> + <ip>0x........</ip>
> + <obj>...</obj>
> + <fn>mythread_wrapper</fn>
> + <dir>...</dir>
> + <file>hg_intercepts.c</file>
> + <line>...</line>
> + </frame>
> + <frame>...</frame>
> + </stack>
> + <auxwhat>Location 0x........ is 0 bytes inside global var "unprot1"</auxwhat>
> + <xauxwhat><text>declared at tc06_two_races.c:9</text> <file>tc06_two_races.c</file> <line>9</line> </xauxwhat>
> +</error>
> +
> +<error>
> + <unique>...</unique>
> + <tid>...</tid>
> + <kind>Race</kind>
> + <xwhat>
> + <text>Possible data race during read of size 4 at 0x........ by thread #x</text>
> + <hthreadid>1</hthreadid>
> + </xwhat>
> + <stack>
> + <frame>
> + <ip>0x........</ip>
> + <obj>...</obj>
> + <fn>main</fn>
> + <dir>...</dir>
> + <file>tc06_two_races.c</file>
> + <line>35</line>
> + </frame>
> + </stack>
> + <xauxwhat>
> + <text>This conflicts with a previous write of size 4 by thread #x</text>
> + <hthreadid>2</hthreadid>
> + </xauxwhat>
> + <stack>
> + <frame>
> + <ip>0x........</ip>
> + <obj>...</obj>
> + <fn>child_fn</fn>
> + <dir>...</dir>
> + <file>tc06_two_races.c</file>
> + <line>18</line>
> + </frame>
> + <frame>
> + <ip>0x........</ip>
> + <obj>...</obj>
> + <fn>mythread_wrapper</fn>
> + <dir>...</dir>
> + <file>hg_intercepts.c</file>
> + <line>...</line>
> + </frame>
> + <frame>...</frame>
> + </stack>
> + <auxwhat>Location 0x........ is 0 bytes inside global var "unprot2"</auxwhat>
> + <xauxwhat><text>declared at tc06_two_races.c:9</text> <file>tc06_two_races.c</file> <line>9</line> </xauxwhat>
> +</error>
> +
> +<error>
> + <unique>...</unique>
> + <tid>...</tid>
> + <kind>Race</kind>
> + <xwhat>
> + <text>Possible data race during write of size 4 at 0x........ by thread #x</text>
> + <hthreadid>1</hthreadid>
> + </xwhat>
> + <stack>
> + <frame>
> + <ip>0x........</ip>
> + <obj>...</obj>
> + <fn>main</fn>
> + <dir>...</dir>
> + <file>tc06_two_races.c</file>
> + <line>35</line>
> + </frame>
> + </stack>
> + <xauxwhat>
> + <text>This conflicts with a previous write of size 4 by thread #x</text>
> + <hthreadid>2</hthreadid>
> + </xauxwhat>
> + <stack>
> + <frame>
> + <ip>0x........</ip>
> + <obj>...</obj>
> + <fn>child_fn</fn>
> + <dir>...</dir>
> + <file>tc06_two_races.c</file>
> + <line>18</line>
> + </frame>
> + <frame>
> + <ip>0x........</ip>
> + <obj>...</obj>
> + <fn>mythread_wrapper</fn>
> + <dir>...</dir>
> + <file>hg_intercepts.c</file>
> + <line>...</line>
> + </frame>
> + <frame>...</frame>
> + </stack>
> + <auxwhat>Location 0x........ is 0 bytes inside global var "unprot2"</auxwhat>
> + <xauxwhat><text>declared at tc06_two_races.c:9</text> <file>tc06_two_races.c</file> <line>9</line> </xauxwhat>
> +</error>
> +
> +
> +<status>
> + <state>FINISHED</state>
> + <time>...</time>
> +</status>
> +
> +<errorcounts>...</errorcounts>
> +
> +<suppcounts>...</suppcounts>
> +
> +</valgrindoutput>
> +
>
|
|
From: <sv...@va...> - 2015-05-14 13:03:16
|
Author: rhyskidd
Date: Thu May 14 14:03:08 2015
New Revision: 15229
Log:
bz#347233 - Fix memcheck/tests/strchr on OS X 10.10 (Haswell)
Modified:
trunk/NEWS
trunk/memcheck/tests/filter_strchr
trunk/shared/vg_replace_strmem.c
Modified: trunk/NEWS
==============================================================================
--- trunk/NEWS (original)
+++ trunk/NEWS Thu May 14 14:03:08 2015
@@ -173,6 +173,7 @@
346487 Compiler generates "note" about a future ABI change for PPC64
346801 Fix link error on OS X: _vgModuleLocal_sf_maybe_extend_stack
347151 Fix suppression for pthread_rwlock_init on OS X 10.8
+347233 Fix memcheck/tests/strchr on OS X 10.10 (Haswell)
347379 valgrind --leak-check=full memleak errors from system libraries on OS X 10.8
== 217236
347389 unhandled syscall: 373 (Linux ARM syncfs)
Modified: trunk/memcheck/tests/filter_strchr
==============================================================================
--- trunk/memcheck/tests/filter_strchr (original)
+++ trunk/memcheck/tests/filter_strchr Thu May 14 14:03:08 2015
@@ -5,4 +5,5 @@
sed -e "s/: strchr (vg_replace_strmem.c:/: index (vg_replace_strmem.c:/;
s/: _platform_strchr (vg_replace_strmem.c:/: index (vg_replace_strmem.c:/;
s/: _platform_strchr\$VARIANT\$Generic (vg_replace_strmem.c:/: index (vg_replace_strmem.c:/;
+ s/: _platform_strchr\$VARIANT\$Haswell (vg_replace_strmem.c:/: index (vg_replace_strmem.c:/;
s/: strrchr (vg_replace_strmem.c:/: rindex (vg_replace_strmem.c:/"
Modified: trunk/shared/vg_replace_strmem.c
==============================================================================
--- trunk/shared/vg_replace_strmem.c (original)
+++ trunk/shared/vg_replace_strmem.c Thu May 14 14:03:08 2015
@@ -248,6 +248,7 @@
# if DARWIN_VERS == DARWIN_10_10
/* _platform_strchr$VARIANT$Generic */
STRCHR(libsystemZuplatformZddylib, _platform_strchr$VARIANT$Generic)
+ STRCHR(libsystemZuplatformZddylib, _platform_strchr$VARIANT$Haswell)
# endif
#endif
|
On 14/05/15 01:13, Philippe Waroquiers wrote: > Tools are also not working with constants while they are working > with enum (e.g. emacs find-tag does not work with HChar > constants, and works with enum values). enums are type-checkable; chars aren't really. I must say I would also prefer if this was done with an enum. J |