04910c3b6f14d0542b9a21896a4e96f497de4596 |
|
18-May-2014 |
philippe <philippe@a5019735-40e9-0310-863c-91ae7b9d1cf9> |
on ppc64, pthread_create_WRK is not (always) produced in the stacktrace showing where a thread was created. This makes many tests fail => use sed to delete pthread_create_WRK from the stacktrace to let tests succeed on ppc64. With this change, on ppc64 gcc110 (fedora 18), helgrind failures goes from 28 tests failing to 4, with following reasons: helgrind/tests/pth_cond_destroy_busy (stderr) (6 errors instead of 3 in the summary line ???) helgrind/tests/tc06_two_races_xml (stderr) similar change needed in filter_xml to del pthread_create_WRK helgrind/tests/tc18_semabuse (stderr) - with error code 22 (EINVAL: Invalid argument) + with error code 38 (ENOSYS: Function not implemented) helgrind/tests/tc20_verifywrap (stderr) - with error code 22 (EINVAL: Invalid argument) + with error code 38 (ENOSYS: Function not implemented) More details about the stacktrace not containing pthread_create_WRK: -------------------------------------------------------------------- Here is the stacktrace obtained by GDB+vgdb: (gdb) bt #0 0x0000008074f7ac5c in .__clone () from /lib64/libc.so.6 #1 0x000000807517b1ec in do_clone (pd=0x4c6f200, attr=0x8075189c90 <default_attr>, stackaddr=<optimized out>, stopped=<optimized out>, fct=@0x80751a01e0: 0x807517c500 <start_thread>, clone_flags=4001536) at ../nptl/sysdeps/pthread/createthread.c:74 #2 0x000000000403ed0c in pthread_create_WRK (thread=<error reading variable: value has been optimized out>, attr=<error reading variable: value has been optimized out>, start=<error reading variable: value has been optimized out>, arg=0xfff00ee18) at hg_intercepts.c:269 #3 0x000000000403ef1c in _vgw00000ZZ_libpthreadZdsoZd0_pthreadZucreateZAZa (thread=<optimized out>, attr=<optimized out>, start=<optimized out>, arg=<optimized out>) at hg_intercepts.c:300 #4 0x000000003806f1d8 in ?? () #5 0x0000008074e9fb94 in generic_start_main (main=@0x100200d8: 0x100013a0 <main>, argc=<optimized out>, ubp_av=0xfff00f2d8, auxvec=0xfff00f408, init=<optimized out>, rtld_fini=<optimized out>, stack_end=<optimized out>, fini=<optimized out>) at ../csu/libc-start.c:225 #6 0x0000008074e9fd90 in __libc_start_main (argc=<optimized out>, ubp_av=<optimized out>, ubp_ev=<optimized out>, auxvec=<optimized out>, rtld_fini=<optimized out>, stinfo=<optimized out>, stack_on_entry=<optimized out>) at ../sysdeps/unix/sysv/linux/powerpc/libc-start.c:91 #7 0x0000000000000000 in ?? () (gdb) and here is the stacktrace produced by Valgrind unwinder: Thread 1: status = VgTs_Runnable ==41687== at 0x8074F7AC5C: clone (in /usr/lib64/libc-2.16.so) ==41687== by 0x807517B1EB: do_clone.constprop.3 (createthread.c:74) ==41687== by 0x403EF1B: pthread_create@* (hg_intercepts.c:300) ==41687== by 0x10001597: main (tc19_shadowmem.c:172) valgrind stack top usage: 15328 of 1048576 When the 2nd clone break is encountered (in the child thread), here is the GDB stacktraces: Thread 2 (Thread 6028): #0 0x0000008074f75fb0 in .madvise () from /lib64/libc.so.6 #1 0x000000807517c700 in start_thread (arg=0x4c6f200) at pthread_create.c:402 #2 0x0000008074f7acf0 in .__clone () from /lib64/libc.so.6 Thread 1 (Thread 41687): #0 pthread_create_WRK (thread=0xfff00ee10, attr=0x0, start=@0x100200e8: 0x10001dd0 <steer>, arg=0xfff00ee18) at hg_intercepts.c:248 #1 0x000000000403ef1c in _vgw00000ZZ_libpthreadZdsoZd0_pthreadZucreateZAZa (thread=<optimized out>, attr=<optimized out>, start=<optimized out>, arg=<optimized out>) at hg_intercepts.c:300 #2 0x000000003806f1d8 in ?? () #3 0x0000008074e9fb94 in generic_start_main (main=@0x100200d8: 0x100013a0 <main>, argc=<optimized out>, ubp_av=0xfff00f2d8, auxvec=0xfff00f408, init=<optimized out>, rtld_fini=<optimized out>, stack_end=<optimized out>, fini=<optimized out>) at ../csu/libc-start.c:225 #4 0x0000008074e9fd90 in __libc_start_main (argc=<optimized out>, ubp_av=<optimized out>, ubp_ev=<optimized out>, auxvec=<optimized out>, rtld_fini=<optimized out>, stinfo=<optimized out>, stack_on_entry=<optimized out>) at ../sysdeps/unix/sysv/linux/powerpc/libc-start.c:91 #5 0x0000000000000000 in ?? () (gdb) Here are the valgrind stacktraces: Thread 1: status = VgTs_Runnable ==41687== at 0x403EBE0: pthread_create_WRK (hg_intercepts.c:248) ==41687== by 0x403EF1B: pthread_create@* (hg_intercepts.c:300) ==41687== by 0x8074E9FB93: generic_start_main.isra.0 (libc-start.c:225) ==41687== by 0x8074E9FD8F: (below main) (libc-start.c:91) valgrind stack top usage: 15328 of 1048576 Thread 2: status = VgTs_WaitSys ==41687== at 0x8074F75FB0: madvise (in /usr/lib64/libc-2.16.so) ==41687== by 0x807517C6FF: start_thread (pthread_create.c:402) valgrind stack top usage: 10320 of 1048576 And then after a few more next/breaks: Thread 1: status = VgTs_Runnable ==41687== at 0x8074F7AC5C: clone (in /usr/lib64/libc-2.16.so) ==41687== by 0x807517B1EB: do_clone.constprop.3 (createthread.c:74) ==41687== by 0x403EF1B: pthread_create@* (hg_intercepts.c:300) ==41687== by 0x100015BB: main (tc19_shadowmem.c:173) valgrind stack top usage: 15328 of 1048576 Thread 2: status = VgTs_WaitSys ==41687== at 0x8074F75FB0: madvise (in /usr/lib64/libc-2.16.so) ==41687== by 0x807517C6FF: start_thread (pthread_create.c:402) valgrind stack top usage: 10320 of 1048576 So, pthread_create_WRK is not in the stacktrace anymore. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13983 a5019735-40e9-0310-863c-91ae7b9d1cf9
/external/valgrind/helgrind/tests/tc09_bad_unlock.stderr.exp
|