Per the "Semihosting for AArch32 and AArch64" spec. v2 (2023Q3) [*]:
6.5 SYS_EXIT (0x18)
6.5.2 Entry (64-bit)
On entry, the PARAMETER REGISTER contains a pointer to
a two-field argument block:
. field 1
The exception type, which is one of the set of reason
codes in the above tables.
. field 2
A subcode, whose meaning depends on the reason code in
field 1.
In particular, if field 1 is ADP_Stopped_ApplicationExit
then field 2 is an exit status code, as passed to the C
standard library exit() function. [...]
Having libc exit() is declared as:
LIBRARY
Standard C Library (libc, -lc)
SYNOPSIS
void
exit(int status);
the status is expected to be signed.