Hello, I see a very strange bug in crypto/sparcv9cap.c. OpenSSL 1.0.0d checks sparc capabilities with SIGILL signal. On sparc64 (both Linux and solaris, with UltraSPARC III+ and T1 CPU's), SIGILL handler is called and program terminates with SIGILL in _sparcv9_fmadd_probe:
00000001002a32d0 <_sparcv9_fmadd_probe>: 1002a32d0: 81 b0 0d 80 impdep1 108, %f0, %f0, %f0 1002a32d4: 85 b0 8d 82 impdep1 108, %f2, %f2, %f2 1002a32d8: 81 c3 e0 08 retl 1002a32dc: 81 b8 04 40 impdep2 34, %f0, %f0, %f0 <= here If I add printf() in signal handler, I see that it is called, and that siglongjmp() works. With my printf(), my program doesn't abort with SIGILL anymore but with SIGBUS (?!). Modifications : static void common_handler(int sig) { printf("Signal handler\n"); siglongjmp(common_jmp,sig); } I don't understand why, with this trivial modification, my program run fine (and of course prints "Signal handler" on stdout). Now, I build openssl with no-asm and my program works fine without this dirty patch. I have seen this bug some months ago (dec 2010) on a sparc T1 running Solaris, but I'm not able to remember how I have fixed this trouble... Best regards, JKB ______________________________________________________________________ OpenSSL Project http://www.openssl.org Development Mailing List openssl-dev@openssl.org Automated List Manager majord...@openssl.org