]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: set m.procid always on Linux
authorRuss Cox <rsc@golang.org>
Mon, 22 Jun 2015 16:32:05 +0000 (12:32 -0400)
committerRuss Cox <rsc@golang.org>
Wed, 24 Jun 2015 21:50:39 +0000 (21:50 +0000)
For debuggers and other program inspectors.

Fixes #9914.

Change-Id: I670728cea28c045e6eaba1808c550ee2f34d16ff
Reviewed-on: https://go-review.googlesource.com/11341
Reviewed-by: Austin Clements <austin@google.com>
src/runtime/os1_linux.go
src/runtime/sys_linux_386.s
src/runtime/sys_linux_amd64.s
src/runtime/sys_linux_arm.s
src/runtime/sys_linux_arm64.s
src/runtime/sys_linux_ppc64x.s

index 8aa0804860cbdec68bded348ee6470849cd0136f..e6942a9f79b69c730f7414f00c00ea51b7725899 100644 (file)
@@ -197,6 +197,8 @@ func msigsave(mp *m) {
        rtsigprocmask(_SIG_SETMASK, nil, smask, int32(unsafe.Sizeof(*smask)))
 }
 
+func gettid() uint32
+
 // Called to initialize a new m (including the bootstrap m).
 // Called on the new thread, can not allocate memory.
 func minit() {
@@ -204,6 +206,9 @@ func minit() {
        _g_ := getg()
        signalstack(&_g_.m.gsignal.stack)
 
+       // for debuggers, in case cgo created the thread
+       _g_.m.procid = uint64(gettid())
+
        // restore signal mask from m.sigmask and unblock essential signals
        nmask := *(*sigset)(unsafe.Pointer(&_g_.m.sigmask))
        for i := range sigtable {
index f5cfb644c96d62c680a36c6f0c289eff124c1fa2..98a1a0ef6dc9db83efe30068adc9c343c46ef911 100644 (file)
@@ -96,6 +96,12 @@ TEXT runtime·usleep(SB),NOSPLIT,$8
        CALL    *runtime·_vdso(SB)
        RET
 
+TEXT runtime·gettid(SB),NOSPLIT,$0-4
+       MOVL    $224, AX        // syscall - gettid
+       CALL    *runtime·_vdso(SB)
+       MOVL    AX, ret+0(FP)
+       RET
+
 TEXT runtime·raise(SB),NOSPLIT,$12
        MOVL    $224, AX        // syscall - gettid
        CALL    *runtime·_vdso(SB)
index f36ac8493b06fad00e6c960de60f17c97b95e9bc..8644a0b5fd2d43da1baa1b851fd271808b4aba26 100644 (file)
@@ -94,6 +94,12 @@ TEXT runtime·usleep(SB),NOSPLIT,$16
        SYSCALL
        RET
 
+TEXT runtime·gettid(SB),NOSPLIT,$0-4
+       MOVL    $186, AX        // syscall - gettid
+       SYSCALL
+       MOVL    AX, ret+0(FP)
+       RET
+
 TEXT runtime·raise(SB),NOSPLIT,$0
        MOVL    $186, AX        // syscall - gettid
        SYSCALL
index b68b81af3e1f6f0a3605fc7434ce6046b84e63ac..abdeb93e59a28e7c25a9342f727141bcdcbbd650 100644 (file)
@@ -121,6 +121,12 @@ TEXT runtime·exit1(SB),NOSPLIT,$-4
        MOVW    $1003, R1
        MOVW    R0, (R1)        // fail hard
 
+TEXT runtime·gettid(SB),NOSPLIT,$0-4
+       MOVW    $SYS_gettid, R7
+       SWI     $0
+       MOVW    R0, ret+0(FP)
+       RET
+
 TEXT   runtime·raise(SB),NOSPLIT,$-4
        MOVW    $SYS_gettid, R7
        SWI     $0
index 0aca3a2010742404797d47313ec59ce098555bb2..6e5cdcdf3332687916365782cd85ab8d8e4f93bf 100644 (file)
@@ -136,6 +136,12 @@ TEXT runtime·usleep(SB),NOSPLIT,$16-4
        SVC
        RET
 
+TEXT runtime·gettid(SB),NOSPLIT,$0-4
+       MOVD    $SYS_gettid, R8
+       SVC
+       MOVW    R0, ret+0(FP)
+       RET
+
 TEXT runtime·raise(SB),NOSPLIT,$-8
        MOVD    $SYS_gettid, R8
        SVC
index 8cf154996483932275173d1a22d81edda725b204..01575f80424bca0337d4aa871280967303b8a666 100644 (file)
@@ -121,6 +121,11 @@ TEXT runtime·usleep(SB),NOSPLIT,$16-4
        SYSCALL $SYS_newselect
        RET
 
+TEXT runtime·gettid(SB),NOSPLIT,$0-4
+       SYSCALL $SYS_gettid
+       MOVW    R3, ret+0(FP)
+       RET
+
 TEXT runtime·raise(SB),NOSPLIT,$-8
        SYSCALL $SYS_gettid
        MOVW    R3, R3  // arg 1 tid