diff --git a/src/pkg/runtime/sys_netbsd_386.s b/src/pkg/runtime/sys_netbsd_386.s index 1c1254ddaf..d8b422ea2a 100644 --- a/src/pkg/runtime/sys_netbsd_386.s +++ b/src/pkg/runtime/sys_netbsd_386.s @@ -292,6 +292,11 @@ TEXT runtime·lwp_unpark(SB),7,$-4 INT $0x80 RET +TEXT runtime·lwp_self(SB),7,$-4 + MOVL $311, AX // sys__lwp_self + INT $0x80 + RET + TEXT runtime·sysctl(SB),7,$28 LEAL arg0+0(FP), SI LEAL 4(SP), DI diff --git a/src/pkg/runtime/sys_netbsd_amd64.s b/src/pkg/runtime/sys_netbsd_amd64.s index d0543c92ac..b13800c47e 100644 --- a/src/pkg/runtime/sys_netbsd_amd64.s +++ b/src/pkg/runtime/sys_netbsd_amd64.s @@ -61,6 +61,11 @@ TEXT runtime·lwp_unpark(SB),7,$0 SYSCALL RET +TEXT runtime·lwp_self(SB),7,$0 + MOVL $311, AX // sys__lwp_self + SYSCALL + RET + // Exit the entire program (like C exit) TEXT runtime·exit(SB),7,$-8 MOVL 8(SP), DI // arg 1 - exit status diff --git a/src/pkg/runtime/thread_netbsd.c b/src/pkg/runtime/thread_netbsd.c index d87c6b003e..be6c205c28 100644 --- a/src/pkg/runtime/thread_netbsd.c +++ b/src/pkg/runtime/thread_netbsd.c @@ -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 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_self(void); // From NetBSD's #define CTL_HW 6 @@ -181,9 +182,6 @@ void runtime·osinit(void) { runtime·ncpu = getncpu(); - - // Main thread is always LWP 1. - m->procid = 1; } void @@ -196,6 +194,8 @@ runtime·goenvs(void) void runtime·minit(void) { + m->procid = runtime·lwp_self(); + // Initialize signal handling m->gsignal = runtime·malg(32*1024); runtime·signalstack((byte*)m->gsignal->stackguard - StackGuard, 32*1024);