zfs/powerpc64: Fix big-endian powerpc64 asm

The powerpc asm from openzfs assumes that big-endian is always ELFv1 and
ELFv2 is always little-endian, while FreeBSD uses ELFv2 everywhere.  Add
the necessary bits to the checksum asm to work on big-endian ELFv2.

This was also submitted upstream as PR#14779.

Tested by:	dbaio
This commit is contained in:
Justin Hibbits 2023-04-13 11:26:52 -04:00
parent 33906122e1
commit 0468e89cb3
5 changed files with 62 additions and 1 deletions

View File

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

View File

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

View File

@ -21,6 +21,7 @@
#if (defined(__PPC64__) && defined(__BIG_ENDIAN__)) #if (defined(__PPC64__) && defined(__BIG_ENDIAN__))
#if (!defined(_CALL_ELF) || _CALL_ELF == 1)
.text .text
.globl zfs_sha256_ppc .globl zfs_sha256_ppc
@ -33,6 +34,16 @@ zfs_sha256_ppc:
.previous .previous
.align 6 .align 6
.zfs_sha256_ppc: .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) stdu 1,-320(1)
mflr 0 mflr 0
sldi 5,5,6 sldi 5,5,6
@ -1312,8 +1323,12 @@ zfs_sha256_ppc:
blr blr
.long 0 .long 0
.byte 0,12,0x14,0,0,0,0,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
.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 .align 6
.LPICmeup: .LPICmeup:
mflr 0 mflr 0

View File

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

View File

@ -21,6 +21,7 @@
#if (defined(__PPC64__) && defined(__BIG_ENDIAN__)) #if (defined(__PPC64__) && defined(__BIG_ENDIAN__))
#if (!defined(_CALL_ELF) || _CALL_ELF == 1)
.text .text
.globl zfs_sha512_ppc .globl zfs_sha512_ppc
@ -33,6 +34,16 @@ zfs_sha512_ppc:
.previous .previous
.align 6 .align 6
.zfs_sha512_ppc: .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) stdu 1,-384(1)
mflr 0 mflr 0
sldi 5,5,7 sldi 5,5,7
@ -1350,8 +1361,12 @@ zfs_sha512_ppc:
blr blr
.long 0 .long 0
.byte 0,12,0x14,0,0,0,0,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
.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 .align 6
.LPICmeup: .LPICmeup:
mflr 0 mflr 0