| From 1b142fd2cd59c1d27a40ad6e8d5cc45050cf4624 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 17 Nov 2021 19:48:21 +0200 |
| Subject: s390/test_unwind: use raw opcode instead of invalid instruction |
| |
| From: Ilie Halip <ilie.halip@gmail.com> |
| |
| [ Upstream commit 53ae7230918154d1f4281d7aa3aae9650436eadf ] |
| |
| Building with clang & LLVM_IAS=1 leads to an error: |
| arch/s390/lib/test_unwind.c:179:4: error: invalid register pair |
| " mvcl %%r1,%%r1\n" |
| ^ |
| |
| The test creates an invalid instruction that would trap at runtime, but the |
| LLVM inline assembler tries to validate it at compile time too. |
| |
| Use the raw instruction opcode instead. |
| |
| Reported-by: Nick Desaulniers <ndesaulniers@google.com> |
| Signed-off-by: Ilie Halip <ilie.halip@gmail.com> |
| Reviewed-by: Nick Desaulniers <ndesaulniers@google.com> |
| Suggested-by: Ulrich Weigand <Ulrich.Weigand@de.ibm.com> |
| Link: https://github.com/ClangBuiltLinux/linux/issues/1421 |
| Link: https://lore.kernel.org/r/20211117174822.3632412-1-ilie.halip@gmail.com |
| Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com> |
| Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com> |
| [hca@linux.ibm.com: use illegal opcode, and update comment] |
| Signed-off-by: Heiko Carstens <hca@linux.ibm.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| arch/s390/lib/test_unwind.c | 5 +++-- |
| 1 file changed, 3 insertions(+), 2 deletions(-) |
| |
| diff --git a/arch/s390/lib/test_unwind.c b/arch/s390/lib/test_unwind.c |
| index ecf327d743a03..c0635cf787e31 100644 |
| --- a/arch/s390/lib/test_unwind.c |
| +++ b/arch/s390/lib/test_unwind.c |
| @@ -171,10 +171,11 @@ static noinline int unwindme_func4(struct unwindme *u) |
| } |
| |
| /* |
| - * trigger specification exception |
| + * Trigger operation exception; use insn notation to bypass |
| + * llvm's integrated assembler sanity checks. |
| */ |
| asm volatile( |
| - " mvcl %%r1,%%r1\n" |
| + " .insn e,0x0000\n" /* illegal opcode */ |
| "0: nopr %%r7\n" |
| EX_TABLE(0b, 0b) |
| :); |
| -- |
| 2.33.0 |
| |