mirror of
https://github.com/golang/go
synced 2024-10-05 03:11:22 -06:00
8bca148a3e
The file is used by assembly code to define symbols like NOSPLIT. Having it hidden inside the cmd directory makes it hard to access outside the standard repository. Solution: As with a couple of other files used by cgo, copy the file into the pkg directory and add a -I argument to the assembler to access it. Thus one can write just #include "textflag.h" in .s files. The names in runtime are not updated because in the boot sequence the file has not been copied yet when runtime is built. All other .s files in the repository are updated. Changes to doc/asm.html, src/cmd/dist/build.c, and src/cmd/go/build.go are hand-made. The rest are just the renaming done by a global substitution. (Yay sam). LGTM=rsc R=rsc CC=golang-codereviews https://golang.org/cl/128050043
163 lines
2.8 KiB
ArmAsm
163 lines
2.8 KiB
ArmAsm
// Copyright 2009 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.
|
|
|
|
// TODO(rsc): Rewrite all nn(SP) references into name+(nn-8)(FP)
|
|
// so that go vet can check that they are correct.
|
|
|
|
#include "textflag.h"
|
|
|
|
//
|
|
// System call support for Plan 9
|
|
//
|
|
|
|
//func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err string)
|
|
//func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err string)
|
|
//func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr)
|
|
//func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr)
|
|
|
|
TEXT ·Syscall(SB),NOSPLIT,$0-64
|
|
CALL runtime·entersyscall(SB)
|
|
MOVQ 8(SP), BP // syscall entry
|
|
// slide args down on top of system call number
|
|
LEAQ 16(SP), SI
|
|
LEAQ 8(SP), DI
|
|
CLD
|
|
MOVSQ
|
|
MOVSQ
|
|
MOVSQ
|
|
SYSCALL
|
|
MOVQ AX, r1+40(SP)
|
|
MOVQ $0, r2+48(SP)
|
|
CMPL AX, $-1
|
|
JNE ok3
|
|
|
|
SUBQ $16, SP
|
|
CALL runtime·errstr(SB)
|
|
MOVQ SP, SI
|
|
ADDQ $16, SP
|
|
JMP copyresult3
|
|
|
|
ok3:
|
|
LEAQ runtime·emptystring(SB), SI
|
|
|
|
copyresult3:
|
|
LEAQ err+56(SP), DI
|
|
|
|
CLD
|
|
MOVSQ
|
|
MOVSQ
|
|
|
|
CALL runtime·exitsyscall(SB)
|
|
RET
|
|
|
|
TEXT ·Syscall6(SB),NOSPLIT,$0-88
|
|
CALL runtime·entersyscall(SB)
|
|
MOVQ 8(SP), BP // syscall entry
|
|
// slide args down on top of system call number
|
|
LEAQ 16(SP), SI
|
|
LEAQ 8(SP), DI
|
|
CLD
|
|
MOVSQ
|
|
MOVSQ
|
|
MOVSQ
|
|
MOVSQ
|
|
MOVSQ
|
|
MOVSQ
|
|
SYSCALL
|
|
MOVQ AX, r1+64(SP)
|
|
MOVQ $0, r2+72(SP)
|
|
CMPL AX, $-1
|
|
JNE ok4
|
|
|
|
SUBQ $16, SP
|
|
CALL runtime·errstr(SB)
|
|
MOVQ SP, SI
|
|
ADDQ $16, SP
|
|
JMP copyresult4
|
|
|
|
ok4:
|
|
LEAQ runtime·emptystring(SB), SI
|
|
|
|
copyresult4:
|
|
LEAQ err+80(SP), DI
|
|
|
|
CLD
|
|
MOVSQ
|
|
MOVSQ
|
|
|
|
CALL runtime·exitsyscall(SB)
|
|
RET
|
|
|
|
TEXT ·RawSyscall(SB),NOSPLIT,$0-56
|
|
MOVQ 8(SP), BP // syscall entry
|
|
// slide args down on top of system call number
|
|
LEAQ 16(SP), SI
|
|
LEAQ 8(SP), DI
|
|
CLD
|
|
MOVSQ
|
|
MOVSQ
|
|
MOVSQ
|
|
SYSCALL
|
|
MOVQ AX, r1+40(SP)
|
|
MOVQ AX, r2+48(SP)
|
|
MOVQ AX, err+56(SP)
|
|
RET
|
|
|
|
TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
|
|
MOVQ 8(SP), BP // syscall entry
|
|
// slide args down on top of system call number
|
|
LEAQ 16(SP), SI
|
|
LEAQ 8(SP), DI
|
|
CLD
|
|
MOVSQ
|
|
MOVSQ
|
|
MOVSQ
|
|
MOVSQ
|
|
MOVSQ
|
|
MOVSQ
|
|
SYSCALL
|
|
MOVQ AX, r1+64(SP)
|
|
MOVQ AX, r2+72(SP)
|
|
MOVQ AX, err+80(SP)
|
|
RET
|
|
|
|
#define SYS_SEEK 39 /* from zsysnum_plan9_amd64.go */
|
|
|
|
//func seek(placeholder uintptr, fd int, offset int64, whence int) (newoffset int64, err string)
|
|
TEXT ·seek(SB),NOSPLIT,$0-56
|
|
LEAQ newoffset+40(SP), AX
|
|
MOVQ AX, placeholder+8(SP)
|
|
|
|
MOVQ $SYS_SEEK, BP // syscall entry
|
|
SYSCALL
|
|
|
|
CMPL AX, $-1
|
|
JNE ok6
|
|
MOVQ $-1, newoffset+40(SP)
|
|
|
|
SUBQ $16, SP
|
|
CALL syscall·errstr(SB)
|
|
MOVQ SP, SI
|
|
ADDQ $16, SP
|
|
JMP copyresult6
|
|
|
|
ok6:
|
|
LEAQ runtime·emptystring(SB), SI
|
|
|
|
copyresult6:
|
|
LEAQ err+48(SP), DI
|
|
|
|
CLD
|
|
MOVSQ
|
|
MOVSQ
|
|
RET
|
|
|
|
//func exit(code int)
|
|
// Import runtime·exit for cleanly exiting.
|
|
TEXT ·exit(SB),NOSPLIT,$8-8
|
|
MOVQ code+0(FP), AX
|
|
MOVQ AX, 0(SP)
|
|
CALL runtime·exit(SB)
|
|
RET
|