github.com/xushiwei/go@v0.0.0-20130601165731-2b9d83f45bc9/src/pkg/runtime/sys_freebsd_amd64.s (about)

     1  // Copyright 2009 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  //
     5  // System calls and other sys.stuff for AMD64, FreeBSD
     6  // /usr/src/sys/kern/syscalls.master for syscall numbers.
     7  //
     8  
     9  #include "zasm_GOOS_GOARCH.h"
    10  	
    11  TEXT runtime·sys_umtx_op(SB),7,$0
    12  	MOVQ 8(SP), DI
    13  	MOVL 16(SP), SI
    14  	MOVL 20(SP), DX
    15  	MOVQ 24(SP), R10
    16  	MOVQ 32(SP), R8
    17  	MOVL $454, AX
    18  	SYSCALL
    19  	RET
    20  
    21  TEXT runtime·thr_new(SB),7,$0
    22  	MOVQ 8(SP), DI
    23  	MOVQ 16(SP), SI
    24  	MOVL $455, AX
    25  	SYSCALL
    26  	RET
    27  
    28  TEXT runtime·thr_start(SB),7,$0
    29  	MOVQ	DI, R13 // m
    30  
    31  	// set up FS to point at m->tls
    32  	LEAQ	m_tls(R13), DI
    33  	CALL	runtime·settls(SB)	// smashes DI
    34  
    35  	// set up m, g
    36  	get_tls(CX)
    37  	MOVQ	R13, m(CX)
    38  	MOVQ	m_g0(R13), DI
    39  	MOVQ	DI, g(CX)
    40  
    41  	CALL	runtime·stackcheck(SB)
    42  	CALL	runtime·mstart(SB)
    43  
    44  	MOVQ 0, AX			// crash (not reached)
    45  
    46  // Exit the entire program (like C exit)
    47  TEXT runtime·exit(SB),7,$-8
    48  	MOVL	8(SP), DI		// arg 1 exit status
    49  	MOVL	$1, AX
    50  	SYSCALL
    51  	MOVL	$0xf1, 0xf1  // crash
    52  	RET
    53  
    54  TEXT runtime·exit1(SB),7,$-8
    55  	MOVQ	8(SP), DI		// arg 1 exit status
    56  	MOVL	$431, AX
    57  	SYSCALL
    58  	MOVL	$0xf1, 0xf1  // crash
    59  	RET
    60  
    61  TEXT runtime·open(SB),7,$-8
    62  	MOVQ	8(SP), DI		// arg 1 pathname
    63  	MOVL	16(SP), SI		// arg 2 flags
    64  	MOVL	20(SP), DX		// arg 3 mode
    65  	MOVL	$5, AX
    66  	SYSCALL
    67  	RET
    68  
    69  TEXT runtime·close(SB),7,$-8
    70  	MOVL	8(SP), DI		// arg 1 fd
    71  	MOVL	$6, AX
    72  	SYSCALL
    73  	RET
    74  
    75  TEXT runtime·read(SB),7,$-8
    76  	MOVL	8(SP), DI		// arg 1 fd
    77  	MOVQ	16(SP), SI		// arg 2 buf
    78  	MOVL	24(SP), DX		// arg 3 count
    79  	MOVL	$3, AX
    80  	SYSCALL
    81  	RET
    82  
    83  TEXT runtime·write(SB),7,$-8
    84  	MOVL	8(SP), DI		// arg 1 fd
    85  	MOVQ	16(SP), SI		// arg 2 buf
    86  	MOVL	24(SP), DX		// arg 3 count
    87  	MOVL	$4, AX
    88  	SYSCALL
    89  	RET
    90  
    91  TEXT runtime·getrlimit(SB),7,$-8
    92  	MOVL	8(SP), DI
    93  	MOVQ	16(SP), SI
    94  	MOVL	$194, AX
    95  	SYSCALL
    96  	RET
    97  
    98  TEXT runtime·raise(SB),7,$16
    99  	// thr_self(&8(SP))
   100  	LEAQ	8(SP), DI	// arg 1 &8(SP)
   101  	MOVL	$432, AX
   102  	SYSCALL
   103  	// thr_kill(self, SIGPIPE)
   104  	MOVQ	8(SP), DI	// arg 1 id
   105  	MOVL	sig+0(FP), SI	// arg 2
   106  	MOVL	$433, AX
   107  	SYSCALL
   108  	RET
   109  
   110  TEXT runtime·setitimer(SB), 7, $-8
   111  	MOVL	8(SP), DI
   112  	MOVQ	16(SP), SI
   113  	MOVQ	24(SP), DX
   114  	MOVL	$83, AX
   115  	SYSCALL
   116  	RET
   117  
   118  // func now() (sec int64, nsec int32)
   119  TEXT time·now(SB), 7, $32
   120  	MOVL	$232, AX
   121  	MOVQ	$0, DI
   122  	LEAQ	8(SP), SI
   123  	SYSCALL
   124  	MOVQ	8(SP), AX	// sec
   125  	MOVQ	16(SP), DX	// nsec
   126  
   127  	// sec is in AX, nsec in DX
   128  	MOVQ	AX, sec+0(FP)
   129  	MOVL	DX, nsec+8(FP)
   130  	RET
   131  
   132  TEXT runtime·nanotime(SB), 7, $32
   133  	MOVL	$232, AX
   134  	MOVQ	$0, DI
   135  	LEAQ	8(SP), SI
   136  	SYSCALL
   137  	MOVQ	8(SP), AX	// sec
   138  	MOVQ	16(SP), DX	// nsec
   139  
   140  	// sec is in AX, nsec in DX
   141  	// return nsec in AX
   142  	IMULQ	$1000000000, AX
   143  	ADDQ	DX, AX
   144  	RET
   145  
   146  TEXT runtime·sigaction(SB),7,$-8
   147  	MOVL	8(SP), DI		// arg 1 sig
   148  	MOVQ	16(SP), SI		// arg 2 act
   149  	MOVQ	24(SP), DX		// arg 3 oact
   150  	MOVL	$416, AX
   151  	SYSCALL
   152  	JCC	2(PC)
   153  	MOVL	$0xf1, 0xf1  // crash
   154  	RET
   155  
   156  TEXT runtime·sigtramp(SB),7,$64
   157  	get_tls(BX)
   158  	
   159  	// check that m exists
   160  	MOVQ	m(BX), BP
   161  	CMPQ	BP, $0
   162  	JNE	4(PC)
   163  	MOVQ	DI, 0(SP)
   164  	CALL	runtime·badsignal(SB)
   165  	RET
   166  
   167  	// save g
   168  	MOVQ	g(BX), R10
   169  	MOVQ	R10, 40(SP)
   170  	
   171  	// g = m->signal
   172  	MOVQ	m_gsignal(BP), BP
   173  	MOVQ	BP, g(BX)
   174  	
   175  	MOVQ	DI, 0(SP)
   176  	MOVQ	SI, 8(SP)
   177  	MOVQ	DX, 16(SP)
   178  	MOVQ	R10, 24(SP)
   179  	
   180  	CALL	runtime·sighandler(SB)
   181  
   182  	// restore g
   183  	get_tls(BX)
   184  	MOVQ	40(SP), R10
   185  	MOVQ	R10, g(BX)
   186  	RET
   187  
   188  TEXT runtime·mmap(SB),7,$0
   189  	MOVQ	8(SP), DI		// arg 1 addr
   190  	MOVQ	16(SP), SI		// arg 2 len
   191  	MOVL	24(SP), DX		// arg 3 prot
   192  	MOVL	28(SP), R10		// arg 4 flags
   193  	MOVL	32(SP), R8		// arg 5 fid
   194  	MOVL	36(SP), R9		// arg 6 offset
   195  	MOVL	$477, AX
   196  	SYSCALL
   197  	RET
   198  
   199  TEXT runtime·munmap(SB),7,$0
   200  	MOVQ	8(SP), DI		// arg 1 addr
   201  	MOVQ	16(SP), SI		// arg 2 len
   202  	MOVL	$73, AX
   203  	SYSCALL
   204  	JCC	2(PC)
   205  	MOVL	$0xf1, 0xf1  // crash
   206  	RET
   207  
   208  TEXT runtime·madvise(SB),7,$0
   209  	MOVQ	8(SP), DI
   210  	MOVQ	16(SP), SI
   211  	MOVQ	24(SP), DX
   212  	MOVQ	$75, AX	// madvise
   213  	SYSCALL
   214  	// ignore failure - maybe pages are locked
   215  	RET
   216  	
   217  TEXT runtime·sigaltstack(SB),7,$-8
   218  	MOVQ	new+8(SP), DI
   219  	MOVQ	old+16(SP), SI
   220  	MOVQ	$53, AX
   221  	SYSCALL
   222  	JCC	2(PC)
   223  	MOVL	$0xf1, 0xf1  // crash
   224  	RET
   225  
   226  TEXT runtime·usleep(SB),7,$16
   227  	MOVL	$0, DX
   228  	MOVL	usec+0(FP), AX
   229  	MOVL	$1000000, CX
   230  	DIVL	CX
   231  	MOVQ	AX, 0(SP)		// tv_sec
   232  	MOVL	$1000, AX
   233  	MULL	DX
   234  	MOVQ	AX, 8(SP)		// tv_nsec
   235  
   236  	MOVQ	SP, DI			// arg 1 - rqtp
   237  	MOVQ	$0, SI			// arg 2 - rmtp
   238  	MOVL	$240, AX		// sys_nanosleep
   239  	SYSCALL
   240  	RET
   241  
   242  // set tls base to DI
   243  TEXT runtime·settls(SB),7,$8
   244  	ADDQ	$16, DI	// adjust for ELF: wants to use -16(FS) and -8(FS) for g and m
   245  	MOVQ	DI, 0(SP)
   246  	MOVQ	SP, SI
   247  	MOVQ	$129, DI	// AMD64_SET_FSBASE
   248  	MOVQ	$165, AX	// sysarch
   249  	SYSCALL
   250  	JCC	2(PC)
   251  	MOVL	$0xf1, 0xf1  // crash
   252  	RET
   253  
   254  TEXT runtime·sysctl(SB),7,$0
   255  	MOVQ	8(SP), DI		// arg 1 - name
   256  	MOVL	16(SP), SI		// arg 2 - namelen
   257  	MOVQ	24(SP), DX		// arg 3 - oldp
   258  	MOVQ	32(SP), R10		// arg 4 - oldlenp
   259  	MOVQ	40(SP), R8		// arg 5 - newp
   260  	MOVQ	48(SP), R9		// arg 6 - newlen
   261  	MOVQ	$202, AX		// sys___sysctl
   262  	SYSCALL
   263  	JCC 3(PC)
   264  	NEGQ	AX
   265  	RET
   266  	MOVL	$0, AX
   267  	RET
   268  
   269  TEXT runtime·osyield(SB),7,$-4
   270  	MOVL	$331, AX		// sys_sched_yield
   271  	SYSCALL
   272  	RET
   273  
   274  TEXT runtime·sigprocmask(SB),7,$0
   275  	MOVL	$3, DI			// arg 1 - how (SIG_SETMASK)
   276  	MOVQ	8(SP), SI		// arg 2 - set
   277  	MOVQ	16(SP), DX		// arg 3 - oset
   278  	MOVL	$340, AX		// sys_sigprocmask
   279  	SYSCALL
   280  	JAE	2(PC)
   281  	MOVL	$0xf1, 0xf1  // crash
   282  	RET