Add a reference for Linux ARM ABI.

The Android NDK docs link to a ARM GNU/Linux Application Binary Interface
Supplement document. Also fix a type in trampoline-armv4.pl. The generic ARM
document is usually shortened AAPCS, not APCS.

I couldn't find a corresponding link for aarch64.

Change-Id: I6e5543f5c9e26955cd3945e9e7a5dcff27c2bd78
Reviewed-on: https://boringssl-review.googlesource.com/c/35064
Commit-Queue: David Benjamin <davidben@google.com>
Commit-Queue: Adam Langley <agl@google.com>
Reviewed-by: Adam Langley <agl@google.com>
This commit is contained in:
David Benjamin 2019-02-27 12:01:15 -05:00 committed by CQ bot account: commit-bot@chromium.org
parent a57435e138
commit 1e0262ad87
2 changed files with 8 additions and 9 deletions

View File

@ -109,14 +109,12 @@ struct alignas(16) Reg128 {
// References: // References:
// AAPCS: http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042f/IHI0042F_aapcs.pdf // AAPCS: http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042f/IHI0042F_aapcs.pdf
// iOS32: https://developer.apple.com/library/archive/documentation/Xcode/Conceptual/iPhoneOSABIReference/Articles/ARMv6FunctionCallingConventions.html // iOS32: https://developer.apple.com/library/archive/documentation/Xcode/Conceptual/iPhoneOSABIReference/Articles/ARMv6FunctionCallingConventions.html
// Linux: http://sourcery.mentor.com/sgpp/lite/arm/portal/kbattach142/arm_gnu_linux_%20abi.pdf
// //
// ARM specifies a common calling convention, except r9 is left to the // ARM specifies a common calling convention, except r9 is left to the platform.
// platform. Linux and iOS differ in handling of r9. iOS's behavior is defined // Linux treats r9 as callee-saved, while iOS 3+ treats it as caller-saved. Most
// below. We found no clear reference for Linux but observed behavior from // of our assembly treats it as callee-saved to be uniform, but we match the
// LLVM. iOS 3+ treats r9 as caller-saved, while Linux treats it as // platform to avoid false positives when testing compiler-generated output.
// callee-saved. Most of our assembly treats it as callee-saved to be uniform,
// but we match the platform to avoid false positives when testing
// compiler-generated output.
#define LOOP_CALLER_STATE_REGISTERS_PRE_R9() \ #define LOOP_CALLER_STATE_REGISTERS_PRE_R9() \
CALLER_STATE_REGISTER(uint64_t, d8) \ CALLER_STATE_REGISTER(uint64_t, d8) \
CALLER_STATE_REGISTER(uint64_t, d9) \ CALLER_STATE_REGISTER(uint64_t, d9) \

View File

@ -27,6 +27,7 @@
# AAPCS: http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042f/IHI0042F_aapcs.pdf # AAPCS: http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042f/IHI0042F_aapcs.pdf
# iOS ARMv6: https://developer.apple.com/library/archive/documentation/Xcode/Conceptual/iPhoneOSABIReference/Articles/ARMv6FunctionCallingConventions.html # iOS ARMv6: https://developer.apple.com/library/archive/documentation/Xcode/Conceptual/iPhoneOSABIReference/Articles/ARMv6FunctionCallingConventions.html
# iOS ARMv7: https://developer.apple.com/library/archive/documentation/Xcode/Conceptual/iPhoneOSABIReference/Articles/ARMv7FunctionCallingConventions.html # iOS ARMv7: https://developer.apple.com/library/archive/documentation/Xcode/Conceptual/iPhoneOSABIReference/Articles/ARMv7FunctionCallingConventions.html
# Linux: http://sourcery.mentor.com/sgpp/lite/arm/portal/kbattach142/arm_gnu_linux_%20abi.pdf
use strict; use strict;
@ -70,10 +71,10 @@ abi_test_trampoline:
stmdb sp!, {r0-r11,lr} stmdb sp!, {r0-r11,lr}
@ Reserve stack space for six (10-4) stack parameters, plus an extra 4 @ Reserve stack space for six (10-4) stack parameters, plus an extra 4
@ bytes to keep it 8-byte-aligned (see APCS, section 5.3). @ bytes to keep it 8-byte-aligned (see AAPCS, section 5.3).
sub sp, sp, #28 sub sp, sp, #28
@ Every register in APCS is either non-volatile or a parameter (except @ Every register in AAPCS is either non-volatile or a parameter (except
@ r9 on iOS), so this code, by the actual call, loses all its scratch @ r9 on iOS), so this code, by the actual call, loses all its scratch
@ registers. First fill in stack parameters while there are registers @ registers. First fill in stack parameters while there are registers
@ to spare. @ to spare.