linux/tools/testing/selftests/rseq
Mathieu Desnoyers ee8a84c60b rseq/selftests: Fix Thumb mode build failure on arm32
Using ".arm .inst" for the arm signature introduces build issues for
programs compiled in Thumb mode because the assembler stays in the
arm mode for the rest of the inline assembly. Revert to using a ".word"
to express the signature as data instead.

The choice of signature is a valid trap instruction on arm32 little
endian, where both code and data are little endian.

ARMv6+ big endian (BE8) generates mixed endianness code vs data:
little-endian code and big-endian data. The data value of the signature
needs to have its byte order reversed to generate the trap instruction.

Prior to ARMv6, -mbig-endian generates big-endian code and data
(which match), so the endianness of the data representation of the
signature should not be reversed. However, the choice between BE32
and BE8 is done by the linker, so we cannot know whether code and
data endianness will be mixed before the linker is invoked. So rather
than try to play tricks with the linker, the rseq signature is simply
data (not a trap instruction) prior to ARMv6 on big endian. This is
why the signature is expressed as data (.word) rather than as
instruction (.inst) in assembler.

Because a ".word" is used to emit the signature, it will be interpreted
as a literal pool by a disassembler, not as an actual instruction.
Considering that the signature is not meant to be executed except in
scenarios where the program execution is completely bogus, this should
not be an issue.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Acked-by: Will Deacon <will.deacon@arm.com>
CC: Peter Zijlstra <peterz@infradead.org>
CC: Thomas Gleixner <tglx@linutronix.de>
CC: Joel Fernandes <joelaf@google.com>
CC: Catalin Marinas <catalin.marinas@arm.com>
CC: Dave Watson <davejwatson@fb.com>
CC: Will Deacon <will.deacon@arm.com>
CC: Shuah Khan <shuah@kernel.org>
CC: Andi Kleen <andi@firstfloor.org>
CC: linux-kselftest@vger.kernel.org
CC: "H . Peter Anvin" <hpa@zytor.com>
CC: Chris Lameter <cl@linux.com>
CC: Russell King <linux@arm.linux.org.uk>
CC: Michael Kerrisk <mtk.manpages@gmail.com>
CC: "Paul E . McKenney" <paulmck@linux.vnet.ibm.com>
CC: Paul Turner <pjt@google.com>
CC: Boqun Feng <boqun.feng@gmail.com>
CC: Josh Triplett <josh@joshtriplett.org>
CC: Steven Rostedt <rostedt@goodmis.org>
CC: Ben Maurer <bmaurer@fb.com>
CC: linux-api@vger.kernel.org
CC: Andy Lutomirski <luto@amacapital.net>
CC: Andrew Morton <akpm@linux-foundation.org>
CC: Linus Torvalds <torvalds@linux-foundation.org>
CC: Carlos O'Donell <carlos@redhat.com>
CC: Florian Weimer <fweimer@redhat.com>
Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
2019-07-08 13:00:41 -06:00
..
.gitignore rseq/selftests: Provide Makefile, scripts, gitignore 2018-06-06 11:58:35 +02:00
basic_percpu_ops_test.c rseq/selftests: Provide basic percpu ops test 2018-06-06 11:58:35 +02:00
basic_test.c rseq/selftests: Provide basic test 2018-06-06 11:58:35 +02:00
Makefile rseq/selftests: add -no-integrated-as for clang 2019-05-07 15:33:17 -06:00
param_test.c rseq/selftests: fix parametrized test with -fpie 2018-09-27 12:59:19 -06:00
rseq-arm64.h rseq/selftests: aarch64 code signature: handle big-endian environment 2019-05-07 15:32:51 -06:00
rseq-arm.h rseq/selftests: Fix Thumb mode build failure on arm32 2019-07-08 13:00:41 -06:00
rseq-mips.h rseq/selftests: mips: use break instruction for RSEQ_SIG 2019-05-07 15:33:09 -06:00
rseq-ppc.h rseq/selftests: powerpc code signature: generate valid instructions 2019-05-07 15:33:00 -06:00
rseq-s390.h linux-kselftest-5.2-rc1-2 2019-05-16 18:57:58 -07:00
rseq-skip.h rseq/selftests: Provide rseq library 2018-06-06 11:58:34 +02:00
rseq-x86.h rseq/selftests: x86: use ud1 instruction as RSEQ_SIG opcode 2019-05-07 15:32:05 -06:00
rseq.c rseq/selftests: Use __rseq_handled symbol to coexist with glibc 2019-05-07 15:31:46 -06:00
rseq.h rseq/selftests: Use __rseq_handled symbol to coexist with glibc 2019-05-07 15:31:46 -06:00
run_param_test.sh rseq/selftests: Adapt number of threads to the number of detected cpus 2019-04-08 16:44:21 -06:00