summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog9
-rw-r--r--config.m4.in1
-rw-r--r--configure.ac14
-rw-r--r--powerpc64/machine.m44
4 files changed, 25 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index c7c5c993..8671bc7f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2022-01-04 Niels Möller <nisse@lysator.liu.se>
+
+ * configure.ac (ELFV2_ABI): New substituted variable, set on
+ powerpc64 based on the _CALL_ELF define.
+ * config.m4.in (ELFV2_ABI): Substituted here.
+ * powerpc64/machine.m4: Use ELFV2_ABI rather than WORDS_BIGENDIAN
+ to select abi flavor. Intended to support ppc64be + musl, which,
+ unlike other big-endian configurations, uses ELFv2.
+
2021-12-09 Niels Möller <nisse@lysator.liu.se>
* x86_64/ecc-secp256r1-redc.asm: New folding scheme with one less
diff --git a/config.m4.in b/config.m4.in
index d89325b8..b98a5817 100644
--- a/config.m4.in
+++ b/config.m4.in
@@ -5,6 +5,7 @@ define(`COFF_STYLE', `@ASM_COFF_STYLE@')dnl
define(`TYPE_FUNCTION', `@ASM_TYPE_FUNCTION@')dnl
define(`TYPE_PROGBITS', `@ASM_TYPE_PROGBITS@')dnl
define(`ALIGN_LOG', `@ASM_ALIGN_LOG@')dnl
+define(`ELFV2_ABI', `@ELFV2_ABI@')dnl
define(`W64_ABI', `@W64_ABI@')dnl
define(`RODATA', `@ASM_RODATA@')dnl
define(`WORDS_BIGENDIAN', `@ASM_WORDS_BIGENDIAN@')dnl
diff --git a/configure.ac b/configure.ac
index 54df43ec..da72f908 100644
--- a/configure.ac
+++ b/configure.ac
@@ -311,6 +311,9 @@ AC_SUBST([GMP_NUMB_BITS])
# Figure out ABI. Currently, configurable only by setting CFLAGS.
ABI=standard
+ELFV2_ABI=no # For powerpc64
+W64_ABI=no # For x86_64 windows
+
case "$host_cpu" in
[x86_64 | amd64])
AC_TRY_COMPILE([
@@ -355,6 +358,15 @@ case "$host_cpu" in
], [
ABI=64
])
+ if test "$ABI" = 64 ; then
+ AC_TRY_COMPILE([
+#if _CALL_ELF == 2
+#error ELFv2 ABI
+#endif
+ ], [], [], [
+ ELFV2_ABI=yes
+ ])
+ fi
;;
aarch64*)
AC_TRY_COMPILE([
@@ -756,7 +768,6 @@ IF_DLL='#'
LIBNETTLE_FILE_SRC='$(LIBNETTLE_FORLINK)'
LIBHOGWEED_FILE_SRC='$(LIBHOGWEED_FORLINK)'
EMULATOR=''
-W64_ABI=no
case "$host_os" in
mingw32*|cygwin*)
@@ -1037,6 +1048,7 @@ AC_SUBST(ASM_TYPE_FUNCTION)
AC_SUBST(ASM_TYPE_PROGBITS)
AC_SUBST(ASM_MARK_NOEXEC_STACK)
AC_SUBST(ASM_ALIGN_LOG)
+AC_SUBST(ELFV2_ABI)
AC_SUBST(W64_ABI)
AC_SUBST(ASM_WORDS_BIGENDIAN)
AC_SUBST(EMULATOR)
diff --git a/powerpc64/machine.m4 b/powerpc64/machine.m4
index 187a49b8..b59f0863 100644
--- a/powerpc64/machine.m4
+++ b/powerpc64/machine.m4
@@ -1,7 +1,7 @@
define(`PROLOGUE',
`.globl C_NAME($1)
DECLARE_FUNC(C_NAME($1))
-ifelse(WORDS_BIGENDIAN,no,
+ifelse(ELFV2_ABI,yes,
`ifdef(`FUNC_ALIGN',`.align FUNC_ALIGN')
C_NAME($1):
addis 2,12,(.TOC.-C_NAME($1))@ha
@@ -17,7 +17,7 @@ ifdef(`FUNC_ALIGN',`.align FUNC_ALIGN')
undefine(`FUNC_ALIGN')')
define(`EPILOGUE',
-`ifelse(WORDS_BIGENDIAN,no,
+`ifelse(ELFV2_ABI,yes,
`.size C_NAME($1), . - C_NAME($1)',
`.size .C_NAME($1), . - .C_NAME($1)
.size C_NAME($1), . - .C_NAME($1)')')