| From foo@baz Wed Nov 21 18:50:25 CET 2018 |
| From: Michael Davidson <md@google.com> |
| Date: Wed, 15 Mar 2017 15:36:00 -0700 |
| Subject: crypto, x86: aesni - fix token pasting for clang |
| |
| From: Michael Davidson <md@google.com> |
| |
| commit fdb2726f4e61c5e3abc052f547d5a5f6c0dc5504 upstream. |
| |
| aes_ctrby8_avx-x86_64.S uses the C preprocessor for token pasting |
| of character sequences that are not valid preprocessor tokens. |
| While this is allowed when preprocessing assembler files it exposes |
| an incompatibilty between the clang and gcc preprocessors where |
| clang does not strip leading white space from macro parameters, |
| leading to the CONCAT(%xmm, i) macro expansion on line 96 resulting |
| in a token with a space character embedded in it. |
| |
| While this could be resolved by deleting the offending space character, |
| the assembler is perfectly capable of doing the token pasting correctly |
| for itself so we can just get rid of the preprocessor macros. |
| |
| Signed-off-by: Michael Davidson <md@google.com> |
| Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> |
| Signed-off-by: Nick Desaulniers <ndesaulniers@google.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| arch/x86/crypto/aes_ctrby8_avx-x86_64.S | 7 ++----- |
| 1 file changed, 2 insertions(+), 5 deletions(-) |
| |
| --- a/arch/x86/crypto/aes_ctrby8_avx-x86_64.S |
| +++ b/arch/x86/crypto/aes_ctrby8_avx-x86_64.S |
| @@ -65,7 +65,6 @@ |
| #include <linux/linkage.h> |
| #include <asm/inst.h> |
| |
| -#define CONCAT(a,b) a##b |
| #define VMOVDQ vmovdqu |
| |
| #define xdata0 %xmm0 |
| @@ -92,8 +91,6 @@ |
| #define num_bytes %r8 |
| |
| #define tmp %r10 |
| -#define DDQ(i) CONCAT(ddq_add_,i) |
| -#define XMM(i) CONCAT(%xmm, i) |
| #define DDQ_DATA 0 |
| #define XDATA 1 |
| #define KEY_128 1 |
| @@ -131,12 +128,12 @@ ddq_add_8: |
| /* generate a unique variable for ddq_add_x */ |
| |
| .macro setddq n |
| - var_ddq_add = DDQ(\n) |
| + var_ddq_add = ddq_add_\n |
| .endm |
| |
| /* generate a unique variable for xmm register */ |
| .macro setxdata n |
| - var_xdata = XMM(\n) |
| + var_xdata = %xmm\n |
| .endm |
| |
| /* club the numeric 'id' to the symbol 'name' */ |