Skip to content

Commit

Permalink
Bug 1602386 - Fix build on FreeBSD/powerpc platforms. r=jcj
Browse files Browse the repository at this point in the history
FreeBSD has elf_aux_info instead of getauxval, but only since FreeBSD 12. Previous versions (11 is still supported) don't have any equivalent and users need to query sysctl manually.

Differential Revision: https://phabricator.services.mozilla.com/D56712

--HG--
extra : moz-landing-system : lando
  • Loading branch information
pkubaj committed Jan 27, 2020
1 parent 97df5ad commit e619cde
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 2 deletions.
4 changes: 3 additions & 1 deletion lib/freebl/Makefile
Expand Up @@ -778,7 +778,9 @@ $(OBJDIR)/$(PROG_PREFIX)gcm-aarch64$(OBJ_SUFFIX): CFLAGS += -march=armv8-a+crypt
endif

ifeq ($(CPU_ARCH),ppc)
$(OBJDIR)/$(PROG_PREFIX)gcm-ppc$(OBJ_SUFFIX): CFLAGS += -mcrypto -maltivec
$(OBJDIR)/$(PROG_PREFIX)gcm-ppc$(OBJ_SUFFIX): CFLAGS += -mcrypto -maltivec -mvsx
$(OBJDIR)/$(PROG_PREFIX)gcm$(OBJ_SUFFIX): CFLAGS += -mcrypto -maltivec -mvsx
$(OBJDIR)/$(PROG_PREFIX)rijndael$(OBJ_SUFFIX): CFLAGS += -mcrypto -maltivec -mvsx
endif

$(OBJDIR)/$(PROG_PREFIX)Hacl_Chacha20_Vec128$(OBJ_SUFFIX): CFLAGS += -mssse3 -msse4 -mavx -maes
Expand Down
16 changes: 15 additions & 1 deletion lib/freebl/blinit.c
Expand Up @@ -431,7 +431,11 @@ ppc_crypto_support()

#if defined(__powerpc__)

#if defined(__linux__) || (defined(__FreeBSD__) && __FreeBSD__ >= 12)
#include <sys/auxv.h>
#elif (defined(__FreeBSD__) && __FreeBSD__ < 12)
#include <sys/sysctl.h>
#endif

// Defines from cputable.h in Linux kernel - PPC, letting us build on older kernels
#ifndef PPC_FEATURE2_VEC_CRYPTO
Expand All @@ -443,7 +447,17 @@ CheckPPCSupport()
{
char *disable_hw_crypto = PR_GetEnvSecure("NSS_DISABLE_PPC_GHASH");

long hwcaps = getauxval(AT_HWCAP2);
unsigned long hwcaps = 0;
#if defined(__linux__)
hwcaps = getauxval(AT_HWCAP2);
#elif defined(__FreeBSD__)
# if __FreeBSD__ >= 12
elf_aux_info(AT_HWCAP2, &hwcaps, sizeof(hwcaps));
# else
size_t len = sizeof(hwcaps);
sysctlbyname("hw.cpu_features2", &hwcaps, &len, NULL, 0);
# endif
#endif

ppc_crypto_support_ = hwcaps & PPC_FEATURE2_VEC_CRYPTO && disable_hw_crypto == NULL;
}
Expand Down

0 comments on commit e619cde

Please sign in to comment.