2012-08-31 11:21:13 -06:00
|
|
|
// Copyright 2010 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.
|
|
|
|
|
|
|
|
#include "zasm_GOOS_GOARCH.h"
|
|
|
|
|
|
|
|
// setldt(int entry, int address, int limit)
|
|
|
|
TEXT runtime·setldt(SB),7,$0
|
|
|
|
RET
|
|
|
|
|
|
|
|
TEXT runtime·open(SB),7,$0
|
|
|
|
MOVQ $0x8000, AX
|
|
|
|
MOVQ $14, BP
|
|
|
|
SYSCALL
|
|
|
|
RET
|
|
|
|
|
|
|
|
TEXT runtime·pread(SB),7,$0
|
|
|
|
MOVQ $0x8000, AX
|
|
|
|
MOVQ $50, BP
|
|
|
|
SYSCALL
|
|
|
|
RET
|
|
|
|
|
|
|
|
TEXT runtime·pwrite(SB),7,$0
|
|
|
|
MOVQ $0x8000, AX
|
|
|
|
MOVQ $51, BP
|
|
|
|
SYSCALL
|
|
|
|
RET
|
|
|
|
|
2012-12-17 09:07:40 -07:00
|
|
|
// int32 _seek(int64*, int32, int64, int32)
|
|
|
|
TEXT _seek<>(SB),7,$0
|
|
|
|
MOVQ $0x8000, AX
|
|
|
|
MOVQ $39, BP
|
|
|
|
SYSCALL
|
|
|
|
RET
|
|
|
|
|
|
|
|
// int64 seek(int32, int64, int32)
|
|
|
|
TEXT runtime·seek(SB),7,$56
|
|
|
|
LEAQ new+48(SP), CX
|
|
|
|
MOVQ CX, 0(SP)
|
|
|
|
MOVQ fd+0(FP), CX
|
|
|
|
MOVQ CX, 8(SP)
|
|
|
|
MOVQ off+8(FP), CX
|
|
|
|
MOVQ CX, 16(SP)
|
|
|
|
MOVQ whence+16(FP), CX
|
|
|
|
MOVQ CX, 24(SP)
|
|
|
|
CALL _seek<>(SB)
|
|
|
|
CMPL AX, $0
|
|
|
|
JGE 2(PC)
|
|
|
|
MOVQ $-1, new+48(SP)
|
|
|
|
MOVQ new+48(SP), AX
|
|
|
|
RET
|
|
|
|
|
2012-08-31 11:21:13 -06:00
|
|
|
TEXT runtime·close(SB),7,$0
|
|
|
|
MOVQ $0x8000, AX
|
|
|
|
MOVQ $4, BP
|
|
|
|
SYSCALL
|
|
|
|
RET
|
|
|
|
|
|
|
|
TEXT runtime·exits(SB),7,$0
|
|
|
|
MOVQ $0x8000, AX
|
|
|
|
MOVQ $8, BP
|
|
|
|
SYSCALL
|
|
|
|
RET
|
|
|
|
|
|
|
|
TEXT runtime·brk_(SB),7,$0
|
|
|
|
MOVQ $0x8000, AX
|
|
|
|
MOVQ $24, BP
|
|
|
|
SYSCALL
|
|
|
|
RET
|
|
|
|
|
|
|
|
TEXT runtime·sleep(SB),7,$0
|
|
|
|
MOVQ $0x8000, AX
|
|
|
|
MOVQ $17, BP
|
|
|
|
SYSCALL
|
|
|
|
RET
|
|
|
|
|
|
|
|
TEXT runtime·plan9_semacquire(SB),7,$0
|
|
|
|
MOVQ $0x8000, AX
|
|
|
|
MOVQ $37, BP
|
|
|
|
SYSCALL
|
|
|
|
RET
|
|
|
|
|
|
|
|
TEXT runtime·plan9_tsemacquire(SB),7,$0
|
|
|
|
MOVQ $0x8000, AX
|
|
|
|
MOVQ $52, BP
|
|
|
|
SYSCALL
|
|
|
|
RET
|
|
|
|
|
|
|
|
TEXT runtime·notify(SB),7,$0
|
|
|
|
MOVQ $0x8000, AX
|
|
|
|
MOVQ $28, BP
|
|
|
|
SYSCALL
|
|
|
|
RET
|
|
|
|
|
|
|
|
TEXT runtime·noted(SB),7,$0
|
|
|
|
MOVQ $0x8000, AX
|
|
|
|
MOVQ $29, BP
|
|
|
|
SYSCALL
|
|
|
|
RET
|
|
|
|
|
|
|
|
TEXT runtime·plan9_semrelease(SB),7,$0
|
|
|
|
MOVQ $0x8000, AX
|
|
|
|
MOVQ $38, BP
|
|
|
|
SYSCALL
|
|
|
|
RET
|
2013-01-30 03:53:56 -07:00
|
|
|
|
2013-02-25 17:56:08 -07:00
|
|
|
TEXT runtime·nanotime(SB),7,$0
|
|
|
|
MOVQ $0x8000, AX
|
|
|
|
MOVQ $60, BP
|
|
|
|
SYSCALL
|
|
|
|
RET
|
|
|
|
|
2012-08-31 11:21:13 -06:00
|
|
|
TEXT runtime·rfork(SB),7,$0
|
|
|
|
MOVQ $0x8000, AX
|
|
|
|
MOVQ $19, BP // rfork
|
|
|
|
SYSCALL
|
|
|
|
|
|
|
|
// In parent, return.
|
|
|
|
CMPQ AX, $0
|
|
|
|
JEQ 2(PC)
|
|
|
|
RET
|
|
|
|
|
|
|
|
// In child on forked stack.
|
|
|
|
MOVQ mm+24(SP), BX // m
|
|
|
|
MOVQ gg+32(SP), DX // g
|
|
|
|
MOVQ fn+40(SP), SI // fn
|
|
|
|
|
|
|
|
// set SP to be on the new child stack
|
|
|
|
MOVQ stack+16(SP), CX
|
|
|
|
MOVQ CX, SP
|
|
|
|
|
|
|
|
// Initialize m, g.
|
|
|
|
get_tls(AX)
|
|
|
|
MOVQ DX, g(AX)
|
|
|
|
MOVQ BX, m(AX)
|
|
|
|
|
2012-09-24 10:24:45 -06:00
|
|
|
// Initialize AX from pid in TLS.
|
|
|
|
MOVQ procid(AX), AX
|
2012-08-31 11:21:13 -06:00
|
|
|
MOVQ AX, m_procid(BX) // save pid as m->procid
|
|
|
|
|
|
|
|
CALL runtime·stackcheck(SB) // smashes AX, CX
|
|
|
|
|
|
|
|
MOVQ 0(DX), DX // paranoia; check they are not nil
|
|
|
|
MOVQ 0(BX), BX
|
|
|
|
|
|
|
|
CALL SI // fn()
|
|
|
|
CALL runtime·exit(SB)
|
|
|
|
RET
|
|
|
|
|
|
|
|
// This is needed by asm_amd64.s
|
|
|
|
TEXT runtime·settls(SB),7,$0
|
|
|
|
RET
|
2012-10-05 14:23:30 -06:00
|
|
|
|
2013-01-30 03:53:56 -07:00
|
|
|
// void sigtramp(void *ureg, int8 *note)
|
|
|
|
TEXT runtime·sigtramp(SB),7,$0
|
|
|
|
get_tls(AX)
|
|
|
|
|
|
|
|
// check that m exists
|
|
|
|
MOVQ m(AX), BX
|
|
|
|
CMPQ BX, $0
|
|
|
|
JNE 3(PC)
|
|
|
|
CALL runtime·badsignal(SB) // will exit
|
|
|
|
RET
|
|
|
|
|
|
|
|
// save args
|
|
|
|
MOVQ ureg+8(SP), CX
|
|
|
|
MOVQ note+16(SP), DX
|
|
|
|
|
|
|
|
// change stack
|
|
|
|
MOVQ m_gsignal(BX), R10
|
|
|
|
MOVQ g_stackbase(R10), BP
|
|
|
|
MOVQ BP, SP
|
|
|
|
|
|
|
|
// make room for args and g
|
|
|
|
SUBQ $32, SP
|
|
|
|
|
|
|
|
// save g
|
|
|
|
MOVQ g(AX), BP
|
|
|
|
MOVQ BP, 24(SP)
|
|
|
|
|
|
|
|
// g = m->gsignal
|
|
|
|
MOVQ R10, g(AX)
|
|
|
|
|
|
|
|
// load args and call sighandler
|
|
|
|
MOVQ CX, 0(SP)
|
|
|
|
MOVQ DX, 8(SP)
|
|
|
|
MOVQ BP, 16(SP)
|
|
|
|
|
|
|
|
CALL runtime·sighandler(SB)
|
|
|
|
|
|
|
|
// restore g
|
|
|
|
get_tls(BX)
|
|
|
|
MOVQ 24(SP), R10
|
|
|
|
MOVQ R10, g(BX)
|
|
|
|
|
|
|
|
// call noted(AX)
|
|
|
|
MOVQ AX, 0(SP)
|
|
|
|
CALL runtime·noted(SB)
|
|
|
|
RET
|
|
|
|
|
2012-10-05 14:23:30 -06:00
|
|
|
TEXT runtime·setfpmasks(SB),7,$8
|
|
|
|
STMXCSR 0(SP)
|
|
|
|
MOVL 0(SP), AX
|
|
|
|
ANDL $~0x3F, AX
|
|
|
|
ORL $(0x3F<<7), AX
|
|
|
|
MOVL AX, 0(SP)
|
|
|
|
LDMXCSR 0(SP)
|
|
|
|
RET
|
2013-03-07 16:54:44 -07:00
|
|
|
|
|
|
|
#define ERRMAX 128 /* from os_plan9.h */
|
|
|
|
|
|
|
|
// func errstr() String
|
|
|
|
// Only used by package syscall.
|
|
|
|
// Grab error string due to a syscall made
|
|
|
|
// in entersyscall mode, without going
|
|
|
|
// through the allocator (issue 4994).
|
|
|
|
// See ../syscall/asm_plan9_386.s:/·Syscall/
|
|
|
|
TEXT runtime·errstr(SB),7,$0
|
|
|
|
get_tls(AX)
|
|
|
|
MOVQ m(AX), BX
|
|
|
|
MOVQ m_errstr(BX), CX
|
|
|
|
MOVQ CX, 8(SP)
|
|
|
|
MOVQ $ERRMAX, 16(SP)
|
|
|
|
MOVQ $0x8000, AX
|
|
|
|
MOVQ $41, BP
|
|
|
|
SYSCALL
|
2013-03-08 21:39:15 -07:00
|
|
|
|
|
|
|
// syscall requires caller-save
|
|
|
|
MOVQ 8(SP), CX
|
|
|
|
|
|
|
|
// push the argument
|
|
|
|
PUSHQ CX
|
2013-03-07 16:54:44 -07:00
|
|
|
CALL runtime·findnull(SB)
|
2013-03-08 21:39:15 -07:00
|
|
|
POPQ CX
|
2013-03-07 16:54:44 -07:00
|
|
|
MOVQ AX, 16(SP)
|
|
|
|
RET
|