1
0
mirror of https://github.com/golang/go synced 2024-11-19 23:24:45 -07:00

runtime: always initialise procid on netbsd

The correct procid is needed for unparking LWPs on NetBSD - always
initialise procid in minit() so that cgo works correctly. The non-cgo
case already works correctly since procid is initialised via
lwp_create().

R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/6257071
This commit is contained in:
Joel Sing 2012-05-31 03:27:04 +10:00
parent 334bf95f9e
commit deb93b0f7b
3 changed files with 13 additions and 3 deletions

View File

@ -292,6 +292,11 @@ TEXT runtime·lwp_unpark(SB),7,$-4
INT $0x80 INT $0x80
RET RET
TEXT runtime·lwp_self(SB),7,$-4
MOVL $311, AX // sys__lwp_self
INT $0x80
RET
TEXT runtime·sysctl(SB),7,$28 TEXT runtime·sysctl(SB),7,$28
LEAL arg0+0(FP), SI LEAL arg0+0(FP), SI
LEAL 4(SP), DI LEAL 4(SP), DI

View File

@ -61,6 +61,11 @@ TEXT runtime·lwp_unpark(SB),7,$0
SYSCALL SYSCALL
RET RET
TEXT runtime·lwp_self(SB),7,$0
MOVL $311, AX // sys__lwp_self
SYSCALL
RET
// Exit the entire program (like C exit) // Exit the entire program (like C exit)
TEXT runtime·exit(SB),7,$-8 TEXT runtime·exit(SB),7,$-8
MOVL 8(SP), DI // arg 1 - exit status MOVL 8(SP), DI // arg 1 - exit status

View File

@ -28,6 +28,7 @@ extern int32 runtime·lwp_create(UcontextT *context, uintptr flags, void *lwpid)
extern void runtime·lwp_mcontext_init(void *mc, void *stack, M *m, G *g, void (*fn)(void)); extern void runtime·lwp_mcontext_init(void *mc, void *stack, M *m, G *g, void (*fn)(void));
extern int32 runtime·lwp_park(Timespec *abstime, int32 unpark, void *hint, void *unparkhint); extern int32 runtime·lwp_park(Timespec *abstime, int32 unpark, void *hint, void *unparkhint);
extern int32 runtime·lwp_unpark(int32 lwp, void *hint); extern int32 runtime·lwp_unpark(int32 lwp, void *hint);
extern int32 runtime·lwp_self(void);
// From NetBSD's <sys/sysctl.h> // From NetBSD's <sys/sysctl.h>
#define CTL_HW 6 #define CTL_HW 6
@ -181,9 +182,6 @@ void
runtime·osinit(void) runtime·osinit(void)
{ {
runtime·ncpu = getncpu(); runtime·ncpu = getncpu();
// Main thread is always LWP 1.
m->procid = 1;
} }
void void
@ -196,6 +194,8 @@ runtime·goenvs(void)
void void
runtime·minit(void) runtime·minit(void)
{ {
m->procid = runtime·lwp_self();
// Initialize signal handling // Initialize signal handling
m->gsignal = runtime·malg(32*1024); m->gsignal = runtime·malg(32*1024);
runtime·signalstack((byte*)m->gsignal->stackguard - StackGuard, 32*1024); runtime·signalstack((byte*)m->gsignal->stackguard - StackGuard, 32*1024);