powerpc64: Support ELFv2 asm on Big Endian

FreeBSD/powerpc64 is all ELFv2 since FreeBSD 13, even big endian.  The
existing sha256 and sha512 asm code assumes that BE is all ELFv1, and LE
is ELFv2.  Minor changes to add ELFv2 in the BE side gets this working
correctly on FreeBSD with latest OpenZFS import.

Reviewed-by: Tino Reichardt <milky-zfs@mcmilk.de>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by:	Justin Hibbits <chmeeedalf@gmail.com>
Closes #14779
This commit is contained in:
Justin Hibbits 2023-04-27 15:49:21 -04:00 committed by GitHub
parent 2fd1c30423
commit 5a83f761c7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 63 additions and 2 deletions

View File

@ -49,7 +49,7 @@
#include <machine/pcb.h>
#include <machine/cpu.h>
#define kfpu_allowed() 1
#define kfpu_allowed() 0
#define kfpu_initialize(tsk) do {} while (0)
#define kfpu_begin() do {} while (0)
#define kfpu_end() do {} while (0)

View File

@ -551,7 +551,7 @@ zfs_sha512_available(void)
#elif defined(__powerpc__)
#define kfpu_allowed() 1
#define kfpu_allowed() 0
#define kfpu_initialize(tsk) do {} while (0)
#define kfpu_begin() do {} while (0)
#define kfpu_end() do {} while (0)

View File

@ -21,6 +21,7 @@
#if (defined(__PPC64__) && defined(__BIG_ENDIAN__))
#if (!defined(_CALL_ELF) || _CALL_ELF == 1)
.text
.globl zfs_sha256_power8
@ -33,6 +34,16 @@ zfs_sha256_power8:
.previous
.align 6
.zfs_sha256_power8:
#else
.abiversion 2
.text
.globl zfs_sha256_power8
.type zfs_sha256_power8,@function
.align 6
zfs_sha256_power8:
.localentry zfs_sha256_power8,0
#endif
stdu 1,-384(1)
mflr 8
li 10,207
@ -677,8 +688,12 @@ zfs_sha256_power8:
.long 0
.byte 0,12,4,1,0x80,6,3,0
.long 0
#if (!defined(_CALL_ELF) || _CALL_ELF == 1)
.size .zfs_sha256_power8,.-.zfs_sha256_power8
.size zfs_sha256_power8,.-.zfs_sha256_power8
#else
.size zfs_sha256_power8,.-zfs_sha256_power8
#endif
.align 6
.LPICmeup:
mflr 0

View File

@ -21,6 +21,7 @@
#if (defined(__PPC64__) && defined(__BIG_ENDIAN__))
#if (!defined(_CALL_ELF) || _CALL_ELF == 1)
.text
.globl zfs_sha256_ppc
@ -33,6 +34,16 @@ zfs_sha256_ppc:
.previous
.align 6
.zfs_sha256_ppc:
#else
.abiversion 2
.text
.globl zfs_sha256_ppc
.type zfs_sha256_ppc,@function
.align 6
zfs_sha256_ppc:
.localentry zfs_sha256_ppc,0
#endif
stdu 1,-320(1)
mflr 0
sldi 5,5,6
@ -1312,8 +1323,12 @@ zfs_sha256_ppc:
blr
.long 0
.byte 0,12,0x14,0,0,0,0,0
#if (!defined(_CALL_ELF) || _CALL_ELF == 1)
.size .zfs_sha256_ppc,.-.zfs_sha256_ppc
.size zfs_sha256_ppc,.-.zfs_sha256_ppc
#else
.size zfs_sha256_ppc,.-zfs_sha256_ppc
#endif
.align 6
.LPICmeup:
mflr 0

View File

@ -21,6 +21,7 @@
#if (defined(__PPC64__) && defined(__BIG_ENDIAN__))
#if (!defined(_CALL_ELF) || _CALL_ELF == 1)
.text
.globl zfs_sha512_power8
@ -33,6 +34,17 @@ zfs_sha512_power8:
.previous
.align 6
.zfs_sha512_power8:
#else
.abiversion 2
.text
.globl zfs_sha512_power8
.type zfs_sha512_power8,@function
.align 6
zfs_sha512_power8:
.localentry zfs_sha512_power8,0
#endif
stdu 1,-384(1)
mflr 8
li 10,207
@ -679,8 +691,12 @@ zfs_sha512_power8:
.long 0
.byte 0,12,4,1,0x80,6,3,0
.long 0
#if (!defined(_CALL_ELF) || _CALL_ELF == 1)
.size .zfs_sha512_power8,.-.zfs_sha512_power8
.size zfs_sha512_power8,.-.zfs_sha512_power8
#else
.size zfs_sha512_power8,.-zfs_sha512_power8
#endif
.align 6
.LPICmeup:
mflr 0

View File

@ -21,6 +21,7 @@
#if (defined(__PPC64__) && defined(__BIG_ENDIAN__))
#if (!defined(_CALL_ELF) || _CALL_ELF == 1)
.text
.globl zfs_sha512_ppc
@ -33,6 +34,16 @@ zfs_sha512_ppc:
.previous
.align 6
.zfs_sha512_ppc:
#else
.abiversion 2
.text
.globl zfs_sha512_ppc
.type zfs_sha512_ppc,@function
.align 6
zfs_sha512_ppc:
.localentry zfs_sha512_ppc,0
#endif
stdu 1,-384(1)
mflr 0
sldi 5,5,7
@ -1350,8 +1361,12 @@ zfs_sha512_ppc:
blr
.long 0
.byte 0,12,0x14,0,0,0,0,0
#if (!defined(_CALL_ELF) || _CALL_ELF == 1)
.size .zfs_sha512_ppc,.-.zfs_sha512_ppc
.size zfs_sha512_ppc,.-.zfs_sha512_ppc
#else
.size zfs_sha512_ppc,.-zfs_sha512_ppc
#endif
.align 6
.LPICmeup:
mflr 0