]> Cypherpunks.ru repositories - gostls13.git/blobdiff - src/runtime/asm_riscv64.s
Revert "runtime/cgo: store M for C-created thread in pthread key"
[gostls13.git] / src / runtime / asm_riscv64.s
index 0a34a591fd4fc71c94da4d37df55bbc7cf6d6369..759bae24b5937d1d64c5cfab519a96cb2f8fbe59 100644 (file)
@@ -519,23 +519,13 @@ TEXT runtime·goexit(SB),NOSPLIT|NOFRAME|TOPFRAME,$0-0
 TEXT ·cgocallback(SB),NOSPLIT,$24-24
        NO_LOCAL_POINTERS
 
-       // Skip cgocallbackg, just dropm when fn is nil, and frame is the saved g.
-       // It is used to dropm while thread is exiting.
-       MOV     fn+0(FP), X7
-       BNE     ZERO, X7, loadg
-       // Restore the g from frame.
-       MOV     frame+8(FP), g
-       JMP     dropm
-
-loadg:
        // Load m and g from thread-local storage.
        MOVBU   runtime·iscgo(SB), X5
        BEQ     ZERO, X5, nocgo
        CALL    runtime·load_g(SB)
 nocgo:
 
-       // If g is nil, Go did not create the current thread,
-       // or if this thread never called into Go on pthread platforms.
+       // If g is nil, Go did not create the current thread.
        // Call needm to obtain one for temporary use.
        // In this case, we're running on the thread stack, so there's
        // lots of space, but the linker doesn't know. Hide the call from
@@ -548,7 +538,7 @@ nocgo:
 
 needm:
        MOV     g, savedm-8(SP) // g is zero, so is m.
-       MOV     $runtime·needAndBindM(SB), X6
+       MOV     $runtime·needm(SB), X6
        JALR    RA, X6
 
        // Set m->sched.sp = SP, so that if a panic happens
@@ -619,24 +609,10 @@ havem:
        MOV     savedsp-24(SP), X6      // must match frame size
        MOV     X6, (g_sched+gobuf_sp)(g)
 
-       // If the m on entry was nil, we called needm above to borrow an m,
-       // 1. for the duration of the call on non-pthread platforms,
-       // 2. or the duration of the C thread alive on pthread platforms.
-       // If the m on entry wasn't nil,
-       // 1. the thread might be a Go thread,
-       // 2. or it's wasn't the first call from a C thread on pthread platforms,
-       //    since the we skip dropm to resue the m in the first call.
+       // If the m on entry was nil, we called needm above to borrow an m
+       // for the duration of the call. Since the call is over, return it with dropm.
        MOV     savedm-8(SP), X5
        BNE     ZERO, X5, droppedm
-
-       // Skip dropm to reuse it in the next call, when a pthread key has been created.
-       MOV     _cgo_pthread_key_created(SB), X5
-       // It means cgo is disabled when _cgo_pthread_key_created is a nil pointer, need dropm.
-       BEQ     ZERO, X5, dropm
-       MOV     (X5), X5
-       BNE     ZERO, X5, droppedm
-
-dropm:
        MOV     $runtime·dropm(SB), X6
        JALR    RA, X6
 droppedm: