crypto, x86: aesni: add compatibility with IAS

Message ID 20200622232434.162730-1-caij2003@gmail.com
State Accepted
Commit 44069737ac9625a0f02f0f7f5ab96aae4cd819bc
Headers show
Series
  • crypto, x86: aesni: add compatibility with IAS
Related show

Commit Message

Jian Cai June 22, 2020, 11:24 p.m.
Clang's integrated assembler complains "invalid reassignment of
non-absolute variable 'var_ddq_add'" while assembling
arch/x86/crypto/aes_ctrby8_avx-x86_64.S. It was because var_ddq_add was
reassigned with non-absolute values several times, which IAS did not
support. We can avoid the reassignment by replacing the uses of
var_ddq_add with its definitions accordingly to have compatilibility
with IAS.

Link: https://github.com/ClangBuiltLinux/linux/issues/1008
Reported-by: Sedat Dilek <sedat.dilek@gmail.com>
Reported-by: Fangrui Song <maskray@google.com>
Tested-by: Sedat Dilek <sedat.dilek@gmail.com> # build+boot Linux v5.7.5; clang v11.0.0-git
Signed-off-by: Jian Cai <caij2003@gmail.com>
---
 arch/x86/crypto/aes_ctrby8_avx-x86_64.S | 14 +++-----------
 1 file changed, 3 insertions(+), 11 deletions(-)

Comments

Herbert Xu July 3, 2020, 4:48 a.m. | #1
On Mon, Jun 22, 2020 at 04:24:33PM -0700, Jian Cai wrote:
> Clang's integrated assembler complains "invalid reassignment of

> non-absolute variable 'var_ddq_add'" while assembling

> arch/x86/crypto/aes_ctrby8_avx-x86_64.S. It was because var_ddq_add was

> reassigned with non-absolute values several times, which IAS did not

> support. We can avoid the reassignment by replacing the uses of

> var_ddq_add with its definitions accordingly to have compatilibility

> with IAS.

> 

> Link: https://github.com/ClangBuiltLinux/linux/issues/1008

> Reported-by: Sedat Dilek <sedat.dilek@gmail.com>

> Reported-by: Fangrui Song <maskray@google.com>

> Tested-by: Sedat Dilek <sedat.dilek@gmail.com> # build+boot Linux v5.7.5; clang v11.0.0-git

> Signed-off-by: Jian Cai <caij2003@gmail.com>

> ---

>  arch/x86/crypto/aes_ctrby8_avx-x86_64.S | 14 +++-----------

>  1 file changed, 3 insertions(+), 11 deletions(-)


Patch applied.  Thanks.
-- 
Email: Herbert Xu <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
Sedat Dilek July 3, 2020, 8:36 a.m. | #2
On Fri, Jul 3, 2020 at 6:49 AM Herbert Xu <herbert@gondor.apana.org.au> wrote:
>

> On Mon, Jun 22, 2020 at 04:24:33PM -0700, Jian Cai wrote:

> > Clang's integrated assembler complains "invalid reassignment of

> > non-absolute variable 'var_ddq_add'" while assembling

> > arch/x86/crypto/aes_ctrby8_avx-x86_64.S. It was because var_ddq_add was

> > reassigned with non-absolute values several times, which IAS did not

> > support. We can avoid the reassignment by replacing the uses of

> > var_ddq_add with its definitions accordingly to have compatilibility

> > with IAS.

> >

> > Link: https://github.com/ClangBuiltLinux/linux/issues/1008

> > Reported-by: Sedat Dilek <sedat.dilek@gmail.com>

> > Reported-by: Fangrui Song <maskray@google.com>

> > Tested-by: Sedat Dilek <sedat.dilek@gmail.com> # build+boot Linux v5.7.5; clang v11.0.0-git

> > Signed-off-by: Jian Cai <caij2003@gmail.com>

> > ---

> >  arch/x86/crypto/aes_ctrby8_avx-x86_64.S | 14 +++-----------

> >  1 file changed, 3 insertions(+), 11 deletions(-)

>

> Patch applied.  Thanks.


Hi Herbert,

Can you please apply my patch, too?

For being able to compile/assemble with LLVM_IAS=1 *both* patches are
needed with CONFIG_CRYPTO_AES_NI_INTEL={m,y}.

