summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpkubaj <pkubaj@FreeBSD.org>2021-11-20 20:40:06 +0000
committerPauli <pauli@openssl.org>2021-12-09 16:07:14 +1100
commitf5485b97b6c9977c0d39c7669b9f97a879312447 (patch)
tree90e0d70744ee292114bfbfd0693c5cc9cd0c855a
parentf4f77c2d9756cee12875397276799a93f057d412 (diff)
downloadopenssl-new-f5485b97b6c9977c0d39c7669b9f97a879312447.tar.gz
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 <matt@openssl.org> Reviewed-by: Paul Dale <pauli@openssl.org> (Merged from https://github.com/openssl/openssl/pull/17090)
-rw-r--r--Configurations/10-main.conf25
-rwxr-xr-xConfigure2
-rw-r--r--crypto/ppccap.c12
-rwxr-xr-xutil/perl/OpenSSL/config.pm5
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" } ],