aarch64: Use xzr instead of x31 in the ASM code

Officially, register X31 does not exist. The code is zeroing out a location
and thus actually needs XZR.

LLVM seems to automatically translate X31 into XZR when compiling the code,
but GCC (tested 7.3.0) refuses to accept the instruction:

    ../../third_party/crashpad/crashpad/util/misc/capture_context_linux.S: Assembler messages:
    ../../third_party/crashpad/crashpad/util/misc/capture_context_linux.S:291: Error: operand 1 must be an integer register -- `str x31,[x0,#0xb0]'

Bug: chromium:819294
Change-Id: I85be3923ac56fca6e3ec59d7e22b2223cfc8fa63
Reviewed-on: https://chromium-review.googlesource.com/1078818
Reviewed-by: Joshua Peraza <jperaza@chromium.org>
Commit-Queue: Raphael Kubo da Costa <raphael.kubo.da.costa@intel.com>
This commit is contained in:
Raphael Kubo da Costa 2018-05-30 18:34:14 +02:00 committed by Commit Bot
parent 5c49c59847
commit 26ef5c910f
2 changed files with 2 additions and 1 deletions

View File

@ -7,6 +7,7 @@
# The email address is not required for organizations.
Google Inc.
Intel Corporation
Opera Software ASA
Vewd Software AS
LG Electronics, Inc.

View File

@ -291,7 +291,7 @@ CAPTURECONTEXT_SYMBOL2:
#elif defined(__aarch64__)
// Zero out fault_address, which is unused.
str x31, [x0, #0xb0] // context->uc_mcontext.fault_address
str xzr, [x0, #0xb0] // context->uc_mcontext.fault_address
// Save general purpose registers in context->uc_mcontext.regs[i].
// The original x0 can't be recovered.