Commit d0d7416d authored by Russ Cox's avatar Russ Cox

runtime: more build fixing

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
parent c5f694a5
...@@ -265,7 +265,8 @@ struct M ...@@ -265,7 +265,8 @@ struct M
uintptr cret; // return value from C uintptr cret; // return value from C
uint64 procid; // for debuggers, but offset not hard-coded uint64 procid; // for debuggers, but offset not hard-coded
G* gsignal; // signal-handling G 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 G* curg; // current running goroutine
P* p; // attached P for executing Go code (nil if not executing Go code) P* p; // attached P for executing Go code (nil if not executing Go code)
P* nextp; P* nextp;
......
...@@ -39,9 +39,10 @@ TEXT runtime·thr_start(SB),7,$0 ...@@ -39,9 +39,10 @@ TEXT runtime·thr_start(SB),7,$0
MOVL AX, m(CX) MOVL AX, m(CX)
CALL runtime·stackcheck(SB) // smashes AX 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) get_tls(CX)
MOVQ 8(CX), AX MOVL m(CX), AX
MOVL m_mstartfn(AX), AX
CALL AX CALL AX
MOVL 0, AX // crash (not reached) MOVL 0, AX // crash (not reached)
......
...@@ -34,16 +34,16 @@ TEXT runtime·thr_start(SB),7,$0 ...@@ -34,16 +34,16 @@ TEXT runtime·thr_start(SB),7,$0
// set up m, g // set up m, g
get_tls(CX) get_tls(CX)
MOVQ 8(CX), AX
MOVQ R13, m(CX) MOVQ R13, m(CX)
MOVQ m_g0(R13), DI MOVQ m_g0(R13), DI
MOVQ DI, g(CX) MOVQ DI, g(CX)
CALL runtime·stackcheck(SB) 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) get_tls(CX)
MOVQ 16(CX), AX MOVQ m(CX), AX
MOVQ m_mstartfn(AX), AX
CALL AX CALL AX
MOVQ 0, AX // crash (not reached) MOVQ 0, AX // crash (not reached)
......
...@@ -260,9 +260,10 @@ TEXT runtime·tstart(SB),7,$0 ...@@ -260,9 +260,10 @@ TEXT runtime·tstart(SB),7,$0
CALL runtime·stackcheck(SB) // clobbers AX,CX 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) get_tls(CX)
MOVL 8(CX), AX MOVL m(CX), AX
MOVL m_mstartfn(AX), AX
CALL AX CALL AX
RET RET
......
...@@ -330,9 +330,9 @@ TEXT runtime·tstart_stdcall(SB),7,$0 ...@@ -330,9 +330,9 @@ TEXT runtime·tstart_stdcall(SB),7,$0
CALL runtime·stackcheck(SB) // clobbers AX,CX CALL runtime·stackcheck(SB) // clobbers AX,CX
// start function is in tls[2]
get_tls(CX) get_tls(CX)
MOVQ 16(CX), AX MOVQ m(CX), AX
MOVQ m_mstartfn(AX), AX
CALL AX CALL AX
XORL AX, AX // return 0 == success XORL AX, AX // return 0 == success
......
...@@ -104,7 +104,7 @@ runtime·newosproc(M *mp, G *gp, void *stk, void (*fn)(void)) ...@@ -104,7 +104,7 @@ runtime·newosproc(M *mp, G *gp, void *stk, void (*fn)(void))
param.tls_size = sizeof mp->tls; param.tls_size = sizeof mp->tls;
mp->tls[0] = mp->id; // so 386 asm can find it mp->tls[0] = mp->id; // so 386 asm can find it
mp->tls[2] = (uintptr)fn; mp->mstartfn = fn;
runtime·thr_new(&param, sizeof param); runtime·thr_new(&param, sizeof param);
runtime·sigprocmask(&oset, nil); runtime·sigprocmask(&oset, nil);
......
...@@ -197,7 +197,7 @@ runtime·newosproc(M *mp, G *gp, void *stk, void (*fn)(void)) ...@@ -197,7 +197,7 @@ runtime·newosproc(M *mp, G *gp, void *stk, void (*fn)(void))
if(gp != mp->g0) if(gp != mp->g0)
runtime·throw("invalid newosproc gp"); runtime·throw("invalid newosproc gp");
mp->tls[2] = (uintptr)fn; mp->mstartfn = fn;
thandle = runtime·stdcall(runtime·CreateThread, 6, thandle = runtime·stdcall(runtime·CreateThread, 6,
nil, (uintptr)0x20000, runtime·tstart_stdcall, mp, nil, (uintptr)0x20000, runtime·tstart_stdcall, mp,
......
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