Skip to content

Commit

Permalink
runtime: ensure that asmsyscall6 follow AIX stack convention
Browse files Browse the repository at this point in the history
The function asmsyscall6 must follow AIX stack layout. It means
that its first local variable must be stored after its arguments
area, ie after offset 112.

Fixes #50185

Change-Id: I897731ddd2a9faad8218443a4c2f4b204ad7e173
Reviewed-on: https://go-review.googlesource.com/c/go/+/373074
Trust: Dmitri Shuralyov <dmitshur@golang.org>
Reviewed-by: Cherry Mui <cherryyz@google.com>
  • Loading branch information
Helflym authored and cherrymui committed Jan 5, 2022
1 parent 2c58bb2 commit 002283e
Showing 1 changed file with 9 additions and 3 deletions.
12 changes: 9 additions & 3 deletions src/runtime/sys_aix_ppc64.s
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,12 @@ TEXT callCfunction<>(SB), NOSPLIT|NOFRAME,$0
// stored in libcall_fn and store the results in libcall struture
// Up to 6 arguments can be passed to this C function
// Called by runtime.asmcgocall
// It reserves a stack of 288 bytes for the C function.
// It reserves a stack of 288 bytes for the C function. It must
// follow AIX convention, thus the first local variable must
// be stored at the offset 112, after the linker area (48 bytes)
// and the argument area (64).
// The AIX convention is described here:
// https://www.ibm.com/docs/en/aix/7.2?topic=overview-runtime-process-stack
// NOT USING GO CALLING CONVENTION
// runtime.asmsyscall6 is a function descriptor to the real asmsyscall6.
DATA runtime·asmsyscall6+0(SB)/8, $asmsyscall6<>(SB)
Expand All @@ -34,7 +39,8 @@ DATA runtime·asmsyscall6+16(SB)/8, $0
GLOBL runtime·asmsyscall6(SB), NOPTR, $24

TEXT asmsyscall6<>(SB),NOSPLIT,$256
MOVD R3, 48(R1) // Save libcall for later
// Save libcall for later
MOVD R3, 112(R1)
MOVD libcall_fn(R3), R12
MOVD libcall_args(R3), R9
MOVD 0(R9), R3
Expand All @@ -50,7 +56,7 @@ TEXT asmsyscall6<>(SB),NOSPLIT,$256
MOVD 40(R1), R2

// Store result in libcall
MOVD 48(R1), R5
MOVD 112(R1), R5
MOVD R3, (libcall_r1)(R5)
MOVD $-1, R6
CMP R6, R3
Expand Down

0 comments on commit 002283e

Please sign in to comment.