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
(2) |
2
(4) |
3
(1) |
4
(7) |
5
|
|
6
|
7
(4) |
8
|
9
(3) |
10
(6) |
11
(13) |
12
(6) |
|
13
(1) |
14
|
15
(1) |
16
|
17
(4) |
18
(3) |
19
(5) |
|
20
(5) |
21
(5) |
22
(5) |
23
(6) |
24
|
25
(1) |
26
(1) |
|
27
(1) |
28
(4) |
29
(5) |
30
|
|
|
|
|
From: <sv...@va...> - 2016-11-28 22:15:05
|
Author: iraisr
Date: Mon Nov 28 22:14:58 2016
New Revision: 16161
Log:
Fix compiler warning on Solaris.
n-i-bz
Modified:
trunk/coregrind/m_syswrap/syswrap-solaris.c
Modified: trunk/coregrind/m_syswrap/syswrap-solaris.c
==============================================================================
--- trunk/coregrind/m_syswrap/syswrap-solaris.c (original)
+++ trunk/coregrind/m_syswrap/syswrap-solaris.c Mon Nov 28 22:14:58 2016
@@ -5157,7 +5157,7 @@
psp->p_op);
}
- vki_id_t pid;
+ UInt pid;
if ((psp->p_lidtype == VKI_P_PID) && (psp->p_ridtype == VKI_P_ALL)) {
pid = psp->p_lid;
} else if ((psp->p_lidtype == VKI_P_ALL) && (psp->p_ridtype == VKI_P_PID)) {
@@ -5168,7 +5168,7 @@
}
if (VG_(clo_trace_signals))
- VG_(message)(Vg_DebugMsg, "sigsendsys: sending signal to process %u\n",
+ VG_(message)(Vg_DebugMsg, "sigsendsys: sending signal to process %d\n",
pid);
/* Handle SIGKILL specially. */
@@ -8348,8 +8348,8 @@
if (VG_(clo_trace_signals))
VG_(message)(Vg_DebugMsg,
- "sigqueue: signal %lu queued for pid %lu\n",
- ARG2, ARG1);
+ "sigqueue: signal %ld queued for pid %ld\n",
+ SARG2, SARG1);
/* Check to see if this gave us a pending signal. */
*flags |= SfPollAfter;
|
|
From: <sv...@va...> - 2016-11-28 21:41:35
|
Author: iraisr
Date: Mon Nov 28 21:41:28 2016
New Revision: 16160
Log:
Use NULL_STK_ID consistently throughout whole Valgrind.
Follow up to SVN r16159, BZ#373046.
Modified:
trunk/coregrind/m_clientstate.c
trunk/coregrind/m_syswrap/syswrap-solaris.c
Modified: trunk/coregrind/m_clientstate.c
==============================================================================
--- trunk/coregrind/m_clientstate.c (original)
+++ trunk/coregrind/m_clientstate.c Mon Nov 28 21:41:28 2016
@@ -31,6 +31,7 @@
*/
#include "pub_core_basics.h"
+#include "pub_core_threadstate.h"
#include "pub_core_vki.h"
#include "pub_core_xarray.h"
#include "pub_core_clientstate.h"
@@ -50,7 +51,7 @@
Addr VG_(clstk_start_base) = 0;
/* Initial highest address of the stack segment of the main thread. */
Addr VG_(clstk_end) = 0;
-UWord VG_(clstk_id) = 0;
+UWord VG_(clstk_id) = NULL_STK_ID;
/* Maximum size of the main thread's client stack. */
SizeT VG_(clstk_max_size) = 0;
Modified: trunk/coregrind/m_syswrap/syswrap-solaris.c
==============================================================================
--- trunk/coregrind/m_syswrap/syswrap-solaris.c (original)
+++ trunk/coregrind/m_syswrap/syswrap-solaris.c Mon Nov 28 21:41:28 2016
@@ -195,7 +195,7 @@
VG_TRACK(die_mem_munmap, a, sizeof(struct vki_sc_shared));
/* Deregister thread's stack. */
- if (tst->os_state.stk_id != (UWord)-1)
+ if (tst->os_state.stk_id != NULL_STK_ID)
VG_(deregister_stack)(tst->os_state.stk_id);
/* Tell the tool this thread is exiting. */
@@ -708,14 +708,13 @@
new_start = new_end + 1 - new_size;
}
- if (tst->os_state.stk_id == (UWord)-1) {
+ if (tst->os_state.stk_id == NULL_STK_ID) {
/* This thread doesn't have a stack set yet. */
VG_(debugLog)(2, "syswrap-solaris",
"Stack set to %#lx-%#lx (new) for thread %u.\n",
new_start, new_end, tid);
tst->os_state.stk_id = VG_(register_stack)(new_start, new_end);
- }
- else {
+ } else {
/* Change a thread stack. */
VG_(debugLog)(2, "syswrap-solaris",
"Stack set to %#lx-%#lx (change) for thread %u.\n",
@@ -7037,7 +7036,7 @@
later by libc by a setustack() call (the getsetcontext syscall). */
ctst->client_stack_highest_byte = 0;
ctst->client_stack_szB = 0;
- vg_assert(ctst->os_state.stk_id == (UWord)(-1));
+ vg_assert(ctst->os_state.stk_id == NULL_STK_ID);
/* Inform a tool that a new thread is created. This has to be done before
any other core->tool event is sent. */
|
Author: philippe
Date: Mon Nov 28 19:34:06 2016
New Revision: 16159
Log:
Fix 373046 - Stacks registered by core are never deregistered
Modified:
trunk/NEWS
trunk/coregrind/m_scheduler/scheduler.c
trunk/coregrind/m_syswrap/syswrap-generic.c
trunk/coregrind/m_syswrap/syswrap-linux.c
trunk/coregrind/pub_core_threadstate.h
Modified: trunk/NEWS
==============================================================================
--- trunk/NEWS (original)
+++ trunk/NEWS Mon Nov 28 19:34:06 2016
@@ -79,7 +79,7 @@
372120 c++ demangler demangles symbols which are not c++
372504 Hanging on exit_group
372600 process loops forever when fatal signals are arriving quickly
-
+373046 Stacks registered by core are never deregistered
Release 3.12.0 (20 October 2016)
Modified: trunk/coregrind/m_scheduler/scheduler.c
==============================================================================
--- trunk/coregrind/m_scheduler/scheduler.c (original)
+++ trunk/coregrind/m_scheduler/scheduler.c Mon Nov 28 19:34:06 2016
@@ -488,6 +488,7 @@
{
tst->os_state.lwpid = 0;
tst->os_state.threadgroup = 0;
+ tst->os_state.stk_id = NULL_STK_ID;
# if defined(VGO_linux)
/* no other fields to clear */
# elif defined(VGO_darwin)
@@ -504,7 +505,6 @@
# if defined(VGP_x86_solaris)
tst->os_state.thrptr = 0;
# endif
- tst->os_state.stk_id = (UWord)-1;
tst->os_state.ustack = NULL;
tst->os_state.in_door_return = False;
tst->os_state.door_return_procedure = 0;
Modified: trunk/coregrind/m_syswrap/syswrap-generic.c
==============================================================================
--- trunk/coregrind/m_syswrap/syswrap-generic.c (original)
+++ trunk/coregrind/m_syswrap/syswrap-generic.c Mon Nov 28 19:34:06 2016
@@ -84,11 +84,14 @@
tst->client_stack_highest_byte = (Addr)VG_PGROUNDUP(sp)-1;
tst->client_stack_szB = tst->client_stack_highest_byte - seg->start + 1;
- VG_(register_stack)(seg->start, tst->client_stack_highest_byte);
+ tst->os_state.stk_id
+ = VG_(register_stack)(seg->start, tst->client_stack_highest_byte);
if (debug)
- VG_(printf)("tid %u: guessed client stack range [%#lx-%#lx]\n",
- tst->tid, seg->start, tst->client_stack_highest_byte);
+ VG_(printf)("tid %u: guessed client stack range [%#lx-%#lx]"
+ " as stk_id %lu\n",
+ tst->tid, seg->start, tst->client_stack_highest_byte,
+ tst->os_state.stk_id);
} else {
VG_(message)(Vg_UserMsg,
"!? New thread %u starts with SP(%#lx) unmapped\n",
Modified: trunk/coregrind/m_syswrap/syswrap-linux.c
==============================================================================
--- trunk/coregrind/m_syswrap/syswrap-linux.c (original)
+++ trunk/coregrind/m_syswrap/syswrap-linux.c Mon Nov 28 19:34:06 2016
@@ -52,6 +52,7 @@
#include "pub_core_options.h"
#include "pub_core_scheduler.h"
#include "pub_core_signals.h"
+#include "pub_core_stacks.h"
#include "pub_core_syscall.h"
#include "pub_core_syswrap.h"
#include "pub_core_inner.h"
@@ -162,6 +163,10 @@
c = VG_(count_living_threads)();
vg_assert(c >= 1); /* stay sane */
+ /* Deregister thread's stack. */
+ if (tst->os_state.stk_id != NULL_STK_ID)
+ VG_(deregister_stack)(tst->os_state.stk_id);
+
// Tell the tool this thread is exiting
VG_TRACK( pre_thread_ll_exit, tid );
Modified: trunk/coregrind/pub_core_threadstate.h
==============================================================================
--- trunk/coregrind/pub_core_threadstate.h (original)
+++ trunk/coregrind/pub_core_threadstate.h Mon Nov 28 19:34:06 2016
@@ -114,6 +114,8 @@
ThreadArchState;
+#define NULL_STK_ID (~(UWord)0)
+
/* OS-specific thread state. IMPORTANT: if you add fields to this,
you _must_ add code to os_state_clear() to initialise those
fields. */
@@ -129,6 +131,12 @@
Addr valgrind_stack_base; // Valgrind's stack (VgStack*)
Addr valgrind_stack_init_SP; // starting value for SP
+ /* Client stack is registered as stk_id (on linux/darwin, by
+ ML_(guess_and_register_stack)).
+ Stack id NULL_STK_ID means that the user stack is not (yet)
+ registered. */
+ UWord stk_id;
+
/* exit details */
Word exitcode; // in the case of exitgroup, set by someone else
Int fatalsig; // fatal signal
@@ -281,10 +289,6 @@
the 64-bit offset associated with a %fs value of zero. */
# endif
- /* Stack id (value (UWord)(-1) means that there is no stack). This
- tracks a stack that is set in restore_stack(). */
- UWord stk_id;
-
/* Simulation of the kernel's lwp->lwp_ustack. Set in the PRE wrapper
of the getsetcontext syscall, for SETUSTACK. Used in
VG_(save_context)(), VG_(restore_context)() and
|
|
From: <sv...@va...> - 2016-11-28 18:16:36
|
Author: philippe
Date: Mon Nov 28 18:16:27 2016
New Revision: 16158
Log:
Addition of helgrind client request VALGRIND_HG_GNAT_DEPENDENT_MASTER_JOIN
See helgrind.h for description
Modified:
trunk/NEWS
trunk/helgrind/helgrind.h
trunk/helgrind/hg_main.c
Modified: trunk/NEWS
==============================================================================
--- trunk/NEWS (original)
+++ trunk/NEWS Mon Nov 28 18:16:27 2016
@@ -47,6 +47,8 @@
- Support for --xtree-memory and 'xtmemory [<filename>]>'.
+ - addition of client request VALGRIND_HG_GNAT_DEPENDENT_MASTER_JOIN,
+ useful for Ada gnat compiled applications.
* ==================== OTHER CHANGES ====================
Modified: trunk/helgrind/helgrind.h
==============================================================================
--- trunk/helgrind/helgrind.h (original)
+++ trunk/helgrind/helgrind.h Mon Nov 28 18:16:27 2016
@@ -133,7 +133,8 @@
_VG_USERREQ__HG_PTHREAD_COND_SIGNAL_POST, /* pth_cond_t* */
_VG_USERREQ__HG_PTHREAD_COND_BROADCAST_POST,/* pth_cond_t* */
_VG_USERREQ__HG_RTLD_BIND_GUARD, /* int flags */
- _VG_USERREQ__HG_RTLD_BIND_CLEAR /* int flags */
+ _VG_USERREQ__HG_RTLD_BIND_CLEAR, /* int flags */
+ _VG_USERREQ__HG_GNAT_DEPENDENT_MASTER_JOIN /* void*d, void*m */
} Vg_TCheckClientRequest;
@@ -424,6 +425,37 @@
_res; \
}))
+/* End-user request for Ada applications compiled with GNAT.
+ Helgrind understands the Ada concept of Ada task dependencies and
+ terminations. See Ada Reference Manual section 9.3 "Task Dependence
+ - Termination of Tasks".
+ However, in some cases, the master of (terminated) tasks completes
+ only when the application exits. An example of this is dynamically
+ allocated tasks with an access type defined at Library Level.
+ By default, the state of such tasks in Helgrind will be 'exited but
+ join not done yet'. Many tasks in such a state are however causing
+ Helgrind CPU and memory to increase significantly.
+ VALGRIND_HG_GNAT_DEPENDENT_MASTER_JOIN can be used to indicate
+ to Helgrind that a not yet completed master has however already
+ 'seen' the termination of a dependent : this is conceptually the
+ same as a pthread_join and causes the cleanup of the dependent
+ as done by Helgrind when a master completes.
+ This allows to avoid the overhead in helgrind caused by such tasks.
+ A typical usage for a master to indicate it has done conceptually a join
+ with a dependent task before the master completes is:
+ while not Dep_Task'Terminated loop
+ ... do whatever to wait for Dep_Task termination.
+ end loop;
+ VALGRIND_HG_GNAT_DEPENDENT_MASTER_JOIN
+ (Dep_Task'Identity,
+ Ada.Task_Identification.Current_Task);
+ Note that VALGRIND_HG_GNAT_DEPENDENT_MASTER_JOIN should be a binding
+ to a C function built with the below macro. */
+#define VALGRIND_HG_GNAT_DEPENDENT_MASTER_JOIN(_qzz_dep, _qzz_master) \
+ DO_CREQ_v_WW(_VG_USERREQ__HG_GNAT_DEPENDENT_MASTER_JOIN, \
+ void*,(_qzz_dep), \
+ void*,(_qzz_master))
+
/*----------------------------------------------------------------*/
/*--- ---*/
/*--- ThreadSanitizer-compatible requests ---*/
Modified: trunk/helgrind/hg_main.c
==============================================================================
--- trunk/helgrind/hg_main.c (original)
+++ trunk/helgrind/hg_main.c Mon Nov 28 18:16:27 2016
@@ -4883,7 +4883,7 @@
Word master_level; // level of dependency between master and dependent
Thread* hg_dependent; // helgrind Thread* for dependent task.
}
- GNAT_dmml;
+ GNAT_dmml; // (d)ependent (m)aster (m)aster_(l)evel.
static XArray* gnat_dmmls; /* of GNAT_dmml */
static void gnat_dmmls_INIT (void)
{
@@ -5107,6 +5107,41 @@
*ret = -1;
break;
+ /* This thread (tid) (a master) is informing us that it has
+ seen the termination of a dependent task, and that this should
+ be considered as a join between master and dependent. */
+ case _VG_USERREQ__HG_GNAT_DEPENDENT_MASTER_JOIN: {
+ Word n;
+ const Thread *stayer = map_threads_maybe_lookup( tid );
+ const void *dependent = (void*)args[1];
+ const void *master = (void*)args[2];
+
+ if (0)
+ VG_(printf)("HG_GNAT_DEPENDENT_MASTER_JOIN (tid %d): "
+ "self_id = %p Thread* = %p dependent %p\n",
+ (Int)tid, master, stayer, dependent);
+
+ gnat_dmmls_INIT();
+ /* Similar loop as for master completed hook below, but stops at
+ the first matching occurence, only comparing master and
+ dependent. */
+ for (n = VG_(sizeXA) (gnat_dmmls) - 1; n >= 0; n--) {
+ GNAT_dmml *dmml = (GNAT_dmml*) VG_(indexXA)(gnat_dmmls, n);
+ if (dmml->master == master
+ && dmml->dependent == dependent) {
+ if (0)
+ VG_(printf)("quitter %p dependency to stayer %p (join)\n",
+ dmml->hg_dependent->hbthr, stayer->hbthr);
+ tl_assert(dmml->hg_dependent->hbthr != stayer->hbthr);
+ generate_quitter_stayer_dependence (dmml->hg_dependent->hbthr,
+ stayer->hbthr);
+ VG_(removeIndexXA) (gnat_dmmls, n);
+ break;
+ }
+ }
+ break;
+ }
+
/* --- --- Client requests for Helgrind's use only --- --- */
/* Some thread is telling us its pthread_t value. Record the
|