|
From: Bart V. A. <bar...@gm...> - 2007-12-23 17:29:56
|
Since a few days exp-drd now crashes on every program that I try to
analyze. This crash did not yet occur with Valgrind version 3.3.0 but
does occur with revision 7307. The relevant call stack is shown below.
Is this due to exp-drd or due to the post-3.3.0 changes ?
$ ./debug-in-place --tool=exp-drd exp-drd/tests/fp_race
(gdb) run --tool=exp-drd exp-drd/tests/fp_race
Starting program:
/home/bart/software/valgrind-svn/.in_place/amd64-linux/exp-drd
--tool=exp-drd exp-drd/tests/fp_race
==17491== exp-drd, a data race detector.
==17491== NOTE: This is an Experimental-Class Valgrind Tool.
==17491== Copyright (C) 2006-2007, and GNU GPL'd, by Bart Van Assche.
==17491== Using LibVEX rev 1803, a library for dynamic binary translation.
==17491== Copyright (C) 2004-2007, and GNU GPL'd, by OpenWorks LLP.
==17491== Using valgrind-3.4.0.SVN, a dynamic binary instrumentation framework.
==17491== Copyright (C) 2000-2007, and GNU GPL'd, by Julian Seward et al.
==17491== For more details, rerun with: -v
==17491==
Program received signal SIGSEGV, Segmentation fault.
vgPlain_get_StackTrace2 (tid_if_known=<value optimized out>, ips=0x389113f0,
n_ips=12, ip=0, sp=0, fp=0, lr=0, fp_min=0, fp_max_orig=0)
at m_stacktrace.c:230
230 ip = (((UWord*)fp)[1]);
(gdb) where
#0 vgPlain_get_StackTrace2 (tid_if_known=<value optimized out>,
ips=0x389113f0, n_ips=12, ip=0, sp=0, fp=0, lr=0, fp_min=0, fp_max_orig=0)
at m_stacktrace.c:230
#1 0x000000003801aada in vgPlain_get_StackTrace (tid=1, ips=0x389113f0,
n_ips=12, first_ip_delta=<value optimized out>) at m_stacktrace.c:437
#2 0x00000000380099d6 in record_ExeContext_wrk (tid=1, first_ip_delta=0,
first_ip_only=0 '\0') at m_execontext.c:309
#3 0x0000000038004ef9 in sg_init (sg=0x402001380, creator=0, created=1)
at drd_segment.c:68
#4 0x0000000038004fd7 in sg_new (creator=0, created=1) at drd_segment.c:110
#5 0x0000000038006ce7 in thread_pre_create (creator=0, vg_created=1)
at drd_thread.c:222
#6 0x0000000038002a0c in drd_pre_thread_create (creator=0, created=1)
at drd_main.c:323
#7 0x00000000380106cd in valgrind_main (argc=<value optimized out>,
argv=<value optimized out>, envp=0x7fffa1083d68) at m_main.c:1756
#8 0x00000000380122de in _start_in_C_linux (pArgc=0x7fffa1083d40)
at m_main.c:2369
#9 0x000000003800f1a1 in _start ()
--
Regards,
Bart Van Assche.
|
|
From: Bart V. A. <bar...@gm...> - 2007-12-23 19:02:03
|
Update: the patch included below solves the exp-drd crash. This patch
backs out the post-3.3.0 changes in coregrind/m_stacktrace.c.
Index: coregrind/m_stacktrace.c
===================================================================
--- coregrind/m_stacktrace.c (revision 7307)
+++ coregrind/m_stacktrace.c (revision 7290)
@@ -97,9 +97,11 @@
/* Assertion broken before main() is reached in pthreaded programs; the
* offending stack traces only have one item. --njn, 2002-aug-16 */
/* vg_assert(fp_min <= fp_max);*/
- if (fp_min + 512 >= fp_max) {
- /* If the stack limits look bogus, don't poke around ... but
- don't bomb out either. */
+
+ if (fp_min + VG_(clo_max_stackframe) <= fp_max) {
+ /* If the stack is ridiculously big, don't poke around ... but
+ don't bomb out either. Needed to make John Regehr's
+ user-space threads package work. JRS 20021001 */
ips[0] = ip;
return 1;
}
On Dec 23, 2007 6:29 PM, Bart Van Assche <bar...@gm...> wrote:
> Since a few days exp-drd now crashes on every program that I try to
> analyze. This crash did not yet occur with Valgrind version 3.3.0 but
> does occur with revision 7307. The relevant call stack is shown below.
> Is this due to exp-drd or due to the post-3.3.0 changes ?
>
> $ ./debug-in-place --tool=exp-drd exp-drd/tests/fp_race
> (gdb) run --tool=exp-drd exp-drd/tests/fp_race
> Starting program:
> /home/bart/software/valgrind-svn/.in_place/amd64-linux/exp-drd
> --tool=exp-drd exp-drd/tests/fp_race
> ==17491== exp-drd, a data race detector.
> ==17491== NOTE: This is an Experimental-Class Valgrind Tool.
> ==17491== Copyright (C) 2006-2007, and GNU GPL'd, by Bart Van Assche.
> ==17491== Using LibVEX rev 1803, a library for dynamic binary translation.
> ==17491== Copyright (C) 2004-2007, and GNU GPL'd, by OpenWorks LLP.
> ==17491== Using valgrind-3.4.0.SVN, a dynamic binary instrumentation framework.
> ==17491== Copyright (C) 2000-2007, and GNU GPL'd, by Julian Seward et al.
> ==17491== For more details, rerun with: -v
> ==17491==
>
> Program received signal SIGSEGV, Segmentation fault.
> vgPlain_get_StackTrace2 (tid_if_known=<value optimized out>, ips=0x389113f0,
> n_ips=12, ip=0, sp=0, fp=0, lr=0, fp_min=0, fp_max_orig=0)
> at m_stacktrace.c:230
> 230 ip = (((UWord*)fp)[1]);
> (gdb) where
> #0 vgPlain_get_StackTrace2 (tid_if_known=<value optimized out>,
> ips=0x389113f0, n_ips=12, ip=0, sp=0, fp=0, lr=0, fp_min=0, fp_max_orig=0)
> at m_stacktrace.c:230
> #1 0x000000003801aada in vgPlain_get_StackTrace (tid=1, ips=0x389113f0,
> n_ips=12, first_ip_delta=<value optimized out>) at m_stacktrace.c:437
> #2 0x00000000380099d6 in record_ExeContext_wrk (tid=1, first_ip_delta=0,
> first_ip_only=0 '\0') at m_execontext.c:309
> #3 0x0000000038004ef9 in sg_init (sg=0x402001380, creator=0, created=1)
> at drd_segment.c:68
> #4 0x0000000038004fd7 in sg_new (creator=0, created=1) at drd_segment.c:110
> #5 0x0000000038006ce7 in thread_pre_create (creator=0, vg_created=1)
> at drd_thread.c:222
> #6 0x0000000038002a0c in drd_pre_thread_create (creator=0, created=1)
> at drd_main.c:323
> #7 0x00000000380106cd in valgrind_main (argc=<value optimized out>,
> argv=<value optimized out>, envp=0x7fffa1083d68) at m_main.c:1756
> #8 0x00000000380122de in _start_in_C_linux (pArgc=0x7fffa1083d40)
> at m_main.c:2369
> #9 0x000000003800f1a1 in _start ()
>
>
> --
> Regards,
>
> Bart Van Assche.
>
--
Met vriendelijke groeten,
Bart Van Assche.
|
|
From: Julian S. <js...@ac...> - 2007-12-23 22:28:55
|
> #0 vgPlain_get_StackTrace2 (tid_if_known=<value optimized out>, > ips=0x389113f0, n_ips=12, ip=0, sp=0, fp=0, lr=0, fp_min=0, > fp_max_orig=0) at m_stacktrace.c:230 The stack unwinder is being started with ip, sp, fp, lr values for the thread concerned of zero, which leads to the segfault. Are you sure the thread for which you are getting a stack trace has good values for those registers? J |
|
From: Bart V. A. <bar...@gm...> - 2007-12-24 09:52:35
|
On Dec 23, 2007 11:27 PM, Julian Seward <js...@ac...> wrote: > > > #0 vgPlain_get_StackTrace2 (tid_if_known=<value optimized out>, > > ips=0x389113f0, n_ips=12, ip=0, sp=0, fp=0, lr=0, fp_min=0, > > fp_max_orig=0) at m_stacktrace.c:230 > > The stack unwinder is being started with ip, sp, fp, lr values > for the thread concerned of zero, which leads to the segfault. > Are you sure the thread for which you are getting a stack trace > has good values for those registers? What happens inside exp-drd is that VG_(record_ExeContext)() is called from within VG_TRACK(pre_thread_create)(). Am I allowed to do this ? Regards, Bart. |
|
From: Bart V. A. <bar...@gm...> - 2008-01-01 19:31:16
Attachments:
valgrind-2008-01-01.patch
|
On Dec 23, 2007 11:27 PM, Julian Seward <js...@ac...> wrote: > > > #0 vgPlain_get_StackTrace2 (tid_if_known=<value optimized out>, > > ips=0x389113f0, n_ips=12, ip=0, sp=0, fp=0, lr=0, fp_min=0, > > fp_max_orig=0) at m_stacktrace.c:230 > > The stack unwinder is being started with ip, sp, fp, lr values > for the thread concerned of zero, which leads to the segfault. > Are you sure the thread for which you are getting a stack trace > has good values for those registers? The attached exp-drd patch fixes the aforementioned crash. Julian, can you please apply it ? Thanks, Bart. |
|
From: Tom H. <to...@co...> - 2008-01-02 10:08:05
|
On 01/01/2008, Bart Van Assche <bar...@gm...> wrote: > The attached exp-drd patch fixes the aforementioned crash. Julian, can > you please apply it ? Committed. Tom -- Tom Hughes (to...@co...) http://www.compton.nu/ |