summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndy Polyakov <appro@openssl.org>2015-05-11 12:04:12 +0200
committerAndy Polyakov <appro@openssl.org>2015-05-13 18:04:56 +0200
commit0ae16722876a9e424a1abc2c5285268476d99c35 (patch)
treedba93da993e06e7eeff6526a3487fd6aede5f227
parent292c1f34ec27f95fdc3c9dfa5c2df93dde7861e0 (diff)
Add support for Android 5, both 32- and 64-bit cases.
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
-rwxr-xr-xConfigure3
-rwxr-xr-xconfig1
-rw-r--r--fips/fips_canister.c1
-rw-r--r--fips/fips_test_suite.c2
-rw-r--r--test/fips_algvs.c10
5 files changed, 15 insertions, 2 deletions
diff --git a/Configure b/Configure
index 38119577be..6bb8f10c2a 100755
--- 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 5c8053946b..4003e2fe52 100755
--- 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
diff --git a/fips/fips_canister.c b/fips/fips_canister.c
index 016d94c976..daf53cb40d 100644
--- a/fips/fips_canister.c
+++ b/fips/fips_canister.c
@@ -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))) || \
diff --git a/fips/fips_test_suite.c b/fips/fips_test_suite.c
index 7813d25ee0..cd4aafbd12 100644
--- a/fips/fips_test_suite.c
+++ b/fips/fips_test_suite.c
@@ -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");
diff --git a/test/fips_algvs.c b/test/fips_algvs.c
index 1b463ea039..8ff75dcd2e 100644
--- a/test/fips_algvs.c
+++ b/test/fips_algvs.c
@@ -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);