Add support for Android 5, both 32- and 64-bit cases.
authorAndy Polyakov <appro@openssl.org>
Mon, 11 May 2015 10:04:12 +0000 (12:04 +0200)
committerAndy Polyakov <appro@openssl.org>
Wed, 13 May 2015 16:04:56 +0000 (18:04 +0200)
Special note about additional -pie flag in android-armv7. The initial
reason for adding it is that Android 5 refuses to execute non-PIE
binaries. But what about older systems and previously validated
platforms? It should be noted that flag is not used when compiling
object code, fipscanister.o in this context, only when linking
applications, *supplementary* fips_algvs used during validation
procedure.

Reviewed-by: Dr. Stephen Henson <steve@openssl.org>
(cherry picked from commit 6db8e3bdc9ef83d83b83f3eec9722c96daa91f82)

Resolved conflicts:
test/fips_algvs.c

Configure
config
fips/fips_canister.c
fips/fips_test_suite.c
test/fips_algvs.c

index 38119577be026a54109f2e5f48a4b40090fabe47..6bb8f10c2a0e3bc947fab985f8e2087e903e09bd 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -402,7 +402,8 @@ my %table=(
 # Android: linux-* but without -DTERMIO and pointers to headers and libs.
 "android","gcc:-mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 "android-x86","gcc:-mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:".eval{my $asm=${x86_elf_asm};$asm=~s/:elf/:android/;$asm}.":dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-"android-armv7","gcc:-march=armv7-a -mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${armv4_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"android-armv7","gcc:-march=armv7-a -mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-pie%-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${armv4_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"android64-aarch64","gcc:-mandroid -fPIC -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -Wall::-D_REENTRANT::-pie%-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${aarch64_asm}:linux64:dlfcn:linux-shared:::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
 #### *BSD [do see comment about ${BSDthreads} above!]
 "BSD-generic32","gcc:-DTERMIOS -O3 -fomit-frame-pointer -Wall::${BSDthreads}:::BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL:${no_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
diff --git a/config b/config
index 5c8053946b0171c8c0d98c2263cbffcbf10bc8b8..4003e2fe523936f832647e9684508bbfb504d05e 100755 (executable)
--- a/config
+++ b/config
@@ -861,6 +861,7 @@ case "$GUESSOS" in
   *-*-qnx6) OUT="QNX6" ;;
   x86-*-android|i?86-*-android) OUT="android-x86" ;;
   armv[7-9]*-*-android) OUT="android-armv7" ;;
+  aarch64-*-android) OUT="android64-aarch64" ;;
   *) OUT=`echo $GUESSOS | awk -F- '{print $3}'`;;
 esac
 
index 016d94c9767ab08ec3b51473ed9c9c271d39ef66..daf53cb40dd3da054f978c9d0fbbb2a02907b600 100644 (file)
@@ -29,6 +29,7 @@ const void         *FIPS_text_end(void);
 
 #if !defined(FIPS_REF_POINT_IS_CROSS_COMPILER_AWARE)
 # if   (defined(__ANDROID__) && (defined(__arm__) || defined(__arm)    || \
+                                 defined(__aarch64__)                  || \
                                  defined(__i386__)|| defined(__i386))) || \
        (defined(__vxworks)   && (defined(__ppc__) || defined(__ppc)    || \
                                  defined(__mips__)|| defined(__mips))) || \
index 7813d25ee03b18c511e7b0d4962e3243d6e89bf8..cd4aafbd128c2157c8cc80fdb816e4189b8f7496 100644 (file)
@@ -1611,7 +1611,7 @@ int main(int argc, char **argv)
 
     FIPS_post_set_callback(post_cb);
 
-#if defined(__APPLE__) && (defined(__arm__) || defined(__aarch64__))
+#if (defined(__arm__) || defined(__aarch64__))
     extern unsigned int OPENSSL_armcap_P;
     if (0 == OPENSSL_armcap_P)
        fprintf(stderr, "Optimizations disabled\n");
index 1b463ea039914e842f720bd8467f487c1d0c8dc4..8ff75dcd2e0772615ac9bf574ea19578682ca6f2 100644 (file)
@@ -326,6 +326,16 @@ int main(int argc, char **argv)
        SysInit();
 #endif
 
+#if (defined(__arm__) || defined(__aarch64__))
+       if (*args && !strcmp(*args, "-noaccel"))
+               {
+               extern unsigned int OPENSSL_armcap_P;
+
+               OPENSSL_armcap_P=0;
+               args++;
+               argc--;
+               }
+#endif
        if (*args && *args[0] != '-')
                {
                rv = run_prg(argc - 1, args);