Maamoun TK maamoun.tk@googlemail.com writes:
That's right, in little-endian systems I got "#define _CALL_ELF 2" while in big-endian ones that value is 1 except when using musl.
That's good.
I've updated the patch in the branch https://git.lysator.liu.se/mamonet/nettle/-/tree/ppc64_musl_fix to exploit this distinction.
I've tried a different approach on branch https://git.lysator.liu.se/nettle/nettle/-/tree/ppc64-efv2-check. Patch below. (It makes sense to me to have the new check together with the ABI check, but on second thought, probably a mistake to overload the ABI variable. It would be better to have a separate configure variable, more similar to the W64_ABI).
Unfortunaly, the CI cross builds aren't working at the moment (the buildenv images are based on Debian Buster ("stable" at the time images were built), and nettle's ci scripts do apt-get update and apt-get install, which now attempts to get Bullseye packages (new "stable" since a week ago)).
Regards, /Niels
diff --git a/config.m4.in b/config.m4.in index d89325b8..2ac19a84 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(`ABI', `@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 ebec8759..0efa5795 100644 --- a/configure.ac +++ b/configure.ac @@ -353,8 +353,15 @@ case "$host_cpu" in ], [], [ ABI=32 ], [ - ABI=64 - ]) + AC_TRY_COMPILE([ +#if _CALL_ELF == 2 +#error ELFv2 ABI +#endif + ], [], [ + ABI=64v1 + ], [ + ABI=64v2 + ])]) ;; aarch64*) AC_TRY_COMPILE([ @@ -514,7 +521,7 @@ if test "x$enable_assembler" = xyes ; then fi ;; *powerpc64*) - if test "$ABI" = 64 ; then + if test "$ABI" != 32 ; then GMP_ASM_POWERPC_R_REGISTERS asm_path="powerpc64" if test "x$enable_fat" = xyes ; then @@ -1032,6 +1039,7 @@ AC_SUBST(ASM_TYPE_PROGBITS) AC_SUBST(ASM_MARK_NOEXEC_STACK) AC_SUBST(ASM_ALIGN_LOG) AC_SUBST(W64_ABI) +AC_SUBST(ABI) AC_SUBST(ASM_WORDS_BIGENDIAN) AC_SUBST(EMULATOR) AC_SUBST(ASM_X86_ENDBR) diff --git a/powerpc64/machine.m4 b/powerpc64/machine.m4 index 187a49b8..60c7465d 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(ABI,64v2, `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(ABI,64v2, `.size C_NAME($1), . - C_NAME($1)', `.size .C_NAME($1), . - .C_NAME($1) .size C_NAME($1), . - .C_NAME($1)')')