X-Git-Url: https://git.openssl.org/?p=openssl.git;a=blobdiff_plain;f=crypto%2Fo_init.c;h=b7b969b00b5199f13e8c3435c07c222c62b514e3;hp=1017f3bb4be67fb17c08f7def275629f3a18f0ce;hb=c4cd8316068f1c3b5a0050e60b3ea21a20db276e;hpb=8cf88778ea1fe21bcbb16be778c79e418a3fbdd0 diff --git a/crypto/o_init.c b/crypto/o_init.c index 1017f3bb4b..b7b969b00b 100644 --- a/crypto/o_init.c +++ b/crypto/o_init.c @@ -1,5 +1,6 @@ /* o_init.c */ -/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL +/* + * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project. */ /* ==================================================================== @@ -10,7 +11,7 @@ * are met: * * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. + * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in @@ -55,77 +56,25 @@ #include #include #ifdef OPENSSL_FIPS -#include +# include +# include #endif -#if defined(__GNUC__) && __GNUC__>=2 - void OPENSSL_init(void) __attribute__((constructor)); - /* Most commonly this results in pointer to OPENSSL_init to be dropped - * to .ctors segment, which is traversed by GCC crtbegin.o upon - * program startup. Except on a.out OpenBSD where it results in - * _GLOBAL_$I$init() {init();} being auto-generated by - * compiler... But one way or another this is believed to cover - * *all* GCC targets. */ -#elif defined(_MSC_VER) -# ifdef _WINDLL - __declspec(dllexport) /* this is essentially cosmetics... */ -# endif - void OPENSSL_init(void); - static int init_wrapper(void) { OPENSSL_init(); return 0; } -# ifdef _WIN64 -# pragma section(".CRT$XCU",read) - __declspec(allocate(".CRT$XCU")) -# else -# pragma data_seg(".CRT$XCU") -# endif - static int (*p)(void) = init_wrapper; - /* This results in pointer to init to appear in .CRT segment, - * which is traversed by Visual C run-time initialization code. - * This applies to both Win32 and [all flavors of] Win64. */ -# pragma data_seg() -#elif defined(__SUNPRO_C) - void OPENSSL_init(void); -# pragma init(OPENSSL_init) - /* This results in a call to init to appear in .init segment. */ -#elif defined(__DECC) && (defined(__VMS) || defined(VMS)) - void OPENSSL_init(void); -# pragma __nostandard - globaldef { "LIB$INITIALIZ" } readonly _align (LONGWORD) - int spare[8] = {0}; - globaldef { "LIB$INITIALIZE" } readonly _align (LONGWORD) - void (*x_OPENSSL_init)(void) = OPENSSL_init; - /* Refer to LIB$INITIALIZE to ensure it exists in the image. */ - int lib$initialize(); - globaldef int (*lib_init_ref)() = lib$initialize; -# pragma __standard -#elif 0 - The rest has to be taken care of through command line: - - -Wl,-init,OPENSSL_init on OSF1 and IRIX - -Wl,+init,OPENSSL_init on HP-UX - -Wl,-binitfini:OPENSSL_init on AIX - - On ELF platforms this results in a call to OPENSSL_init to appear in - .init segment... -#endif - -/* Perform any essential OpenSSL initialization operations. - * Currently only sets FIPS callbacks +/* + * Perform any essential OpenSSL initialization operations. Currently only + * sets FIPS callbacks */ void OPENSSL_init(void) - { - static int done = 0; - if (done) - return; - done = 1; +{ + static int done = 0; + if (done) + return; + done = 1; #ifdef OPENSSL_FIPS - FIPS_set_locking_callbacks(CRYPTO_lock, CRYPTO_add_lock); - FIPS_set_error_callbacks(ERR_put_error, ERR_add_error_vdata); - FIPS_set_malloc_callbacks(CRYPTO_malloc, CRYPTO_free); -#endif -#if 1 - fprintf(stderr, "Called OPENSSL_init\n"); + FIPS_set_locking_callbacks(CRYPTO_lock, CRYPTO_add_lock); + FIPS_set_error_callbacks(ERR_put_error, ERR_add_error_vdata); + FIPS_set_malloc_callbacks(CRYPTO_malloc, CRYPTO_free); + RAND_init_fips(); #endif - } - +}