Waldemar Brodkorb
2016-05-16 09:54:39 UTC
Hi,
I compile and test the thread test app from here on
Qemu coldfire emulation:
http://debug.openadk.org/arm-pthreads/hello.c
Sometimes it works, sometimes I get SIGILL.
Here is the strace output when I get SIGILL:
~ # strace -f /test
ioctl(0, TCGETS, {B115200 opost isig icanon echo ...}) = 0
ioctl(1, TCGETS, {B115200 opost isig icanon echo ...}) = 0
getpid() = 115
rt_sigaction(SIGRTMIN, {0x46c6184e, [], 0}, NULL, 8) = 0
rt_sigaction(SIGRT_1, {0x46c617ba, [RTMIN], 0}, NULL, 8) = 0
rt_sigaction(SIGRT_2, {0x46c613be, [], 0}, NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [RTMIN], NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [RT_1], NULL, 8) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS|MAP_UNINITIALIZED, 0, 0) = 0x46c76000
write(1, "x: 0, y: 0\n", 11x: 0, y: 0) = 11
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS|MAP_UNINITIALIZED, 0, 0) = 0x46aec000
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS|MAP_UNINITIALIZED, 0, 0) = 0x46aee000
pipe([3, 4]) = 0
clone(child_stack=0x46aedfe0, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND) = 116
write(4, "F\3069\340\0\0\0\5F\307\7\fF\307\t\\F\307^\230F\306L\224F\307^\210", 28) = 28
rt_sigprocmask(SIG_SETMASK, NULL, [RTMIN], 8) = 0
write(4, "F\307\5 \0\0\0\0\0\0\0\0F\306\1\214F\307^\304\200\0\0\0\0\0\0\0", 28) = 28
rt_sigprocmask(SIG_SETMASK, NULL, [RTMIN], 8) = 0
rt_sigsuspend([], 8strace: Process 116 attached <unfinished ...>
[pid 116] rt_sigprocmask(SIG_SETMASK, ~[TRAP RT_1], NULL, 8) = 0
[pid 116] read(3, "F\3069\340\0\0\0\5F\307\7\fF\307\t\\F\307^\230F\306L\224F\307^\210", 28) = 28
[pid 116] poll([{fd=3, events=POLLIN}], 1, 2000) = 1 ([{fd=3, revents=POLLIN}])
[pid 116] getppid() = 115
[pid 116] read(3, "F\307\5 \0\0\0\0\0\0\0\0F\306\1\214F\307^\304\200\0\0\0\0\0\0\0", 28) = 28
[pid 116] mmap2(NULL, 20480, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS|MAP_UNINITIALIZED, 0, 0) = 0x47f60000
[pid 116] clone(child_stack=0x47f63ea0, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|SIGRT_1) = 117
[pid 116] kill(115, SIGRTMIN <unfinished ...>
[pid 115] <... rt_sigsuspend resumed> ) = ? ERESTARTNOHAND (To be restarted if no handler)
[pid 115] --- SIGRTMIN {si_signo=SIGRTMIN, si_code=SI_USER, si_pid=116, si_uid=0} ---
[pid 115] sigreturn({mask=[RTMIN]}) = -1 EINTR (Interrupted system call)
[pid 115] write(1, "y increment finished\n", 21y increment finished) = 21
[pid 115] rt_sigprocmask(SIG_SETMASK, NULL, [RTMIN], 8) = 0
[pid 115] rt_sigsuspend([], 8strace: Process 117 attached <unfinished ...>
[pid 117] getpid() = 117
[pid 117] rt_sigprocmask(SIG_SETMASK, [RTMIN], NULL, 8) = 0
[pid 117] write(1, "x increment finished\n", 21x increment finished) = 21
[pid 117] kill(115, SIGRTMIN <unfinished ...>
[pid 115] <... rt_sigsuspend resumed> ) = ? ERESTARTNOHAND (To be restarted if no handler)
[pid 115] --- SIGRTMIN {si_signo=SIGRTMIN, si_code=SI_USER, si_pid=117, si_uid=0} ---
[pid 115] sigreturn({mask=[RTMIN]}) = -1 EINTR (Interrupted system call)
[pid 115] --- SIGILL {si_signo=SIGILL, si_code=ILL_ILLOPC, si_addr=0x46c6b220} ---
[pid 115] +++ killed by SIGILL +++
[pid 117] +++ killed by SIGILL +++
+++ killed by SIGILL +++
ILL
And here when it works:
~ # strace -f /test
ioctl(0, TCGETS, {B115200 opost isig icanon echo ...}) = 0
ioctl(1, TCGETS, {B115200 opost isig icanon echo ...}) = 0
getpid() = 111
rt_sigaction(SIGRTMIN, {0x46c6184e, [], 0}, NULL, 8) = 0
rt_sigaction(SIGRT_1, {0x46c617ba, [RTMIN], 0}, NULL, 8) = 0
rt_sigaction(SIGRT_2, {0x46c613be, [], 0}, NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [RTMIN], NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [RT_1], NULL, 8) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS|MAP_UNINITIALIZED, 0, 0) = 0x46c76000
write(1, "x: 0, y: 0\n", 11x: 0, y: 0) = 11
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS|MAP_UNINITIALIZED, 0, 0) = 0x47f68000
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS|MAP_UNINITIALIZED, 0, 0) = 0x47f6a000
pipe([3, 4]) = 0
clone(child_stack=0x47f69fe0, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND) = 112
write(4, "F\3069\340\0\0\0\5F\307\7\fF\307\t\\F\307^\230F\306L\224F\307^\210", 28) = 28
rt_sigprocmask(SIG_SETMASK, NULL, [RTMIN], 8) = 0
write(4, "F\307\5 \0\0\0\0\0\0\0\0F\306\1\214F\307^\304\200\0\0\0\0\0\0\0", 28) = 28
rt_sigprocmask(SIG_SETMASK, NULL, [RTMIN], 8) = 0
rt_sigsuspend([], 8strace: Process 112 attached <unfinished ...>
[pid 112] rt_sigprocmask(SIG_SETMASK, ~[TRAP RT_1], NULL, 8) = 0
[pid 112] read(3, "F\3069\340\0\0\0\5F\307\7\fF\307\t\\F\307^\230F\306L\224F\307^\210", 28) = 28
[pid 112] poll([{fd=3, events=POLLIN}], 1, 2000) = 1 ([{fd=3, revents=POLLIN}])
[pid 112] getppid() = 111
[pid 112] read(3, "F\307\5 \0\0\0\0\0\0\0\0F\306\1\214F\307^\304\200\0\0\0\0\0\0\0", 28) = 28
[pid 112] mmap2(NULL, 20480, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS|MAP_UNINITIALIZED, 0, 0) = 0x47f60000
[pid 112] clone(child_stack=0x47f63ea0, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|SIGRT_1) = 113
strace: Process 113 attached
[pid 113] getpid() = 113
[pid 113] rt_sigprocmask(SIG_SETMASK, [RTMIN], NULL, 8) = 0
[pid 113] write(1, "x increment finished\n", 21x increment finished) = 21
[pid 113] exit_group(0) = ?
[pid 113] +++ exited with 0 +++
[pid 112] kill(111, SIGRTMIN <unfinished ...>
[pid 111] <... rt_sigsuspend resumed> ) = ? ERESTARTNOHAND (To be restarted if no handler)
[pid 111] --- SIGRTMIN {si_signo=SIGRTMIN, si_code=SI_USER, si_pid=112, si_uid=0} ---
[pid 111] sigreturn({mask=[RTMIN]}) = -1 EINTR (Interrupted system call)
[pid 111] write(1, "y increment finished\n", 21y increment finished) = 21
[pid 111] write(4, "F\307\5 \0\0\0\1\0\0\4\2F\307_ F\306oXF\307\0074\0\0\0\0", 28) = 28
[pid 111] write(1, "x: 100, y: 100\n", 15x: 100, y: 100) = 15
[pid 111] write(4, "F\307\5 \0\0\0\2\0\0\0\0F\307_ \0\0\0\17F\306oXF\307\0074", 28) = 28
[pid 112] <... kill resumed> ) = 0
[pid 112] --- SIGRT_1 {si_signo=SIGRT_1, si_code=0x1, si_pid=113, si_uid=0} ---
[pid 112] sigreturn({mask=~[TRAP KILL STOP RT_1]}) = 0
[pid 112] poll([{fd=3, events=POLLIN}], 1, 2000) = 1 ([{fd=3, revents=POLLIN}])
[pid 112] getppid() = 111
[pid 112] wait4(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], WNOHANG|__WCLONE, NULL) = 113
[pid 112] wait4(-1, 0x47f69f74, WNOHANG|__WCLONE, NULL) = -1 ECHILD (No child processes)
[pid 112] read(3, "F\307\5 \0\0\0\1\0\0\4\2F\307_ F\306oXF\307\0074\0\0\0\0", 28) = 28
[pid 112] poll([{fd=3, events=POLLIN}], 1, 2000 <unfinished ...>
[pid 111] rt_sigprocmask(SIG_SETMASK, NULL, [RTMIN], 8) = 0
[pid 111] rt_sigsuspend([], 8 <unfinished ...>
[pid 112] <... poll resumed> ) = 1 ([{fd=3, revents=POLLIN}])
[pid 112] getppid() = 111
[pid 112] read(3, "F\307\5 \0\0\0\2\0\0\0\0F\307_ \0\0\0\17F\306oXF\307\0074", 28) = 28
[pid 112] kill(111, SIGRTMIN <unfinished ...>
[pid 111] <... rt_sigsuspend resumed> ) = ? ERESTARTNOHAND (To be restarted if no handler)
[pid 111] --- SIGRTMIN {si_signo=SIGRTMIN, si_code=SI_USER, si_pid=112, si_uid=0} ---
[pid 111] sigreturn({mask=[RTMIN]}) = -1 EINTR (Interrupted system call)
[pid 111] wait4(112, <unfinished ...>
[pid 112] <... kill resumed> ) = 0
[pid 112] exit_group(0) = ?
[pid 112] +++ exited with 0 +++
<... wait4 resumed> NULL, __WCLONE, NULL) = 112
exit_group(0) = ?
+++ exited with 0 +++
~ #
Tested with buildroot and qemu_m68k_mcf5208_defconfig. It uses gcc
4.9.3 and binutils 2.25.1. The kernel is 4.5.3 including the signal
handler patch. uClibc-ng 1.0.14 is used.
Any idea?
best regards
Waldemar
_______________________________________________
uClinux-dev mailing list
uClinux-***@uclinux.org
http://mailman.uclinux.org/mailman/listinfo/uclinux-dev
This message was resent by uclinux-***@uclinux.org
To unsubscribe see:
http://mailman.uclinux.org/mailman/options/uclinux-dev
I compile and test the thread test app from here on
Qemu coldfire emulation:
http://debug.openadk.org/arm-pthreads/hello.c
Sometimes it works, sometimes I get SIGILL.
Here is the strace output when I get SIGILL:
~ # strace -f /test
ioctl(0, TCGETS, {B115200 opost isig icanon echo ...}) = 0
ioctl(1, TCGETS, {B115200 opost isig icanon echo ...}) = 0
getpid() = 115
rt_sigaction(SIGRTMIN, {0x46c6184e, [], 0}, NULL, 8) = 0
rt_sigaction(SIGRT_1, {0x46c617ba, [RTMIN], 0}, NULL, 8) = 0
rt_sigaction(SIGRT_2, {0x46c613be, [], 0}, NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [RTMIN], NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [RT_1], NULL, 8) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS|MAP_UNINITIALIZED, 0, 0) = 0x46c76000
write(1, "x: 0, y: 0\n", 11x: 0, y: 0) = 11
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS|MAP_UNINITIALIZED, 0, 0) = 0x46aec000
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS|MAP_UNINITIALIZED, 0, 0) = 0x46aee000
pipe([3, 4]) = 0
clone(child_stack=0x46aedfe0, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND) = 116
write(4, "F\3069\340\0\0\0\5F\307\7\fF\307\t\\F\307^\230F\306L\224F\307^\210", 28) = 28
rt_sigprocmask(SIG_SETMASK, NULL, [RTMIN], 8) = 0
write(4, "F\307\5 \0\0\0\0\0\0\0\0F\306\1\214F\307^\304\200\0\0\0\0\0\0\0", 28) = 28
rt_sigprocmask(SIG_SETMASK, NULL, [RTMIN], 8) = 0
rt_sigsuspend([], 8strace: Process 116 attached <unfinished ...>
[pid 116] rt_sigprocmask(SIG_SETMASK, ~[TRAP RT_1], NULL, 8) = 0
[pid 116] read(3, "F\3069\340\0\0\0\5F\307\7\fF\307\t\\F\307^\230F\306L\224F\307^\210", 28) = 28
[pid 116] poll([{fd=3, events=POLLIN}], 1, 2000) = 1 ([{fd=3, revents=POLLIN}])
[pid 116] getppid() = 115
[pid 116] read(3, "F\307\5 \0\0\0\0\0\0\0\0F\306\1\214F\307^\304\200\0\0\0\0\0\0\0", 28) = 28
[pid 116] mmap2(NULL, 20480, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS|MAP_UNINITIALIZED, 0, 0) = 0x47f60000
[pid 116] clone(child_stack=0x47f63ea0, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|SIGRT_1) = 117
[pid 116] kill(115, SIGRTMIN <unfinished ...>
[pid 115] <... rt_sigsuspend resumed> ) = ? ERESTARTNOHAND (To be restarted if no handler)
[pid 115] --- SIGRTMIN {si_signo=SIGRTMIN, si_code=SI_USER, si_pid=116, si_uid=0} ---
[pid 115] sigreturn({mask=[RTMIN]}) = -1 EINTR (Interrupted system call)
[pid 115] write(1, "y increment finished\n", 21y increment finished) = 21
[pid 115] rt_sigprocmask(SIG_SETMASK, NULL, [RTMIN], 8) = 0
[pid 115] rt_sigsuspend([], 8strace: Process 117 attached <unfinished ...>
[pid 117] getpid() = 117
[pid 117] rt_sigprocmask(SIG_SETMASK, [RTMIN], NULL, 8) = 0
[pid 117] write(1, "x increment finished\n", 21x increment finished) = 21
[pid 117] kill(115, SIGRTMIN <unfinished ...>
[pid 115] <... rt_sigsuspend resumed> ) = ? ERESTARTNOHAND (To be restarted if no handler)
[pid 115] --- SIGRTMIN {si_signo=SIGRTMIN, si_code=SI_USER, si_pid=117, si_uid=0} ---
[pid 115] sigreturn({mask=[RTMIN]}) = -1 EINTR (Interrupted system call)
[pid 115] --- SIGILL {si_signo=SIGILL, si_code=ILL_ILLOPC, si_addr=0x46c6b220} ---
[pid 115] +++ killed by SIGILL +++
[pid 117] +++ killed by SIGILL +++
+++ killed by SIGILL +++
ILL
And here when it works:
~ # strace -f /test
ioctl(0, TCGETS, {B115200 opost isig icanon echo ...}) = 0
ioctl(1, TCGETS, {B115200 opost isig icanon echo ...}) = 0
getpid() = 111
rt_sigaction(SIGRTMIN, {0x46c6184e, [], 0}, NULL, 8) = 0
rt_sigaction(SIGRT_1, {0x46c617ba, [RTMIN], 0}, NULL, 8) = 0
rt_sigaction(SIGRT_2, {0x46c613be, [], 0}, NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [RTMIN], NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [RT_1], NULL, 8) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS|MAP_UNINITIALIZED, 0, 0) = 0x46c76000
write(1, "x: 0, y: 0\n", 11x: 0, y: 0) = 11
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS|MAP_UNINITIALIZED, 0, 0) = 0x47f68000
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS|MAP_UNINITIALIZED, 0, 0) = 0x47f6a000
pipe([3, 4]) = 0
clone(child_stack=0x47f69fe0, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND) = 112
write(4, "F\3069\340\0\0\0\5F\307\7\fF\307\t\\F\307^\230F\306L\224F\307^\210", 28) = 28
rt_sigprocmask(SIG_SETMASK, NULL, [RTMIN], 8) = 0
write(4, "F\307\5 \0\0\0\0\0\0\0\0F\306\1\214F\307^\304\200\0\0\0\0\0\0\0", 28) = 28
rt_sigprocmask(SIG_SETMASK, NULL, [RTMIN], 8) = 0
rt_sigsuspend([], 8strace: Process 112 attached <unfinished ...>
[pid 112] rt_sigprocmask(SIG_SETMASK, ~[TRAP RT_1], NULL, 8) = 0
[pid 112] read(3, "F\3069\340\0\0\0\5F\307\7\fF\307\t\\F\307^\230F\306L\224F\307^\210", 28) = 28
[pid 112] poll([{fd=3, events=POLLIN}], 1, 2000) = 1 ([{fd=3, revents=POLLIN}])
[pid 112] getppid() = 111
[pid 112] read(3, "F\307\5 \0\0\0\0\0\0\0\0F\306\1\214F\307^\304\200\0\0\0\0\0\0\0", 28) = 28
[pid 112] mmap2(NULL, 20480, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS|MAP_UNINITIALIZED, 0, 0) = 0x47f60000
[pid 112] clone(child_stack=0x47f63ea0, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|SIGRT_1) = 113
strace: Process 113 attached
[pid 113] getpid() = 113
[pid 113] rt_sigprocmask(SIG_SETMASK, [RTMIN], NULL, 8) = 0
[pid 113] write(1, "x increment finished\n", 21x increment finished) = 21
[pid 113] exit_group(0) = ?
[pid 113] +++ exited with 0 +++
[pid 112] kill(111, SIGRTMIN <unfinished ...>
[pid 111] <... rt_sigsuspend resumed> ) = ? ERESTARTNOHAND (To be restarted if no handler)
[pid 111] --- SIGRTMIN {si_signo=SIGRTMIN, si_code=SI_USER, si_pid=112, si_uid=0} ---
[pid 111] sigreturn({mask=[RTMIN]}) = -1 EINTR (Interrupted system call)
[pid 111] write(1, "y increment finished\n", 21y increment finished) = 21
[pid 111] write(4, "F\307\5 \0\0\0\1\0\0\4\2F\307_ F\306oXF\307\0074\0\0\0\0", 28) = 28
[pid 111] write(1, "x: 100, y: 100\n", 15x: 100, y: 100) = 15
[pid 111] write(4, "F\307\5 \0\0\0\2\0\0\0\0F\307_ \0\0\0\17F\306oXF\307\0074", 28) = 28
[pid 112] <... kill resumed> ) = 0
[pid 112] --- SIGRT_1 {si_signo=SIGRT_1, si_code=0x1, si_pid=113, si_uid=0} ---
[pid 112] sigreturn({mask=~[TRAP KILL STOP RT_1]}) = 0
[pid 112] poll([{fd=3, events=POLLIN}], 1, 2000) = 1 ([{fd=3, revents=POLLIN}])
[pid 112] getppid() = 111
[pid 112] wait4(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], WNOHANG|__WCLONE, NULL) = 113
[pid 112] wait4(-1, 0x47f69f74, WNOHANG|__WCLONE, NULL) = -1 ECHILD (No child processes)
[pid 112] read(3, "F\307\5 \0\0\0\1\0\0\4\2F\307_ F\306oXF\307\0074\0\0\0\0", 28) = 28
[pid 112] poll([{fd=3, events=POLLIN}], 1, 2000 <unfinished ...>
[pid 111] rt_sigprocmask(SIG_SETMASK, NULL, [RTMIN], 8) = 0
[pid 111] rt_sigsuspend([], 8 <unfinished ...>
[pid 112] <... poll resumed> ) = 1 ([{fd=3, revents=POLLIN}])
[pid 112] getppid() = 111
[pid 112] read(3, "F\307\5 \0\0\0\2\0\0\0\0F\307_ \0\0\0\17F\306oXF\307\0074", 28) = 28
[pid 112] kill(111, SIGRTMIN <unfinished ...>
[pid 111] <... rt_sigsuspend resumed> ) = ? ERESTARTNOHAND (To be restarted if no handler)
[pid 111] --- SIGRTMIN {si_signo=SIGRTMIN, si_code=SI_USER, si_pid=112, si_uid=0} ---
[pid 111] sigreturn({mask=[RTMIN]}) = -1 EINTR (Interrupted system call)
[pid 111] wait4(112, <unfinished ...>
[pid 112] <... kill resumed> ) = 0
[pid 112] exit_group(0) = ?
[pid 112] +++ exited with 0 +++
<... wait4 resumed> NULL, __WCLONE, NULL) = 112
exit_group(0) = ?
+++ exited with 0 +++
~ #
Tested with buildroot and qemu_m68k_mcf5208_defconfig. It uses gcc
4.9.3 and binutils 2.25.1. The kernel is 4.5.3 including the signal
handler patch. uClibc-ng 1.0.14 is used.
Any idea?
best regards
Waldemar
_______________________________________________
uClinux-dev mailing list
uClinux-***@uclinux.org
http://mailman.uclinux.org/mailman/listinfo/uclinux-dev
This message was resent by uclinux-***@uclinux.org
To unsubscribe see:
http://mailman.uclinux.org/mailman/options/uclinux-dev