If you do pick this up, please add a...

   Link: https://bugs.llvm.org/show_bug.cgi?id=24494

Thanks.

Regards,
- Sedat -

[0] https://lore.kernel.org/patchwork/patch/1263102/
[1] https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git/commit/?id=44069737ac9625a0f02f0f7f5ab96aae4cd819bc
[2] https://bugs.llvm.org/show_bug.cgi?id=24494


> --

> Email: Herbert Xu <herbert@gondor.apana.org.au>

> Home Page: http://gondor.apana.org.au/~herbert/

> PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
Herbert Xu July 3, 2020, 12:59 p.m. | #3
On Fri, Jul 03, 2020 at 10:36:43AM +0200, Sedat Dilek wrote:
>

> Can you please apply my patch, too?


Please repost your patch without the 5.7 tag.

Thanks,
-- 
Email: Herbert Xu <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
Sedat Dilek July 3, 2020, 2:33 p.m. | #4
On Fri, Jul 3, 2020 at 3:00 PM Herbert Xu <herbert@gondor.apana.org.au> wrote:
>

> On Fri, Jul 03, 2020 at 10:36:43AM +0200, Sedat Dilek wrote:

> >

> > Can you please apply my patch, too?

>

> Please repost your patch without the 5.7 tag.

>


Sent out a v5:

Changes v4->v5:
- Drop "5.7" tag from subject line as requested by Herbert Xu
- Add Link to LLVM bug #24494 (thanks Nick)

Thanks.

- Sedat -

> Thanks,

> --

> Email: Herbert Xu <herbert@gondor.apana.org.au>

> Home Page: http://gondor.apana.org.au/~herbert/

> PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

>

> --

> You received this message because you are subscribed to the Google Groups "Clang Built Linux" group.

> To unsubscribe from this group and stop receiving emails from it, send an email to clang-built-linux+unsubscribe@googlegroups.com.

> To view this discussion on the web visit https://groups.google.com/d/msgid/clang-built-linux/20200703125949.GA28373%40gondor.apana.org.au.

Patch

diff --git a/arch/x86/crypto/aes_ctrby8_avx-x86_64.S b/arch/x86/crypto/aes_ctrby8_avx-x86_64.S
index ec437db1fa54..494a3bda8487 100644
--- a/arch/x86/crypto/aes_ctrby8_avx-x86_64.S
+++ b/arch/x86/crypto/aes_ctrby8_avx-x86_64.S
@@ -127,10 +127,6 @@  ddq_add_8:
 
 /* generate a unique variable for ddq_add_x */
 
-.macro setddq n
-	var_ddq_add = ddq_add_\n
-.endm
-
 /* generate a unique variable for xmm register */
 .macro setxdata n
 	var_xdata = %xmm\n
@@ -140,9 +136,7 @@  ddq_add_8:
 
 .macro club name, id
 .altmacro
-	.if \name == DDQ_DATA
-		setddq %\id
-	.elseif \name == XDATA
+	.if \name == XDATA
 		setxdata %\id
 	.endif
 .noaltmacro
@@ -165,9 +159,8 @@  ddq_add_8:
 
 	.set i, 1
 	.rept (by - 1)
-		club DDQ_DATA, i
 		club XDATA, i
-		vpaddq	var_ddq_add(%rip), xcounter, var_xdata
+		vpaddq	(ddq_add_1 + 16 * (i - 1))(%rip), xcounter, var_xdata
 		vptest	ddq_low_msk(%rip), var_xdata
 		jnz 1f
 		vpaddq	ddq_high_add_1(%rip), var_xdata, var_xdata
@@ -180,8 +173,7 @@  ddq_add_8:
 	vmovdqa	1*16(p_keys), xkeyA
 
 	vpxor	xkey0, xdata0, xdata0
-	club DDQ_DATA, by
-	vpaddq	var_ddq_add(%rip), xcounter, xcounter
+	vpaddq	(ddq_add_1 + 16 * (by - 1))(%rip), xcounter, xcounter
 	vptest	ddq_low_msk(%rip), xcounter
 	jnz	1f
 	vpaddq	ddq_high_add_1(%rip), xcounter, xcounter