Thread (13 messages) 13 messages, 3 authors, 2021-03-29

Re: [PATCH v2] ARM: kprobes: rewrite test-[arm|thumb].c in UAL

From: Ard Biesheuvel <ardb@kernel.org>
Date: 2021-01-29 09:41:33

On Fri, 29 Jan 2021 at 01:22, Nick Desaulniers [off-list ref] wrote:
quoted
On Thu, 28 Jan 2021 at 20:34, Nick Desaulniers [off-list ref] wrote:
quoted
+       TEST_RX("tbh    [pc, r",7, (9f-(1f+4))>>1,", lsl #1]",
On Thu, Jan 28, 2021 at 1:03 PM Ard Biesheuvel [off-list ref] wrote:
Why is this change needed? Are the resulting opcodes equivalent? Does
GAS infer the lsl #1 but Clang doesn't?
Yes; it seems if you serialize/deserialize this using GNU `as` and
objdump, that's the canonical form (GNU objdump seems to print in UAL
form, IIUC).  I didn't see anything specifically about `tbh` in
https://developer.arm.com/documentation/dui0473/c/writing-arm-assembly-language/assembly-language-changes-after-rvctv2-1?lang=en
but it's what GNU objdump produces and what clang's integrated
assembler accepts.
This matches the ARM ARM: TBB and TBH are indexed table lookups, where
the table consists of 16-bit quantities in the latter case, and so the
LSL #1 is implied.
quoted
quoted
 #define _DATA_PROCESSING32_DNM(op,s,val)                                       \
-       TEST_RR(op s".w r0,  r",1, VAL1,", r",2, val, "")                       \
+       TEST_RR(op s"   r0,  r",1, VAL1,", r",2, val, "")                       \
What is wrong with these .w suffixes? Shouldn't the assembler accept
these even on instructions that only exist in a wide encoding?
Yeah, I'm not sure these have anything to do with UAL.  Looking at
LLVM's sources and IIRC, LLVM has "InstAlias"es it uses for .w
suffixes. I think I need to fix those in LLVM for a couple
instructions, rather than modify these in kernel sources.  I'll split
off the arm-test.c and thumb-test.c into separate patches, fix LLVM,
and drop the .w suffix changes to thumb-test.c.
The ARM ARM (DDI0487G.a F1.2) clearly specifies that any instruction
documented as supporting the optional {q} suffix (which is almost all
if not all of them) can be issued with the .w appended, even if doing
so is redundant (note that it even documents this as being supported
for the A32 ISA, which GAS does not implement today either)

Given how we often use this suffix to ensure that the opcode fills the
expected amount of space (for things like jump tables, etc), we cannot
simply drop these left and right and expect things to still work.

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help