]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: ctrlhandler for windows amd64
authorWei Guangjing <vcc.163@gmail.com>
Thu, 18 Aug 2011 16:37:42 +0000 (12:37 -0400)
committerRuss Cox <rsc@golang.org>
Thu, 18 Aug 2011 16:37:42 +0000 (12:37 -0400)
R=rsc
CC=golang-dev
https://golang.org/cl/4825047

src/pkg/runtime/windows/amd64/signal.c
src/pkg/runtime/windows/amd64/sys.s

index 1fc3eb060670ba4038be3799ddc93026fac0e207..46951152f5bede306a4a19401768ad0931d2e005 100644 (file)
@@ -9,6 +9,7 @@
 void
 runtime·initsig(int32 queue)
 {
+       runtime·siginit();
 }
 
 void
index 2009d164ec0e068f164c646641f7c6da771d70c6..891e0d50f957c5f2c61fc0f7cd0ecd45b4788aa7 100644 (file)
@@ -61,8 +61,42 @@ TEXT runtime·setlasterror(SB),7,$0
 
 // Windows runs the ctrl handler in a new thread.
 TEXT runtime·ctrlhandler(SB),7,$0
-       // TODO
-       RET
+       PUSHQ   BP
+       MOVQ    SP, BP
+       PUSHQ   BX
+       PUSHQ   SI
+       PUSHQ   DI
+       PUSHQ   0x58(GS)
+       MOVQ    SP, BX
+
+       // setup dummy m, g
+       SUBQ    $(m_gostack+8), SP      // at least space for m_gostack
+       LEAQ    m_tls(SP), CX
+       MOVQ    CX, 0x58(GS)
+       MOVQ    SP, m(CX)
+       MOVQ    SP, DX
+       SUBQ    $16, SP                 // space for g_stack{guard,base}
+       MOVQ    SP, g(CX)
+       MOVQ    SP, m_g0(DX)
+       LEAQ    -8192(SP), CX
+       MOVQ    CX, g_stackguard(SP)
+       MOVQ    BX, g_stackbase(SP)
+
+       PUSHQ   16(BP)
+       CALL    runtime·ctrlhandler1(SB)
+       POPQ    CX
+
+       get_tls(CX)
+       MOVQ    g(CX), CX
+       MOVQ    g_stackbase(CX), SP
+       POPQ    0x58(GS)
+       POPQ    DI
+       POPQ    SI
+       POPQ    BX
+       POPQ    BP
+       MOVQ    0(SP), CX
+       ADDQ    $16, SP
+       JMP     CX
        
 TEXT runtime·callbackasm(SB),7,$0
        // TODO