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. # The email address is not required for organizations.
Google Inc. Google Inc.
Intel Corporation
Opera Software ASA Opera Software ASA
Vewd Software AS Vewd Software AS
LG Electronics, Inc. LG Electronics, Inc.

View File

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