Commit 718da333 authored by Russ Cox's avatar Russ Cox

darwin: bsdthread_create can fail; print good error

Fixes #549.

R=adg
CC=golang-dev
https://golang.org/cl/1019042
parent 7c77e450
...@@ -130,8 +130,10 @@ TEXT bsdthread_create(SB),7,$32 ...@@ -130,8 +130,10 @@ TEXT bsdthread_create(SB),7,$32
MOVL BX, 16(SP) // pthread MOVL BX, 16(SP) // pthread
MOVL $0x1000000, 20(SP) // flags = PTHREAD_START_CUSTOM MOVL $0x1000000, 20(SP) // flags = PTHREAD_START_CUSTOM
INT $0x80 INT $0x80
JAE 2(PC) JAE 3(PC)
CALL notok(SB) MOVL $-1, AX
RET
MOVL $0, AX
RET RET
// The thread that bsdthread_create creates starts executing here, // The thread that bsdthread_create creates starts executing here,
......
...@@ -116,8 +116,10 @@ TEXT bsdthread_create(SB),7,$0 ...@@ -116,8 +116,10 @@ TEXT bsdthread_create(SB),7,$0
MOVQ $0, R9 // paranoia MOVQ $0, R9 // paranoia
MOVQ $(0x2000000+360), AX // bsdthread_create MOVQ $(0x2000000+360), AX // bsdthread_create
SYSCALL SYSCALL
JCC 2(PC) JCC 3(PC)
CALL notok(SB) MOVL $-1, AX
RET
MOVL $0, AX
RET RET
// The thread that bsdthread_create creates starts executing here, // The thread that bsdthread_create creates starts executing here,
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
void bsdthread_create(void*, M*, G*, void(*)(void)); int32 bsdthread_create(void*, M*, G*, void(*)(void));
void bsdthread_register(void); void bsdthread_register(void);
int32 mach_msg_trap(MachHeader*, int32, uint32, uint32, uint32, uint32, uint32); int32 mach_msg_trap(MachHeader*, int32, uint32, uint32, uint32, uint32, uint32);
uint32 mach_reply_port(void); uint32 mach_reply_port(void);
......
...@@ -157,7 +157,8 @@ newosproc(M *m, G *g, void *stk, void (*fn)(void)) ...@@ -157,7 +157,8 @@ newosproc(M *m, G *g, void *stk, void (*fn)(void))
printf("newosproc stk=%p m=%p g=%p fn=%p id=%d/%d ostk=%p\n", printf("newosproc stk=%p m=%p g=%p fn=%p id=%d/%d ostk=%p\n",
stk, m, g, fn, m->id, m->tls[0], &m); stk, m, g, fn, m->id, m->tls[0], &m);
} }
bsdthread_create(stk, m, g, fn); if(bsdthread_create(stk, m, g, fn) < 0)
throw("cannot create new OS thread");
} }
// Called to initialize a new m (including the bootstrap m). // Called to initialize a new m (including the bootstrap m).
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment