On PPC again, with the following test program: #include <stdio.h> #include <liboil/liboilcpu.h> int main (int argc, char **argv) { oil_init(); oil_init(); printf("done\n"); } $ libtool gdb ./test *** Warning: inferring the mode of operation is deprecated. *** Future versions of Libtool will require --mode=MODE be specified. GNU gdb Red Hat Linux (6.6-15.fc7rh) Copyright (C) 2006 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "ppc64-redhat-linux-gnu"... Using host libthread_db library "/lib64/libthread_db.so.1". (gdb) handle SIGILL nostop Signal Stop Print Pass to program Description SIGILL No Yes Yes Illegal instruction (gdb) handle SIGILL pass Signal Stop Print Pass to program Description SIGILL No Yes Yes Illegal instruction (gdb) run Starting program: /home/hadess/packages/BUILD/liboil-0.3.12/liboil/.libs/lt-test Program received signal SIGILL, Illegal instruction. Program received signal SIGILL, Illegal instruction. Program received signal SIGABRT, Aborted. 0x0000008015472024 in .raise () from /lib64/libc.so.6 (gdb) bt #0 0x0000008015472024 in .raise () from /lib64/libc.so.6 #1 0x0000008015473f6c in .abort () from /lib64/libc.so.6 #2 0x00000400000363f8 in illegal_instruction_handler (num=0) at liboilcpu.c:159 #3 <signal handler called> #4 oil_prototype_from_string (s=0x40000075cf0 "float *dest, int dstr, float *src, int sstr, int n") at liboilprototype.c:189 #5 0x000004000003b588 in oil_test_new (klass=0x400000964a0) at liboiltest.c:73 #6 0x0000040000036fdc in oil_class_optimize (klass=0x400000964a0) at liboilfunction.c:350 #7 0x0000040000037390 in oil_optimize_all () at liboilfunction.c:181 #8 0x0000040000037510 in oil_init () at liboilfunction.c:140 #9 0x0000000010000668 in main (argc=482544, argv=0x4000006aa88) at test.c:5
David Woodhouse, in https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=252179#c13 says: " 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. <snip> 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 " So either altivec needs to be disabled altogether, or 2 backends need to be compiled, one with altivec support, one without.
liboil stopped using -maltivec a while ago (brainfart), so I don't think this is likely to be a problem. Please test on the upcoming release.
*** Bug 12111 has been marked as a duplicate of this bug. ***
Tested with git HEAD, works. Closing.
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.