registry team mailing list archive
-
registry team
-
Mailing list archive
-
Message #15321
[Bug 72814] Re: Crash at login
Launchpad has imported 13 comments from the remote bug at
http://bugs.freedesktop.org/show_bug.cgi?id=10247.
If you reply to an imported comment from within Launchpad, your comment
will be sent to the remote bug automatically. Read more about
Launchpad's inter-bugtracker facilities at
https://help.launchpad.net/InterBugTracking.
------------------------------------------------------------------------
On 2007-03-10T13:06:31+00:00 didier wrote:
from setjmp manual:
POSIX does not specify whether setjmp() will save the signal context.
Example of strace output on a G3 running linux Ubuntu 2.6.20
strace -f gnome-sound-properties without a ~/.gstreamer-0.10
directory.
...
32021 open("/usr/lib/liboil-0.3.so.0", O_RDONLY) = 5
32021 rt_sigaction(SIGILL, {0xe0a3120, [], 0}, {SIG_DFL}, 8) = 0
...
32021 --- SIGILL (Illegal instruction) @ 0 (0) ---
no altivec
32021 rt_sigaction(SIGILL, {SIG_DFL}, NULL, 8) = 0
32021 rt_sigaction(SIGILL, {0xe0a3120, [], 0}, {SIG_DFL}, 8) = 0
32021 rt_sigaction(SIGILL, {SIG_DFL}, NULL, 8) = 0
32021 rt_sigaction(SIGSEGV, {SIG_DFL}, NULL, 8) = 0
...
32021 open("/usr/lib/libvisual-0.4.so.0", O_RDONLY) = 5
....
32021 rt_sigaction(SIGILL, {0xe03b884, [ILL], SA_RESTART}, {SIG_DFL}, 8) = 0
SIGILL is now blocked...
32021 rt_sigprocmask(SIG_BLOCK, NULL, [ILL], 8) = 0
32021 --- SIGILL (Illegal instruction) @ 0 (0) ---
undefined behaviour...
32020 <... read resumed> "", 1) = 0
32020 --- SIGCHLD (Child exited) @ 0 (0) ---
32020 close(3) = 0
Sure it's also a bug in libvisual but IMO a library should change signal
set if it doesn't need it.
Reply at: https://bugs.launchpad.net/liboil/+bug/72814/comments/12
------------------------------------------------------------------------
On 2007-03-10T13:40:22+00:00 didier wrote:
Can't create an attachment but the patch is obvious
diff -Nru /tmp/f3RzZU4qya/liboil-0.3.10/liboil/liboilcpu.c /tmp/6RumtZJFBp/liboil-0.3.10/liboil/liboilcpu.c
--- /tmp/f3RzZU4qya/liboil-0.3.10/liboil/liboilcpu.c 2007-03-09 12:38:34.000000000 +0100
+++ /tmp/6RumtZJFBp/liboil-0.3.10/liboil/liboilcpu.c 2007-03-09 12:38:37.000000000 +0100
@@ -142,7 +142,7 @@
illegal_instruction_handler (int num)
{
if (in_try_block) {
- longjmp (jump_env, 1);
+ siglongjmp (jump_env, 1);
} else {
abort ();
}
@@ -196,7 +196,7 @@
int ret;
in_try_block = 1;
- ret = setjmp (jump_env);
+ ret = sigsetjmp (jump_env,1);
if (!ret) {
func (priv);
}
Reply at: https://bugs.launchpad.net/liboil/+bug/72814/comments/13
------------------------------------------------------------------------
On 2007-03-16T14:46:34+00:00 David Schleef wrote:
What does this fix? Liboil code doesn't change any signal masks, so
it's not really important to save them or not.
Reply at: https://bugs.launchpad.net/liboil/+bug/72814/comments/15
------------------------------------------------------------------------
On 2007-03-17T02:47:43+00:00 didier wrote:
(In reply to comment #2)
> What does this fix? Liboil code doesn't change any signal masks, so it's not
> really important to save them or not.
>
Yes it does, SIGILL is blocked in the signal handler, and the longjmp
doesn't unblock it. In the strace output there's no call to sigset.
Reply at: https://bugs.launchpad.net/liboil/+bug/72814/comments/16
------------------------------------------------------------------------
On 2007-03-17T11:54:15+00:00 David Schleef wrote:
That's not in liboil, it's in libvisual.
Reply at: https://bugs.launchpad.net/liboil/+bug/72814/comments/17
------------------------------------------------------------------------
On 2007-03-22T10:07:10+00:00 didier wrote:
(In reply to comment #4)
> That's not in liboil, it's in libvisual.
>
If you compile the following code oil_cpu_test.c:
#include <stdio.h>
main()
{
_oil_cpu_init();
_oil_cpu_init();
printf("done\n");
}
gcc oil_cpu_test.c -o oil_cpu /usr/lib/liboil-0.3.a -lm
On a G3 for some systems (kernel/libc) it will dump core in the second
_oil_cpu_init
Reply at: https://bugs.launchpad.net/liboil/+bug/72814/comments/18
------------------------------------------------------------------------
On 2007-03-22T14:07:12+00:00 David Schleef wrote:
Ok, I see what the problem is now. Both the kernel and liboil have
changed subtlely since this was tested heavily.
Reply at: https://bugs.launchpad.net/liboil/+bug/72814/comments/19
------------------------------------------------------------------------
On 2007-08-14T08:43:18+00:00 Bastien Nocera wrote:
*** Bug 11997 has been marked as a duplicate of this bug. ***
Reply at: https://bugs.launchpad.net/liboil/+bug/72814/comments/28
------------------------------------------------------------------------
On 2007-08-14T10:54:35+00:00 David Schleef wrote:
*** Bug 11997 has been marked as a duplicate of this bug. ***
Reply at: https://bugs.launchpad.net/liboil/+bug/72814/comments/29
------------------------------------------------------------------------
On 2007-08-14T10:57:11+00:00 David Schleef wrote:
Checked in, finally.
Reply at: https://bugs.launchpad.net/liboil/+bug/72814/comments/30
------------------------------------------------------------------------
On 2007-08-15T01:28:29+00:00 Bastien Nocera wrote:
Doesn't compile:
liboilcpu.c:207:28: error: macro "sigsetjmp" requires 2 arguments, but only 1 given
liboilcpu.c: In function 'oil_cpu_fault_check_try':
liboilcpu.c:207: error: 'sigsetjmp' undeclared (first use in this function)
liboilcpu.c:207: error: (Each undeclared identifier is reported only once
liboilcpu.c:207: error: for each function it appears in.)
make[4]: *** [liboil_0.3_la-liboilcpu.lo] Error 1
That's on i686 with glibc-2.6.90-8 (Fedora Rawhide)
Reply at: https://bugs.launchpad.net/liboil/+bug/72814/comments/31
------------------------------------------------------------------------
On 2007-08-15T01:31:48+00:00 Bastien Nocera wrote:
- ret = sigsetjmp (jump_env);
+ ret = sigsetjmp (jump_env, 1);
That should do.
Reply at: https://bugs.launchpad.net/liboil/+bug/72814/comments/32
------------------------------------------------------------------------
On 2007-08-15T14:22:16+00:00 David Schleef wrote:
Er, I'm an idiot.
First of all, for checking in code that trivially doesn't compile.
Second, because I fixed the problem without using sigsetjmp/siglongjmp()
by restoring the signal mask by hand. Restoring the mask by hand has
the advantage of being slightly more thread-friendly, since it's an
atomic unmasking of SIGILL. I think. Also, I think I was worried that
siglongjmp() isn't supported on ${some_platform}.
Anyway, I'm leaving it as sigsetjmp/siglongjmp() because these function
calls are designed to do exactly what we're doing.
Reply at: https://bugs.launchpad.net/liboil/+bug/72814/comments/33
** Changed in: liboil
Importance: Unknown => Medium
--
Crash at login
https://bugs.launchpad.net/bugs/72814
You received this bug notification because you are a member of Registry
Administrators, which is the registrant for Debian.