The branch master has been updated via f5485b97b6c9977c0d39c7669b9f97a879312447 (commit) from f4f77c2d9756cee12875397276799a93f057d412 (commit)
- Log ----------------------------------------------------------------- commit f5485b97b6c9977c0d39c7669b9f97a879312447 Author: pkubaj <pku...@freebsd.org> Date: Sat Nov 20 20:40:06 2021 +0000 Add support for BSD-ppc, BSD-ppc64 and BSD-ppc64le configurations OpenSSL assumes AT_HWCAP = 16 (as on Linux), but on FreeBSD AT_HWCAP = 25 Switch to using AT_HWCAP, and setting it to 16 if it is not defined. CLA: trivial Reviewed-by: Matt Caswell <m...@openssl.org> Reviewed-by: Paul Dale <pa...@openssl.org> (Merged from https://github.com/openssl/openssl/pull/17090) ----------------------------------------------------------------------- Summary of changes: Configurations/10-main.conf | 25 +++++++++++++++++++++++++ Configure | 2 +- crypto/ppccap.c | 12 ++++++++---- util/perl/OpenSSL/config.pm | 5 +++-- 4 files changed, 37 insertions(+), 7 deletions(-) diff --git a/Configurations/10-main.conf b/Configurations/10-main.conf index 9f8fb32a86..071b1e5abe 100644 --- a/Configurations/10-main.conf +++ b/Configurations/10-main.conf @@ -1070,6 +1070,31 @@ my %targets = ( perlasm_scheme => "linux64", }, + "BSD-ppc" => { + inherit_from => [ "BSD-generic32" ], + asm_arch => 'ppc32', + perlasm_scheme => "linux32", + lib_cppflags => add("-DB_ENDIAN"), + }, + + "BSD-ppc64" => { + inherit_from => [ "BSD-generic64" ], + cflags => add("-m64"), + cxxflags => add("-m64"), + lib_cppflags => add("-DB_ENDIAN"), + asm_arch => 'ppc64', + perlasm_scheme => "linux64", + }, + + "BSD-ppc64le" => { + inherit_from => [ "BSD-generic64" ], + cflags => add("-m64"), + cxxflags => add("-m64"), + lib_cppflags => add("-DL_ENDIAN"), + asm_arch => 'ppc64', + perlasm_scheme => "linux64le", + }, + "bsdi-elf-gcc" => { inherit_from => [ "BASE_unix" ], CC => "gcc", diff --git a/Configure b/Configure index b00b91ac63..f48b7ab075 100755 --- a/Configure +++ b/Configure @@ -1549,7 +1549,7 @@ my %predefined_CXX = $config{CXX} unless ($disabled{asm}) { # big endian systems can use ELFv2 ABI - if ($target eq "linux-ppc64") { + if ($target eq "linux-ppc64" || $target eq "BSD-ppc64") { $target{perlasm_scheme} = "linux64v2" if ($predefined_C{_CALL_ELF} == 2); } } diff --git a/crypto/ppccap.c b/crypto/ppccap.c index dca3c5342b..da371a5345 100644 --- a/crypto/ppccap.c +++ b/crypto/ppccap.c @@ -117,14 +117,18 @@ static unsigned long getauxval(unsigned long key) #endif /* I wish <sys/auxv.h> was universally available */ -#define HWCAP 16 /* AT_HWCAP */ +#ifndef AT_HWCAP +# define AT_HWCAP 16 /* AT_HWCAP */ +#endif #define HWCAP_PPC64 (1U << 30) #define HWCAP_ALTIVEC (1U << 28) #define HWCAP_FPU (1U << 27) #define HWCAP_POWER6_EXT (1U << 9) #define HWCAP_VSX (1U << 7) -#define HWCAP2 26 /* AT_HWCAP2 */ +#ifndef AT_HWCAP2 +# define AT_HWCAP2 26 /* AT_HWCAP2 */ +#endif #define HWCAP_VEC_CRYPTO (1U << 25) #define HWCAP_ARCH_3_00 (1U << 23) @@ -215,8 +219,8 @@ void OPENSSL_cpuid_setup(void) #ifdef OSSL_IMPLEMENT_GETAUXVAL { - unsigned long hwcap = getauxval(HWCAP); - unsigned long hwcap2 = getauxval(HWCAP2); + unsigned long hwcap = getauxval(AT_HWCAP); + unsigned long hwcap2 = getauxval(AT_HWCAP2); if (hwcap & HWCAP_FPU) { OPENSSL_ppccap_P |= PPC_FPU; diff --git a/util/perl/OpenSSL/config.pm b/util/perl/OpenSSL/config.pm index e3802ade43..50efef423a 100755 --- a/util/perl/OpenSSL/config.pm +++ b/util/perl/OpenSSL/config.pm @@ -739,8 +739,9 @@ EOF disable => [ 'sse2' ] } ], [ 'alpha.*-.*-.*bsd.*', { target => "BSD-generic64", defines => [ 'L_ENDIAN' ] } ], - [ 'powerpc64-.*-.*bsd.*', { target => "BSD-generic64", - defines => [ 'B_ENDIAN' ] } ], + [ 'powerpc-.*-.*bsd.*', { target => "BSD-ppc" } ], + [ 'powerpc64-.*-.*bsd.*', { target => "BSD-ppc64" } ], + [ 'powerpc64le-.*-.*bsd.*', { target => "BSD-ppc64le" } ], [ 'sparc64-.*-.*bsd.*', { target => "BSD-sparc64" } ], [ 'ia64-.*-.*bsd.*', { target => "BSD-ia64" } ], [ 'x86_64-.*-dragonfly.*', { target => "BSD-x86_64" } ],