mirror of
https://github.com/Zenithsiz/ftmemsim-valgrind.git
synced 2026-02-13 22:46:59 +00:00
196 lines
7.3 KiB
Plaintext
196 lines
7.3 KiB
Plaintext
- works on stock 2.4 kernels, but the scheduler loop must poll
|
|
- works on RH9 2.4.20-18.9 kernel, but doesn't seem quite as stable
|
|
as 2.5/2.6
|
|
for pending signals rather than relying on the kernel delivering them
|
|
to the right place.
|
|
- most tested on 2.6.0-test1 and up
|
|
|
|
- running job-control programs (ie, bash) under Valgrind won't work
|
|
properly without a kernel patch (as of 2.6.0-test2-mm2). This is because
|
|
threads in a thread group don't follow the thread group leader's changes
|
|
in process group ID, and they can't change it for themselves.
|
|
|
|
- SA_NOCLDWAIT doesn't work properly if the program is actually blocked
|
|
in wait4() when SIGCHLD arrives; the wait4() will return details for
|
|
the exiting child. In other circumstances children should be quietly reaped.
|
|
[ This may be fixable when running under RH2.4 and 2.6, since we can
|
|
set NOCLDWAIT in the kernel's state without risk of losing our child
|
|
threads. ]
|
|
|
|
- 2.4 has somewhat disfunctional thread/signal interactions, so many test
|
|
do not work as well under 2.4. In general, it should be no worse than
|
|
the old signal code. I don't intend spending a lot of time fixing this
|
|
because 2.6 is nearly ready for widespread use.
|
|
|
|
TODO:
|
|
|
|
- support application use of clone(). Interesting question is which
|
|
options do we support? Do we need to implement futex as well, or can
|
|
we just use the kernel's implementation?
|
|
|
|
========================================
|
|
Testing
|
|
|
|
I've been testing with the Posix test suite:
|
|
http://sourceforge.net/projects/posixtest/, version 1.2.0.
|
|
|
|
----------------------------------------
|
|
Expected failures:
|
|
|
|
conformance/interfaces/sigwaitinfo/6-1.test
|
|
pthread_kill() calls the tkill syscall, which causes a code of
|
|
SI_TKILL rather than the SI_USER which this test expects.
|
|
|
|
conformance/interfaces/sigrelse/3-*.test
|
|
glibc bug in sigrelse(), which fails without Valgrind too.
|
|
|
|
conformance/interfaces/pthread_barrier_*/*
|
|
Valgrind's libpthreads doesn't implement pthread_barrier_*.
|
|
(There are some passes, but I don't know why.)
|
|
|
|
conformance/interfaces/pthread_cond_timedwait/2-3
|
|
This test is just completely broken. It does expose a problem
|
|
in Valgrind's mutex implementation - it is too dependent on
|
|
the client code not doing stupid stuff. This test makes
|
|
Valgrind have an assertion failure.
|
|
|
|
conformance/interfaces/pthread_condattr_getpshared/*
|
|
pthread_condattr_getpshared not implemented
|
|
|
|
conformance/interfaces/pthread_condattr_setpshared/*
|
|
pthread_condattr_setpshared not implemented
|
|
|
|
conformance/interfaces/pthread_key_create/speculative/5-1
|
|
Valgrind should cope with key overload
|
|
|
|
conformance/interfaces/pthread_mutex_timedlock/*
|
|
not implemented
|
|
|
|
conformance/interfaces/pthread_rwlock_rdlock/2-1:
|
|
relies on pthread_setschedparam
|
|
|
|
conformance/interfaces/pthread_rwlock_timedrdlock/*
|
|
valgrind's libpthread.so: UNIMPLEMENTED FUNCTION: pthread_rwlock_timedrdlock
|
|
|
|
conformance/interfaces/pthread_rwlockattr_getpshared/*
|
|
pthread_rwlockattr_getpshared not implemented
|
|
|
|
conformance/interfaces/pthread_rwlockattr_setpshared/*
|
|
pthread_rwlockattr_setpshared not implemented
|
|
|
|
conformance/interfaces/sched_rr_get_interval/*
|
|
syscall 161 (sched_rr_get_interval) not implemented
|
|
|
|
conformance/interfaces/sigaction/21-1
|
|
Subtle problem: if app specifies SA_NOCLDWAIT on their SIGCHLD
|
|
signal handler, Valgrind will attempt to catch the SIGCHLD and
|
|
wait4() on all the children before returning to the app.
|
|
However, if the app was running a wait4() at the time the
|
|
SIGCHLD arrives, it will get the child's status. Quite what
|
|
the app is doing running wait4() when it explicitly asked for
|
|
it to be useless, I'm not sure...
|
|
|
|
conformance/interfaces/sigaction/17-{3,6,8,12}
|
|
(2.4) These fail under 2.4 because they deal with SIGSEGV, SIGBUS
|
|
and SIGILL. These signals can only be delivered if there's a
|
|
thread immediately ready to handle them, but cannot be left
|
|
pending indefinitely. These tests hang forever because the
|
|
signal is discarded rather than delivered.
|
|
|
|
conformance/interfaces/sigqueue/{1,4,8}-1
|
|
(2.4) Signals that we route manually do not have queued data
|
|
associated with them - they are routed with tkill. Also
|
|
pending signals are only kept in a mask, not in a queue, so
|
|
there can only be one at a time.
|
|
|
|
----------------------------------------
|
|
|
|
Still to investigate:
|
|
|
|
conformance/interfaces/pthread_detach/4-1
|
|
|
|
+conformance/interfaces/pthread_rwlock_rdlock/4-1: execution: FAILED: Output:
|
|
+main: attempt write lock
|
|
+main: acquired write lock
|
|
+sig_thread: attemp read lock
|
|
+main: fire SIGUSR1 to sig_thread
|
|
+SIGUSR1 was not caught by sig_thread
|
|
|
|
|
|
+conformance/interfaces/pthread_rwlock_unlock/4-1: execution: FAILED: Output:
|
|
+Test FAILED: Incorrect error code, expected 0 or EINVAL, got 1
|
|
|
|
+conformance/interfaces/pthread_rwlock_wrlock/2-1: execution: FAILED: Output:
|
|
+main: attempt write lock
|
|
+sig_thread: attempt write lock
|
|
+main: fire SIGUSR1 to sig_thread
|
|
+The signal handler did not get called.
|
|
|
|
+conformance/interfaces/pthread_rwlock_wrlock/3-1: execution: FAILED: Output:
|
|
+
|
|
+sched status:
|
|
+
|
|
+Thread 1: status = WaitCV, associated_mx = 0x40115910, associated_cv = 0x401158E0
|
|
+==11243== at 0x40102962: pthread_cond_wait (vg_libpthread.c:1093)
|
|
+==11243== by 0x40104976: __pthread_rwlock_wrlock (vg_libpthread.c:2619)
|
|
+==11243== by 0x8048588: main (3-1.c:53)
|
|
+==11243== by 0x4013DA46: __libc_start_main (in /lib/libc-2.3.2.so)
|
|
+
|
|
+==11243== Warning: pthread scheduler exited due to deadlock
|
|
+
|
|
+valgrind: vg_main.c:1619 (vgPlain_main): Assertion `vgPlain_threads[vgPlain_last_run_tid].status == VgTs_Runnable' failed.
|
|
+
|
|
+sched status:
|
|
+
|
|
+Thread 1: status = WaitCV, associated_mx = 0x40115910, associated_cv = 0x401158E0
|
|
+==11243== at 0x40102962: pthread_cond_wait (vg_libpthread.c:1093)
|
|
+==11243== by 0x40104976: __pthread_rwlock_wrlock (vg_libpthread.c:2619)
|
|
+==11243== by 0x8048588: main (3-1.c:53)
|
|
+==11243== by 0x4013DA46: __libc_start_main (in /lib/libc-2.3.2.so)
|
|
|
|
|
|
+conformance/interfaces/sem_close/1-1.test:
|
|
/home/jeremy/bk/valgrind/syscalls/coregrind/.in_place/libpthread.so.0:
|
|
version `GLIBC_2.1.1' not found (required by
|
|
conformance/interfaces/sem_close/1-1.test)
|
|
|
|
+conformance/interfaces/sem_timedwait/6-1: execution: FAILED: Output:
|
|
+TEST FAILED
|
|
+conformance/interfaces/sem_timedwait/6-2: execution: FAILED: Output:
|
|
+TEST FAILED
|
|
|
|
+conformance/interfaces/sem_timedwait/9-1: execution: FAILED: Output:
|
|
+In handler
|
|
+TEST FAILED: errno != EINTR
|
|
|
|
|
|
conformance/interfaces/sigaction/10-1:
|
|
Used to work. Mysterious. Works everywhere except in the test harness...
|
|
|
|
|
|
+conformance/interfaces/sigpause/1-2: execution: FAILED: Output:
|
|
+
|
|
+valgrind: vg_mylibc.c:1324 (vgPlain_read_millisecond_timer): Assertion `rdtsc_now > rdtsc_cal_end_raw' failed.
|
|
+
|
|
+sched status:
|
|
+
|
|
+Thread 1: status = Sleeping, associated_mx = 0x0, associated_cv = 0x0
|
|
+==19929== at 0x401D6765: __GI___libc_nanosleep (in /lib/libc-2.3.2.so)
|
|
+==19929== by 0x80485C1: main (1-2.c:65)
|
|
+==19929== by 0x4013DA46: __libc_start_main (in /lib/libc-2.3.2.so)
|
|
+==19929== by 0x8048494: ??? (start.S:81)
|
|
+
|
|
+Thread 2: status = WaitSys, associated_mx = 0x0, associated_cv = 0x0
|
|
+==19929== at 0x40150796: __libc_sigsuspend (in /lib/libc-2.3.2.so)
|
|
+==19929== by 0x401509B3: __GI___sigpause (in /lib/libc-2.3.2.so)
|
|
+==19929== by 0x804857C: a_thread_func (1-2.c:48)
|
|
+==19929== by 0x40102099: thread_wrapper (vg_libpthread.c:667)
|
|
|
|
|
|
|
|
----------------------------------------
|
|
|
|
Fixes:
|
|
conformance/interfaces/pthread_detach/4-2
|
|
This fails under NPTL, but passes under Valgrind
|