Thread (4 messages) 4 messages, 3 authors, 2020-05-21

Re: [PATCH v3] powerpc/64: Option to use ELF V2 ABI for big-endian kernels

From: Michael Ellerman <mpe@ellerman.id.au>
Date: 2020-05-18 06:37:45

Nicholas Piggin [off-list ref] writes:
Provide an option to build big-endian kernels using the ELF V2 ABI. This works
on GCC and clang (since about 2014). it is is not officially supported by the
GNU toolchain, but it can give big-endian kernels  some useful advantages of
the V2 ABI (e.g., less stack usage).

Reviewed-by: Segher Boessenkool <redacted>
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
Since v1:
- Improved the override flavour name suggested by Segher.
- Improved changelog wording.

Since v2:
- Improved changelog, help text, to use the name ELF V2 ABI in the spec,
  and clarify things a bit more, suggested by Segher.
- For option name, match the ELF_ABI_v1/2 which is already in the kernel.
- Prefix options with PPC64_ to avoid arch clashes or confusion.
- "elfv2" is the toolchain name of the ABI, so I kept that in the crypto
  perl scripts.

 arch/powerpc/Kconfig            | 21 +++++++++++++++++++++
 arch/powerpc/Makefile           | 15 ++++++++++-----
 arch/powerpc/boot/Makefile      |  4 ++++
 drivers/crypto/vmx/Makefile     |  8 ++++++--
 drivers/crypto/vmx/ppc-xlate.pl | 10 ++++++----
 5 files changed, 47 insertions(+), 11 deletions(-)
This doesn't build with clang:

  /tmp/aesp8-ppc-dad624.s: Assembler messages:
  /tmp/aesp8-ppc-dad624.s: Error: .size expression for aes_p8_set_encrypt_key does not evaluate to a constant
  /tmp/aesp8-ppc-dad624.s: Error: .size expression for aes_p8_set_decrypt_key does not evaluate to a constant
  /tmp/aesp8-ppc-dad624.s: Error: .size expression for aes_p8_encrypt does not evaluate to a constant
  /tmp/aesp8-ppc-dad624.s: Error: .size expression for aes_p8_decrypt does not evaluate to a constant
  /tmp/aesp8-ppc-dad624.s: Error: .size expression for aes_p8_cbc_encrypt does not evaluate to a constant
  /tmp/aesp8-ppc-dad624.s: Error: .size expression for aes_p8_ctr32_encrypt_blocks does not evaluate to a constant
  /tmp/aesp8-ppc-dad624.s: Error: .size expression for aes_p8_xts_encrypt does not evaluate to a constant
  /tmp/aesp8-ppc-dad624.s: Error: .size expression for aes_p8_xts_decrypt does not evaluate to a constant
  clang: error: assembler command failed with exit code 1 (use -v to see invocation)
  make[4]: *** [/linux/scripts/Makefile.build:349: drivers/crypto/vmx/aesp8-ppc.o] Error 1
  make[4]: *** Waiting for unfinished jobs....
  /tmp/ghashp8-ppc-01aa43.s: Assembler messages:
  /tmp/ghashp8-ppc-01aa43.s: Error: .size expression for gcm_init_p8 does not evaluate to a constant
  /tmp/ghashp8-ppc-01aa43.s: Error: .size expression for gcm_gmult_p8 does not evaluate to a constant
  /tmp/ghashp8-ppc-01aa43.s: Error: .size expression for gcm_ghash_p8 does not evaluate to a constant
  clang: error: assembler command failed with exit code 1 (use -v to see invocation)
  make[4]: *** [/linux/scripts/Makefile.build:349: drivers/crypto/vmx/ghashp8-ppc.o] Error 1
  make[3]: *** [/linux/scripts/Makefile.build:488: drivers/crypto/vmx] Error 2
  make[3]: *** Waiting for unfinished jobs....
  make[2]: *** [/linux/scripts/Makefile.build:488: drivers/crypto] Error 2
  make[2]: *** Waiting for unfinished jobs....
  /linux/drivers/scsi/qla2xxx/qla_nx2.c:3226:1: warning: stack frame size of 2208 bytes in function 'qla8044_collect_md_data' [-Wframe-larger-than=]
  qla8044_collect_md_data(struct scsi_qla_host *vha)
  ^
  1 warning generated.
  make[1]: *** [/linux/Makefile:1722: drivers] Error 2
  make: *** [Makefile:180: sub-make] Error 2


I'm not sure if it can work with clang at all, so I'm happy if the
option depends on !CC_IS_CLANG.

cheers
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help