summaryrefslogtreecommitdiff
path: root/lib/thread/start+osx-x64.s
blob: bc62d088f09d380235c6eb934db591cf0a728e20 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// The entry point for thread start, registered with bsdthread_register
//      %rdi: pthread (0, for us)
//      %rsi: mach thread port (ignored)
//      %rdx: func
//      %rcx: env
//      %r8: stack
//      %r9: flags (= 0)
//      %rsp: stack - C_64_REDZONE_LEN (= stack - 128)
.globl _thread$start
_thread$start:
	/* call the function */
#	movq	%r8, %rsp	/* set up stack */
	movq	%rcx, %rax	/* set up env */
        callq    *%rdx		/* call function */

	/* exit the thread */
	movq	$0x2000169, %rax	/* Sysbsdthread_terminate */
	movq	%rsp, %rdi	/* stack */
	movq	$0, %rsi	/* len */
	movq	$0, %rdx	/* sem */
	syscall