> >> and one more > >> > >> __sigaction_sigtramp(SIGILL...) > >> > >> Then, at the end: > >> > >> PSIG SIGILL SIG_DFL: code=ILL_ILLOPC, addr=0xedccbdf0, trap=2) > > Program was terminated due to an illegal opcode being detected in > the gcm_ghash_4bit() assembly function:
yes. John, can you, from gdb, print the value of OPENSSL_sparcv9cap_P[0] and OPENSSL_sparcv9cap_P[1]. if 1<<6 is set in the first, then the vis3 path will be taken in gcm_ghash_4bit(). it seems that these caps are setup wrongly. you could try to instrument OPENSSL_cpuid_setup() in crypto/external/bsd/openssl/dist/crypto/sparcv9cap.c to print the various settigs. it seems that SPARCV9_VIS3 is set. note that there are two places it can be set, but the first one is only for _SVR4 so not used here. nothing here seems changed with the update. these values should all be zero for real sparc 32 bit hardware (they're the sparcv9 caps after all :) > As a workaround, until the offending opcode is found, try > `#undef GHASH_ASM_SPARC' on line 692 in > src/crypto/external/bsd/openssl/dist/crypto/modes/gcm128.c to force > use of the C functions. good idea. .mrg.
