X-Git-Url: https://git.openssl.org/gitweb/?p=openssl.git;a=blobdiff_plain;f=fips%2Ffips_canister.c;h=9e1b038197c40780c948f44da0d19e5337c6f2bf;hp=f00fc7b365ae1403a52582d9b2bb6d42369859a1;hb=43760a2cf02a6d710d40bd6ed43c7bf61918fadd;hpb=8fcdb1e60f0dcc09dff5395de95e884d4f8610ce diff --git a/fips/fips_canister.c b/fips/fips_canister.c index f00fc7b365..9e1b038197 100644 --- a/fips/fips_canister.c +++ b/fips/fips_canister.c @@ -30,8 +30,10 @@ const void *FIPS_text_end(void); #if !defined(FIPS_REF_POINT_IS_CROSS_COMPILER_AWARE) # if (defined(__ANDROID__) && (defined(__arm__) || defined(__arm) || \ defined(__i386__)|| defined(__i386))) || \ - (defined(__vxworks) && (defined(__ppc__) || defined(__ppc))) || \ - (defined(__linux) && defined(__PPC__) && !defined(__PPC64__)) + (defined(__vxworks) && (defined(__ppc__) || defined(__ppc) || \ + defined(__mips__)|| defined(__mips))) || \ + (defined(__linux) && ((defined(__PPC__) && !defined(__PPC64__)) || \ + defined(__arm__) || defined(__arm))) # define FIPS_REF_POINT_IS_CROSS_COMPILER_AWARE # endif #endif @@ -57,8 +59,14 @@ static void *instruction_pointer_xlc(void); * reference points accordingly. In case you wonder, the values are * big-endian encoded variable names, just to prevent these arrays * from being merged by linker. */ -# if defined(_MSC_VER) && defined(_WIN64) -# pragma section("fipsro$a",read) +# if defined(_MSC_VER) +# pragma code_seg("fipstx") +# pragma code_seg() + __declspec(allocate("fipstx")) +const unsigned int FIPS_text_startX[]= + { 0x46495053, 0x5f746578, 0x745f7374, 0x61727458 }; +# pragma const_seg("fipsro$a") +# pragma const_seg() __declspec(allocate("fipsro$a")) # endif const unsigned int FIPS_rodata_start[]= @@ -68,14 +76,21 @@ const unsigned int FIPS_rodata_start[]= # ifdef FIPS_REF_POINT_IS_CROSS_COMPILER_AWARE # define instruction_pointer FIPS_text_endX # endif -# if defined(_MSC_VER) && defined(_WIN64) -# pragma section("fipsro$c",read) - __declspec(allocate("fipsro$c")) +# if defined(_MSC_VER) +# pragma code_seg("fipstx$z") +# pragma code_seg() + __declspec(allocate("fipstx$z")) +const unsigned int FIPS_text_endX[]= + { 0x46495053, 0x5f746578, 0x745f656e, 0x64585b5d }; +# pragma const_seg("fipsro$z") +# pragma const_seg() + __declspec(allocate("fipsro$z")) # endif const unsigned int FIPS_rodata_end[]= { 0x46495053, 0x5f726f64, 0x6174615f, 0x656e645b }; #endif +#if !defined(_MSC_VER) || !defined(instruction_pointer) /* * I declare reference function as static in order to avoid certain * pitfalls in -dynamic linker behaviour... @@ -157,6 +172,7 @@ static void *instruction_pointer(void) #endif return ret; } +#endif /* * This function returns pointer to an instruction in the vicinity of @@ -166,7 +182,11 @@ static void *instruction_pointer(void) const void *FIPS_ref_point() { #if defined(FIPS_REF_POINT_IS_CROSS_COMPILER_AWARE) +# if defined(__thumb__) || defined(__thumb) + return (void *)((size_t)instruction_pointer&~1); +# else return (void *)instruction_pointer; +# endif #elif defined(INSTRUCTION_POINTER_IMPLEMENTED) return instruction_pointer(); /* Below we essentially cover vendor compilers which do not support