Update dependencies.
[openssl.git] / fips / fips_canister.c
index d71b5d5a3d860ec08a981b27f896d884a8e753ae..a1f84004793fe3441678346b7af31dce7c50d3f9 100644 (file)
@@ -27,10 +27,11 @@ const void         *FIPS_text_end(void);
 # endif
 #endif
 
-#if !defined(FIPS_REF_POINT_IS_SAFE_TO_CROSS_COMPILE)
+#if !defined(FIPS_REF_POINT_IS_CROSS_COMPILER_AWARE)
 # if   (defined(__ANDROID__) && (defined(__arm__) || defined(__arm)))  || \
-       (defined(__vxworks)   && (defined(__ppc__) || defined(__ppc)))
-#  define FIPS_REF_POINT_IS_SAFE_TO_CROSS_COMPILE
+       (defined(__vxworks)   && (defined(__ppc__) || defined(__ppc)))  || \
+       (defined(__linux)     && defined(__PPC__) && !defined(__PPC64__))
+#  define FIPS_REF_POINT_IS_CROSS_COMPILER_AWARE
 # endif
 #endif
 
@@ -46,7 +47,10 @@ static void *instruction_pointer_xlc(void);
 #endif
 
 #ifdef FIPS_START
-#define FIPS_ref_point FIPS_text_start
+# define FIPS_ref_point FIPS_text_start
+# ifdef FIPS_REF_POINT_IS_CROSS_COMPILER_AWARE
+#  define instruction_pointer  FIPS_text_startX
+# endif
 /* Some compilers put string literals into a separate segment. As we
  * are mostly interested to hash AES tables in .rodata, we declare
  * reference points accordingly. In case you wonder, the values are
@@ -55,7 +59,10 @@ static void *instruction_pointer_xlc(void);
 const unsigned int FIPS_rodata_start[]=
        { 0x46495053, 0x5f726f64, 0x6174615f, 0x73746172 };
 #else
-#define FIPS_ref_point FIPS_text_end
+# define FIPS_ref_point FIPS_text_end
+# ifdef FIPS_REF_POINT_IS_CROSS_COMPILER_AWARE
+#  define instruction_pointer  FIPS_text_endX
+# endif
 const unsigned int FIPS_rodata_end[]=
        { 0x46495053, 0x5f726f64, 0x6174615f, 0x656e645b };
 #endif
@@ -95,7 +102,7 @@ static void *instruction_pointer(void)
                        "move   %0,$31\n\t"
                        "move   $31,%1"         /* restore ra */
                        : "=r"(ret),"=r"(scratch) );
-# elif defined(__ppc__) || defined(__ppc) || \\
+# elif defined(__ppc__) || defined(__ppc) || \
        defined(__powerpc) || defined(__powerpc__) || \
        defined(__POWERPC__) || defined(_POWER) || defined(__PPC__) || \
        defined(__PPC64__) || defined(__ppc64__) || defined(__powerpc64__)
@@ -149,9 +156,9 @@ static void *instruction_pointer(void)
  */
 const void *FIPS_ref_point()
 {
-#if    defined(FIPS_REF_POINT_IS_SAFE_TO_CROSS_COMPILE)
-    return (void *)FIPS_ref_point;
-#if    defined(INSTRUCTION_POINTER_IMPLEMENTED)
+#if    defined(FIPS_REF_POINT_IS_CROSS_COMPILER_AWARE)
+    return (void *)instruction_pointer;
+#elif  defined(INSTRUCTION_POINTER_IMPLEMENTED)
     return instruction_pointer();
 /* Below we essentially cover vendor compilers which do not support
  * inline assembler... */