Re: [PATCH] s390/test_unwind: use raw opcode instead of invalid instruction

From: Christian Borntraeger
Date: Fri Nov 19 2021 - 05:57:23 EST

Am 19.11.21 um 11:54 schrieb Heiko Carstens:
On Fri, Nov 19, 2021 at 10:39:15AM +0100, Christian Borntraeger wrote:
So if I understand
that `e,` prefix is for 16B opcodes?

e is an instruction format as specified by the architecture.
without any parameters.
Normally RR would be the right thing for MVCL, but since
we try to build an invalid opcode without the assembler
noticing (ab)using e seem like a safer approach.

LGTM, thanks again.
Suggested-by: Ulrich Weigand <Ulrich.Weigand@xxxxxxxxxx>
Reviewed-by: Nick Desaulniers <ndesaulniers@xxxxxxxxxx>

added those and added my RB. applied to the s390 tree. Thanks
diff --git a/arch/s390/lib/test_unwind.c b/arch/s390/lib/test_unwind.c
index cfc5f5557c06..d342bc884b94 100644
--- a/arch/s390/lib/test_unwind.c
+++ b/arch/s390/lib/test_unwind.c
@@ -176,7 +176,7 @@ static noinline int unwindme_func4(struct unwindme *u)
* trigger specification exception
asm volatile(
- " mvcl %%r1,%%r1\n"
+ " .insn e,0x0e11\n" /* mvcl %%r1,%%r1" */

Sorry, I disagree with this. As you said above rr would be the correct
format for this instruction. If we go for the e format then we should
also use an instruction with e format.
Which in this case would simply be an illegal opcode, which would be
sufficient for what this code is good for: ".insn e,0x0000".

Why not simply use .short then?