Move the mstartfn into its own field.
Simpler, more likely to be correct.
R=golang-dev, devon.odell
CC=golang-dev
https://golang.org/cl/
7414046
uintptr cret; // return value from C
uint64 procid; // for debuggers, but offset not hard-coded
G* gsignal; // signal-handling G
- uint64 tls[4]; // thread-local storage (for x86 extern register)
+ uintptr tls[4]; // thread-local storage (for x86 extern register)
+ void (*mstartfn)(void);
G* curg; // current running goroutine
P* p; // attached P for executing Go code (nil if not executing Go code)
P* nextp;
MOVL AX, m(CX)
CALL runtime·stackcheck(SB) // smashes AX
- // newosproc left the function we should call in mp->tls[2] for us.
+ // newosproc left the function we should call in mp->mstartfn.
get_tls(CX)
- MOVQ 8(CX), AX
+ MOVL m(CX), AX
+ MOVL m_mstartfn(AX), AX
CALL AX
MOVL 0, AX // crash (not reached)
// set up m, g
get_tls(CX)
- MOVQ 8(CX), AX
MOVQ R13, m(CX)
MOVQ m_g0(R13), DI
MOVQ DI, g(CX)
CALL runtime·stackcheck(SB)
- // newosproc left the function we should call in mp->tls[2] for us.
+ // newosproc left the function we should call in mp->mstartfn.
get_tls(CX)
- MOVQ 16(CX), AX
+ MOVQ m(CX), AX
+ MOVQ m_mstartfn(AX), AX
CALL AX
MOVQ 0, AX // crash (not reached)
CALL runtime·stackcheck(SB) // clobbers AX,CX
- // start function is in tls[2]
+ // newosproc left the function we should call in mp->mstartfn.
get_tls(CX)
- MOVL 8(CX), AX
+ MOVL m(CX), AX
+ MOVL m_mstartfn(AX), AX
CALL AX
RET
CALL runtime·stackcheck(SB) // clobbers AX,CX
- // start function is in tls[2]
get_tls(CX)
- MOVQ 16(CX), AX
+ MOVQ m(CX), AX
+ MOVQ m_mstartfn(AX), AX
CALL AX
XORL AX, AX // return 0 == success
param.tls_size = sizeof mp->tls;
mp->tls[0] = mp->id; // so 386 asm can find it
- mp->tls[2] = (uintptr)fn;
+ mp->mstartfn = fn;
runtime·thr_new(¶m, sizeof param);
runtime·sigprocmask(&oset, nil);
if(gp != mp->g0)
runtime·throw("invalid newosproc gp");
- mp->tls[2] = (uintptr)fn;
+ mp->mstartfn = fn;
thandle = runtime·stdcall(runtime·CreateThread, 6,
nil, (uintptr)0x20000, runtime·tstart_stdcall, mp,