// May run with m.p==nil, so write barriers are not allowed.
//go:nowritebarrier
func newosproc(mp *m, stk unsafe.Pointer) {
- mp.tls[0] = uintptr(mp.id) // so 386 asm can find it
if false {
- print("newosproc stk=", stk, " m=", mp, " g=", mp.g0, " id=", mp.id, "/", int(mp.tls[0]), " ostk=", &mp, "\n")
+ print("newosproc stk=", stk, " m=", mp, " g=", mp.g0, " id=", mp.id, " ostk=", &mp, "\n")
}
var oset uint32
//go:nowritebarrier
func newosproc(mp *m, stk unsafe.Pointer) {
if false {
- print("newosproc stk=", stk, " m=", mp, " g=", mp.g0, " lwp_start=", funcPC(lwp_start), " id=", mp.id, "/", mp.tls[0], " ostk=", &mp, "\n")
+ print("newosproc stk=", stk, " m=", mp, " g=", mp.g0, " lwp_start=", funcPC(lwp_start), " id=", mp.id, " ostk=", &mp, "\n")
}
var oset sigset
tid2: nil,
}
- mp.tls[0] = uintptr(mp.id) // XXX so 386 asm can find it
-
lwp_create(¶ms)
sigprocmask(_SIG_SETMASK, &oset, nil)
}
//go:nowritebarrier
func newosproc(mp *m, stk unsafe.Pointer) {
if false {
- print("newosproc stk=", stk, " m=", mp, " g=", mp.g0, " thr_start=", funcPC(thr_start), " id=", mp.id, "/", mp.tls[0], " ostk=", &mp, "\n")
+ print("newosproc stk=", stk, " m=", mp, " g=", mp.g0, " thr_start=", funcPC(thr_start), " id=", mp.id, " ostk=", &mp, "\n")
}
// NOTE(rsc): This code is confused. stackbase is the top of the stack
tls_base: unsafe.Pointer(&mp.tls[0]),
tls_size: unsafe.Sizeof(mp.tls),
}
- mp.tls[0] = uintptr(mp.id) // so 386 asm can find it
var oset sigset
sigprocmask(_SIG_SETMASK, &sigset_all, &oset)
/*
* note: strace gets confused if we use CLONE_PTRACE here.
*/
- mp.tls[0] = uintptr(mp.id) // so 386 asm can find it
if false {
- print("newosproc stk=", stk, " m=", mp, " g=", mp.g0, " clone=", funcPC(clone), " id=", mp.id, "/", mp.tls[0], " ostk=", &mp, "\n")
+ print("newosproc stk=", stk, " m=", mp, " g=", mp.g0, " clone=", funcPC(clone), " id=", mp.id, " ostk=", &mp, "\n")
}
// Disable signals during clone, so that the new thread starts
//go:nowritebarrier
func newosproc(mp *m, stk unsafe.Pointer) {
if false {
- print("newosproc stk=", stk, " m=", mp, " g=", mp.g0, " id=", mp.id, "/", int32(mp.tls[0]), " ostk=", &mp, "\n")
+ print("newosproc stk=", stk, " m=", mp, " g=", mp.g0, " id=", mp.id, " ostk=", &mp, "\n")
}
- mp.tls[0] = uintptr(mp.id) // so 386 asm can find it
-
var uc ucontextt
getcontext(unsafe.Pointer(&uc))
//go:nowritebarrier
func newosproc(mp *m, stk unsafe.Pointer) {
if false {
- print("newosproc stk=", stk, " m=", mp, " g=", mp.g0, " id=", mp.id, "/", int32(mp.tls[0]), " ostk=", &mp, "\n")
+ print("newosproc stk=", stk, " m=", mp, " g=", mp.g0, " id=", mp.id, " ostk=", &mp, "\n")
}
- mp.tls[0] = uintptr(mp.id) // so 386 asm can find it
-
param := tforkt{
tf_tcb: unsafe.Pointer(&mp.tls[0]),
tf_tid: (*int32)(unsafe.Pointer(&mp.procid)),
// SP = stack - C_32_STK_ALIGN
TEXT runtime·bsdthread_start(SB),NOSPLIT,$0
// set up ldt 7+id to point at m->tls.
- // m->tls is at m+40. newosproc left
- // the m->id in tls[0].
LEAL m_tls(DX), BP
- MOVL 0(BP), DI
+ MOVL m_id(DX), DI
ADDL $7, DI // m0 is LDT#7. count up.
// setldt(tls#, &tls, sizeof tls)
PUSHAL // save registers
MOVL mm+0(FP), AX
MOVL m_g0(AX), BX
LEAL m_tls(AX), BP
- MOVL 0(BP), DI
+ MOVL m_id(AX), DI
ADDL $7, DI
PUSHAL
PUSHL $32
MOVL AX, m_procid(BX) // save tid as m->procid
// set up ldt 7+id to point at m->tls.
- // newosproc left the id in tls[0].
LEAL m_tls(BX), BP
- MOVL 0(BP), DI
+ MOVL m_id(BX), DI
ADDL $7, DI // m0 is LDT#7. count up.
// setldt(tls#, &tls, sizeof tls)
PUSHAL // save registers