(Note: this bug makes gst-inspect-0.10 crash, so that totem's configure can't detect whether required plugins are installed) liboil-0.3.12-4.fc8.ppc64 Filed upstream at: https://bugs.freedesktop.org/show_bug.cgi?id=11997 # gdb /usr/bin/gst-inspect-0.10 <snip> (gdb) run --gst-disable-registry-fork Starting program: /usr/bin/gst-inspect-0.10 --gst-disable-registry-fork Program received signal SIGILL, Illegal instruction. [Switching to Thread 4398051383792 (LWP 22970)] test_altivec (ignored=0x0) at liboilcpu.c:647 647 asm volatile ("vor v0, v0, v0\n"); (gdb) bt #0 test_altivec (ignored=0x0) at liboilcpu.c:647 #1 0x00000400048ff400 in oil_cpu_fault_check_try (func=@0x40004960b80: 0x400048ff300 <test_altivec>, priv=0x0) at liboilcpu.c:209 #2 0x00000400048ff5b8 in _oil_cpu_init () at liboilcpu.c:655 #3 0x0000040004900670 in oil_init () at liboilfunction.c:136 #4 0x0000040005836dd4 in ?? () from /usr/lib64/gstreamer-0.10/libgstaudioresample.so #5 0x0000040005833b30 in ?? () from /usr/lib64/gstreamer-0.10/libgstaudioresample.so #6 0x00000400000956ec in .gst_plugin_get_name () from /usr/lib64/libgstreamer-0.10.so.0 #7 0x0000040000095d6c in .gst_plugin_load_file () from /usr/lib64/libgstreamer-0.10.so.0 #8 0x000004000009c608 in .gst_default_registry_check_feature_version () from /usr/lib64/libgstreamer-0.10.so.0 #9 0x000004000009c8c4 in .gst_registry_scan_path () from /usr/lib64/libgstreamer-0.10.so.0 #10 0x0000040000052024 in .gst_registry_fork_set_enabled () from /usr/lib64/libgstreamer-0.10.so.0 #11 0x0000040000052344 in .gst_registry_fork_set_enabled () from /usr/lib64/libgstreamer-0.10.so.0 #12 0x00000400000538ec in .gst_init () from /usr/lib64/libgstreamer-0.10.so.0 #13 0x00000400002257cc in .g_option_context_parse () from /lib64/libglib-2.0.so.0 #14 0x0000000010005fc8 in ?? () #15 0x0000008015459f2c in .generic_start_main () from /lib64/libc.so.6 #16 0x000000801545a1c0 in .__libc_start_main () from /lib64/libc.so.6 #17 0x0000000000000000 in ?? ()
This problem makes totem not compile on PPC and PPC64 (see upstream bug, the problem occurs on both arches), adding to the blocker bugs.
Looks like: https://bugs.freedesktop.org/show_bug.cgi?id=10247 which was fixed by: http://webcvs.freedesktop.org/liboil/liboil/liboil/liboilcpu.c?r1=1.40&r2=1.41
Created attachment 161278 [details] liboil-0.3.12-altivec-fix.patch For some reason, I'm not in the ACLs for it, so can't commit. Let me know when the patch is in so I can update the reqs in gstreamer-plugins-good and gstreamer-plugins-base and gstreamer-plugins-good
Note that this needs to go in rawhide and probably F7 (although I won't be updating deps for F7, takes too long to go through the rebuilds/updates cycles).
Never mind, this patch is already in our version of liboil, so it's something else.
Note that you seem to have committed the patch and spec file changes, though :-/
My mistake, I was so sure this would fix it... I reverted the changes already.
Here's the second part of the patch that David committed: http://webcvs.freedesktop.org/liboil/liboil/liboil/liboilcpu.c?r1=1.42&r2=1.43&view=patch I believe this would fix it. Matthias, do you want to do the updates, or you want me to do them?
We're in for a fun ride, the patch doesn't compile (I tested locally first this time ;): https://bugs.freedesktop.org/show_bug.cgi?id=10247#c10
The fix is simple though, building in rawhide now.
And we need to remove the hand-made signal saving code as well: http://webcvs.freedesktop.org/liboil/liboil/liboil/liboilcpu.c?r1=1.43&r2=1.44 Testing now on a pSeries machine. Hopefully will finally fix the problem.
You wish it would work by now: https://bugs.freedesktop.org/show_bug.cgi?id=12027
The problem here is nothing to do with the explicit altivec test. The problem here is because you've told the compiler it's allowed to use altivec in normal C code, and recently is grew smart enough to actually do so. Just #if 0 the altivec tests in oil_cpu_detect_powerpc() and see it still die... Program received signal SIGILL, Illegal instruction. oil_prototype_from_string ( s=0x10032c98 "float *dest, int dstr, float *src, int sstr, int n") at liboilprototype.c:189 189 OilParameter param = { 0 }; (gdb) bt #0 oil_prototype_from_string ( s=0x10032c98 "float *dest, int dstr, float *src, int sstr, int n") at liboilprototype.c:189 #1 0x10002f18 in oil_test_new (klass=0x10042d58) at liboiltest.c:73 #2 0x100011a8 in oil_class_optimize (klass=0x10042d58) at liboilfunction.c:350 #3 0x28000488 in ?? () #4 0x100014a0 in oil_optimize_all () at liboilfunction.c:179 #5 0x100015b4 in oil_init () at liboilfunction.c:140 #6 0x10000adc in main () (gdb) x/i $pc 0x1002fe04 <oil_prototype_from_string+4>: vxor v0,v0,v0
Adding -fno-tree-vectorize to CFLAGS might help but since this project unfortunately uses autocrap instead of proper makefiles, I cannot test. I changed ALTIVEC_CFLAGS and LIBOIL_CFLAGS in both the top-level and liboil/Makefile but it still seems not to use what I set.
Just -fno-tree-vectorize isn't sufficient. Removing -maltivec seems to work: $ sed -i s/-maltivec/-Wa,-maltivec/ configure Although it might be nice to build it both ways and to link at runtime against the version which is appropriate. Glibc manages this kind of thing... how hard would it be for liboil?
After some changes: sed -i 's/CFLAGS="$CFLAGS "-maltivec""/CFLAGS="$CFLAGS "-fno-tree-vectorize -Wa,-maltivec""/' configure sed -i 's/LIBOIL_CFLAGS -maltivec/LIBOIL_CFLAGS -fno-tree-vectorize -Wa,-maltivec/' configure It still crashes: Starting program: /home/hadess/packages/BUILD/liboil-0.3.12/examples/.libs/lt-example1 Program received signal SIGILL, Illegal instruction. test_altivec (ignored=0x0) at liboilcpu.c:651 651 asm volatile ("vor v0, v0, v0\n"); (gdb) continue Continuing. Program received signal SIGSEGV, Segmentation fault. 0x00000080154bab88 in .__libc_malloc () from /lib64/libc.so.6 (gdb) bt #0 0x00000080154bab88 in .__libc_malloc () from /lib64/libc.so.6 #1 0x0000040000038f10 in oil_prototype_from_string (s=0x4000006ce10 "uint8_t *d_4xn, uint8_t* s_3xn, int n") at liboilprototype.c:195 #2 0x000004000003b518 in oil_test_new (klass=0x40000087fe8) at liboiltest.c:73 #3 0x0000040000036fbc in oil_class_optimize (klass=0x40000087fe8) at liboilfunction.c:350 #4 0x0000040000037370 in oil_optimize_all () at liboilfunction.c:181 #5 0x00000400000374f0 in oil_init () at liboilfunction.c:140 #6 0x0000000010000708 in main (argc=24, argv=0x0) at example1.c:41 (gdb) x/i $pc 0x80154bab88 <.__libc_malloc+136>: ld r31,0(r9) I'm at loss.
Filed as: http://bugs.freedesktop.org/show_bug.cgi?id=12111 I disabled PPC's altivec tests altogether, and managed to get it running. No altivec optimisations, but no crashes either. Testing in 0.3.12-9 now.
"Fixed" in 0.3.12-9. https://bugs.freedesktop.org/show_bug.cgi?id=12111 and https://bugs.freedesktop.org/show_bug.cgi?id=12027 are still there, and there's no Altivec optimisations on PPC though.
liboil-0.3.12-9.fc7 has been pushed to the Fedora 7 stable repository. If problems still persist, please make note of it in this bug report.
David Woodhouse has a build for this that selectively enables Altivec on PPC platforms that support it: http://koji.fedoraproject.org/koji/taskinfo?taskID=141552