X-Git-Url: https://git.openssl.org/gitweb/?p=openssl.git;a=blobdiff_plain;f=crypto%2Fo_init.c;h=db4cdc443b8f4cc82617b27e13759ea46cc172df;hp=1a042ffc99103ef38f3f3a5104ea75acae55b6e5;hb=6d23cf97443bfedf755341b4f2d0d7fce254e020;hpb=c4acfb1fd049f52fb074b103be01cab5cf5c04f8 diff --git a/crypto/o_init.c b/crypto/o_init.c index 1a042ffc99..db4cdc443b 100644 --- a/crypto/o_init.c +++ b/crypto/o_init.c @@ -54,56 +54,9 @@ #include #include - -#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... +#ifdef OPENSSL_FIPS +#include +#include #endif /* Perform any essential OpenSSL initialization operations. @@ -116,7 +69,13 @@ void OPENSSL_init(void) if (done) return; done = 1; -#if 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); + RAND_init_fips(); +#endif +#if 0 fprintf(stderr, "Called OPENSSL_init\n"); #endif }