DEBUG: crash using an invalid opcode on aarch64 instead of an invalid access

On aarch64 there's also a guaranted invalid instruction, called UDF, and
which even supports an optional 16-bit immediate operand:

   https://developer.arm.com/documentation/ddi0596/2021-12/Base-Instructions/UDF--Permanently-Undefined-?lang=en

It's conveniently encoded as 4 zeroes (when the operand is zero). It's
unclear when support for it was added into GAS, if at all; even a
not-so-old 2.27 doesn't know about it. Let's byte-encode it.

Tested on an A72 and works as expected.
This commit is contained in:
Willy Tarreau 2023-04-25 19:01:48 +02:00
parent 77787ec9bc
commit 543e2544ca
1 changed files with 7 additions and 0 deletions

View File

@ -54,6 +54,13 @@
my_unreachable(); \
} while (0)
#elif defined(__aarch64__)
#define ha_crash_now() do { \
/* udf#imm16: 4 bytes (), raises illegal instruction */ \
__asm__ volatile(".byte 0x00,0x00,0x00,0x00\n"); \
my_unreachable(); \
} while (0)
#else // not x86
/* generic implementation, causes a segfault */