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
(6) |
|
2
(4) |
3
(9) |
4
(11) |
5
(16) |
6
(6) |
7
(1) |
8
(11) |
|
9
(11) |
10
(6) |
11
(10) |
12
(23) |
13
(23) |
14
(6) |
15
(10) |
|
16
(5) |
17
(13) |
18
(9) |
19
(4) |
20
(6) |
21
(16) |
22
(3) |
|
23
(5) |
24
(7) |
25
(6) |
26
(4) |
27
(8) |
28
|
29
(3) |
|
30
(2) |
31
(17) |
|
|
|
|
|
|
From: Florian K. <fl...@ei...> - 2015-08-22 22:55:53
|
On 22.08.2015 00:02, Philippe Waroquiers wrote: > On Fri, 2015-08-21 at 12:24 +0200, Julian Seward wrote: >> I would like to change the default value for the --partial-loads-ok flag >> so that it is =yes on all targets. .....snip..... >> >> So I propose to change it to =yes for all targets for 3.11. > Looks reasonable to me. Sounds good to me, too. > * Change --leak-check-heuristics=none to --leak-check-heuristics=all > This avoids false possibly lost in c++ code. > No memory or cpu impact (except neglectible cpu needed for heuristic > during leak search, when encountering a possibly leaked block). > Surely a win for the user. +1 > * Change --keep-stacktraces=alloc-then-free to alloc-and-free > This gives more information for writes to freed blocks, showing > also the stacktrace where the block was allocated. > Neglectible cpu impact. Memory impact is one word per client > allocated block. Not sure about this one. Say you have an execution path where memory is allocated (@ point A) then freed (@ point F), then written to (@ point W). In general, there can be execution paths through different allocation sites that all go through the same F and W points. How would knowledge of the specific allocation site be helpful in debugging? Florian |
|
From: <sv...@va...> - 2015-08-22 22:08:51
|
Author: iraisr
Date: Sat Aug 22 23:08:43 2015
New Revision: 15583
Log:
Distinguish properly when to establish the client data segment.
Initial data segment is established (see initimg-solaris.c for rationale):
- directly during client program image initialization,
- or on demand when the executed program is the runtime linker itself,
after it has loaded its target dynamic executable (see PRE(sys_mmapobj)),
or when the first brk() syscall is made.
More preparatory work for ldsoexec support.
n-i-bz
Modified:
trunk/coregrind/m_initimg/initimg-solaris.c
trunk/coregrind/m_syswrap/syswrap-solaris.c
trunk/coregrind/m_ume/elf.c
trunk/coregrind/pub_core_syswrap.h
trunk/coregrind/pub_core_ume.h
Modified: trunk/coregrind/m_initimg/initimg-solaris.c
==============================================================================
--- trunk/coregrind/m_initimg/initimg-solaris.c (original)
+++ trunk/coregrind/m_initimg/initimg-solaris.c Sat Aug 22 23:08:43 2015
@@ -48,6 +48,7 @@
#include "pub_core_machine.h"
#include "pub_core_ume.h"
#include "pub_core_options.h"
+#include "pub_core_syswrap.h"
#include "pub_core_tooliface.h" /* VG_TRACK */
#include "pub_core_threadstate.h" /* ThreadArchState */
#include "priv_initimg_pathscan.h"
@@ -102,7 +103,11 @@
VG_(cl_exec_fd) = sr_Res(res);
/* Set initial brk values. */
- VG_(brk_base) = VG_(brk_limit) = info->brkbase;
+ if (info->ldsoexec) {
+ VG_(brk_base) = VG_(brk_limit) = -1;
+ } else {
+ VG_(brk_base) = VG_(brk_limit) = info->brkbase;
+ }
}
@@ -841,10 +846,20 @@
iifii.clstack_max_size);
}
- /* Initial data (brk) segment is setup on demand, when a first brk() syscall
- is made. It cannot be established now because it would conflict with
- a temporary stack which ld.so.1 (when executed directly) uses for loading
- the target dynamic executable. See PRE(sys_brk) in syswrap-solaris.c. */
+ if (info.ldsoexec) {
+ /* We are executing the runtime linker itself.
+ Initial data (brk) segment is setup on demand, after the target dynamic
+ executable has been loaded or when a first brk() syscall is made.
+ It cannot be established now because it would conflict with a temporary
+ stack which ld.so.1 (when executed directly) uses for loading the
+ target dynamic executable. See PRE(sys_brk) in syswrap-solaris.c. */
+ } else {
+ if (!VG_(setup_client_dataseg)()) {
+ VG_(printf)("valgrind: cannot initialize data segment (brk).\n");
+ VG_(exit)(1);
+ }
+ }
+
return iifii;
}
@@ -916,15 +931,10 @@
VG_TRACK(post_reg_write, Vg_CoreStartup, 1/*tid*/, 0/*offset*/,
sizeof(VexGuestArchState));
- /* Make inaccessible/unaddressable the end of the client data segment.
- See PRE(sys_brk) in syswrap-solaris.c for details. Nothing to do in
- case VG_(brk_base) starts on the beginning of a free page. */
- const NSegment *seg = VG_(am_find_nsegment)(VG_(brk_base));
- if (seg != NULL) {
- vg_assert((seg->kind == SkFileC) || (seg->kind == SkAnonC));
- VG_TRACK(new_mem_brk, VG_(brk_base), seg->end + 1 - VG_(brk_base),
- 1 /* tid */);
- VG_TRACK(die_mem_brk, VG_(brk_base), seg->end + 1 - VG_(brk_base));
+ if (VG_(brk_base) != -1 ) {
+ /* Make inaccessible/unaddressable the end of the client data segment.
+ See PRE(sys_brk) in syswrap-solaris.c for details. */
+ VG_(track_client_dataseg)(1 /* tid */);
}
}
Modified: trunk/coregrind/m_syswrap/syswrap-solaris.c
==============================================================================
--- trunk/coregrind/m_syswrap/syswrap-solaris.c (original)
+++ trunk/coregrind/m_syswrap/syswrap-solaris.c Sat Aug 22 23:08:43 2015
@@ -1806,8 +1806,13 @@
/* Data segment for brk (heap). It is an expandable anonymous mapping
abutting a 1-page reservation. The data segment starts at VG_(brk_base)
and runs up to VG_(brk_limit). None of these two values have to be
- page-aligned. Initial data segment is established on demand here (see
- initimg-solaris.c for rationale).
+ page-aligned.
+ Initial data segment is established (see initimg-solaris.c for rationale):
+ - directly during client program image initialization,
+ - or on demand when the executed program is the runtime linker itself,
+ after it has loaded its target dynamic executable (see PRE(sys_mmapobj)),
+ or when the first brk() syscall is made.
+
Notable facts:
- VG_(brk_base) is not page aligned; does not move
- VG_(brk_limit) moves between [VG_(brk_base), data segment end]
@@ -1838,9 +1843,23 @@
The page that contains VG_(brk_base) is already allocated by the program's
loaded data segment. The brk syscall wrapper handles this special case. */
+static Bool brk_segment_established = False;
+
/* Establishes initial data segment for brk (heap). */
-static Bool setup_client_dataseg(SizeT initial_size, ThreadId tid)
+Bool VG_(setup_client_dataseg)(void)
{
+ /* Segment size is initially at least 1 MB and at most 8 MB. */
+ SizeT m1 = 1024 * 1024;
+ SizeT m8 = 8 * m1;
+ SizeT initial_size = VG_(client_rlimit_data).rlim_cur;
+ VG_(debugLog)(1, "syswrap-solaris", "Setup client data (brk) segment "
+ "at %#lx\n", VG_(brk_base));
+ if (initial_size < m1)
+ initial_size = m1;
+ if (initial_size > m8)
+ initial_size = m8;
+ initial_size = VG_PGROUNDUP(initial_size);
+
Addr anon_start = VG_PGROUNDUP(VG_(brk_base));
SizeT anon_size = VG_PGROUNDUP(initial_size);
Addr resvn_start = anon_start + anon_size;
@@ -1873,18 +1892,22 @@
vg_assert(!sr_isError(sres));
vg_assert(sr_Res(sres) == anon_start);
- /* Tell the tool about the client data segment and then kill it which will
- make it initially inaccessible/unaddressable. */
- seg = VG_(am_find_nsegment)(anon_start);
+ brk_segment_established = True;
+ return True;
+}
+
+/* Tell the tool about the client data segment and then kill it which will
+ make it initially inaccessible/unaddressable. */
+void VG_(track_client_dataseg)(ThreadId tid)
+{
+ const NSegment *seg = VG_(am_find_nsegment)(VG_PGROUNDUP(VG_(brk_base)));
vg_assert(seg != NULL);
vg_assert(seg->kind == SkAnonC);
+
VG_TRACK(new_mem_brk, VG_(brk_base), seg->end + 1 - VG_(brk_base), tid);
VG_TRACK(die_mem_brk, VG_(brk_base), seg->end + 1 - VG_(brk_base));
- return True;
}
-static Bool brk_segment_established = False;
-
PRE(sys_brk)
{
/* unsigned long brk(caddr_t end_data_segment); */
@@ -1923,31 +1946,22 @@
return;
}
+ /* The brk base and limit must have been already set. */
+ vg_assert(VG_(brk_base) != -1);
+ vg_assert(VG_(brk_limit) != -1);
+
if (!brk_segment_established) {
/* Stay sane (because there should have been no brk activity yet). */
vg_assert(VG_(brk_base) == VG_(brk_limit));
- /* Establish an initial data segment for brk (heap).
- Initially at least 1 MB and at most 8 MB large. */
- SizeT m1 = 1024 * 1024;
- SizeT m8 = 8 * m1;
- SizeT dseg_max_size = VG_(client_rlimit_data).rlim_cur;
- VG_(debugLog)(1, "syswrap-solaris", "Setup client data (brk) segment "
- "at %#lx\n", VG_(brk_base));
- if (dseg_max_size < m1)
- dseg_max_size = m1;
- if (dseg_max_size > m8)
- dseg_max_size = m8;
- dseg_max_size = VG_PGROUNDUP(dseg_max_size);
-
- if (!setup_client_dataseg(dseg_max_size, tid)) {
+ if (!VG_(setup_client_dataseg)()) {
VG_(umsg)("Cannot map memory to initialize brk segment in thread #%d "
"at %#lx\n", tid, VG_(brk_base));
SET_STATUS_Failure(VKI_ENOMEM);
return;
}
- brk_segment_established = True;
+ VG_(track_client_dataseg)(tid);
}
if (new_brk < old_brk_limit) {
Modified: trunk/coregrind/m_ume/elf.c
==============================================================================
--- trunk/coregrind/m_ume/elf.c (original)
+++ trunk/coregrind/m_ume/elf.c Sat Aug 22 23:08:43 2015
@@ -563,9 +563,15 @@
VG_(free)(interp->p);
VG_(free)(interp);
- } else
+ } else {
entry = (void *)(ebase + e->e.e_entry);
+# if defined(VGO_solaris)
+ if (e->e.e_type == ET_DYN)
+ info->ldsoexec = True;
+# endif
+ }
+
info->exe_base = minaddr + ebase;
info->exe_end = maxaddr + ebase;
Modified: trunk/coregrind/pub_core_syswrap.h
==============================================================================
--- trunk/coregrind/pub_core_syswrap.h (original)
+++ trunk/coregrind/pub_core_syswrap.h Sat Aug 22 23:08:43 2015
@@ -93,6 +93,8 @@
extern void VG_(restore_context)(ThreadId tid, vki_ucontext_t *uc,
CorePart part, Bool esp_is_thrptr);
extern void VG_(syswrap_init)(void);
+extern Bool VG_(setup_client_dataseg)(void);
+extern void VG_(track_client_dataseg)(ThreadId tid);
#endif
#endif // __PUB_CORE_SYSWRAP_H
Modified: trunk/coregrind/pub_core_ume.h
==============================================================================
--- trunk/coregrind/pub_core_ume.h (original)
+++ trunk/coregrind/pub_core_ume.h Sat Aug 22 23:08:43 2015
@@ -67,6 +67,7 @@
#if defined(VGO_solaris)
Addr init_thrptr; // OUT: architecture-specific user per-thread location
Bool real_phdr_present; // OUT: PT_PHDR found, include phdr in auxv
+ Bool ldsoexec; // OUT: the program is the runtime linker itself
#endif
Addr entry; // OUT: entrypoint in main executable
|
|
From: Matthias S. <zz...@ge...> - 2015-08-22 05:51:24
|
Am 22.08.2015 um 01:02 schrieb Tom Hughes:
> On 21/08/15 23:10, Matthias Schwarzott wrote:
>> Am 21.08.2015 um 10:05 schrieb Tom Hughes:
>>> On 21/08/15 07:19, Matthias Schwarzott wrote:
>>>
>>>> For tc18_semabuse and tc20_verifywrap the reason is similar.
>>>>
>>>> tc18_semabuse gets a SIGABRT at this callstack:
>>>> #0 0x00007ffff78573b7 in __GI_raise (sig=sig@entry=6) at
>>>> ../sysdeps/unix/sysv/linux/raise.c:55
>>>> #1 0x00007ffff785874a in __GI_abort () at abort.c:89
>>>> #2 0x00007ffff7bcdf77 in futex_wake (private=<optimized out>,
>>>> processes_to_wake=1, futex=<optimized out>) at sem_post.c:50
>>>> #3 __new_sem_post (sem=<optimized out>) at sem_post.c:81
>>>> #4 0x0000000000400976 in main () at tc18_semabuse.c:40
>>>
>>> Yes we're aware that both tc18 and tc20 produce this, and I know the
>>> cause, we just haven't come up with a good solution yet.
>>>
>>>> With original trunk tc20_verifywrap is killed with the second signal
>>>> SIGILL that is delivered to it.
>>>
>>> Actually the SIGILL is before the SIGABRT and you're not seeing it now
>>> precisely because we now catch and ignore it.
>>>
>> At least it should be like this.
>> For me this test is always killed by the second SIGILL signal.
>>
>> If the signal is sent more than once, it must be unblocked after the
>> first. Either call some sigblock function at sighandler setup or inside
>> sighandler or set the flag SA_NODEFER.
>> This is contained in the attached patch.
>
> There shouldn't be a second SIGILL signal.
For me tc20_verifywrap.c triggers SIGILL in three locations:
* tc20_verifywrap.c:189 (pthread_rwlock_unlock after init)
* tc20_verifywrap.c:206 (double pthread_rwlock_unlock)
* tc20_verifywrap.c:227 (three pthread_rwlock_unlock after two
pthread_rwlock_rdlock)
So technically there should be three SIGILL signals.
> When SIGILL is caught we jump
> out and restore the original handler.
Yes, but we do not restore the signal mask. And if SA_NODEFER is not
set, the signal will stay blocked afterwards. And we also do not call
sigmask/sigblock/sigsetmask.
>From man sigaction:
sa_mask specifies a mask of signals which should be blocked
(i.e., added to the signal mask of the thread in which the signal handler
is invoked) during execution of the signal handler. In
addition, the signal which triggered the handler will be blocked, unless the
SA_NODEFER flag is used.
>
> The other signal you quoted is SIGABRT not SIGILL and happens much later
> when we don't even have the handler installed.
>
Yes, and I want that the code is at least able to reach the point where
the SIGABRT is sent.
Matthias
|