Files
sys/unix/asm_linux_ppc64x.s
Lynn Boger 7155702f2d unix: fix errors in syscalls when using -linkshared on ppc64x
When using -linkshared, the external linker on ppc64x cannot
always handle the direct branch to syscall.Syscall and similar
similar functions when the offset is too far. Instead it should
be done as a BL which can then be called through a procedure
linkage table entry.

This change removes functions Syscall, Syscall6,
RawSyscall, RawSyscall6 from asm_linux_ppc64x.s and instead
creates Go functions which call their corresponding
functions in the syscall package. As Go functions, they can be
inlined with the help of CL 147361.

Fixes golang/go#16662

Change-Id: Ibd2b6ec15b0781c3d7db25e249a3ffc9e1c2884b
Reviewed-on: https://go-review.googlesource.com/c/146518
Run-TryBot: Lynn Boger <laboger@linux.vnet.ibm.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Tobias Klauser <tobias.klauser@gmail.com>
2018-11-06 07:38:32 +00:00

45 lines
921 B
ArmAsm

// Copyright 2014 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// +build linux
// +build ppc64 ppc64le
// +build !gccgo
#include "textflag.h"
//
// System calls for ppc64, Linux
//
// Just jump to package syscall's implementation for all these functions.
// The runtime may know about them.
TEXT ·SyscallNoError(SB),NOSPLIT,$0-48
BL runtime·entersyscall(SB)
MOVD a1+8(FP), R3
MOVD a2+16(FP), R4
MOVD a3+24(FP), R5
MOVD R0, R6
MOVD R0, R7
MOVD R0, R8
MOVD trap+0(FP), R9 // syscall entry
SYSCALL R9
MOVD R3, r1+32(FP)
MOVD R4, r2+40(FP)
BL runtime·exitsyscall(SB)
RET
TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48
MOVD a1+8(FP), R3
MOVD a2+16(FP), R4
MOVD a3+24(FP), R5
MOVD R0, R6
MOVD R0, R7
MOVD R0, R8
MOVD trap+0(FP), R9 // syscall entry
SYSCALL R9
MOVD R3, r1+32(FP)
MOVD R4, r2+40(FP)
RET