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. _______________________________________________ Mailing list: https://launchpad.net/~registry Post to : [email protected] Unsubscribe : https://launchpad.net/~registry More help : https://help.launchpad.net/ListHelp

