github.com/choleraehyq/pid@v0.0.18/p_m_go1.10.go (about)

     1  // Copyright 2022 Cholerae Hu.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //     http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    12  // implied. See the License for the specific language governing
    13  // permissions and limitations under the License. See the AUTHORS file
    14  // for names of contributors.
    15  
    16  //go:build gc && go1.10 && !go1.13
    17  // +build gc,go1.10,!go1.13
    18  
    19  package goid
    20  
    21  type mutex struct {
    22  	// Futex-based impl treats it as uint32 key,
    23  	// while sema-based impl as M* waitm.
    24  	// Used to be a union, but unions break precise GC.
    25  	key uintptr
    26  }
    27  
    28  type p struct {
    29  	lock mutex
    30  	id   int32 // Here is pid
    31  }
    32  
    33  type m struct {
    34  	g0      uintptr // goroutine with scheduling stack
    35  	morebuf gobuf   // gobuf arg to morestack
    36  	divmod  uint32  // div/mod denominator for arm - known to liblink
    37  
    38  	// Fields not known to debuggers.
    39  	procid     uint64       // for debuggers, but offset not hard-coded
    40  	gsignal    uintptr      // signal-handling g
    41  	goSigStack gsignalStack // Go-allocated signal handling stack
    42  	sigmask    sigset       // storage for saved signal mask
    43  	tls        [6]uintptr   // thread-local storage (for x86 extern register)
    44  	mstartfn   func()
    45  	curg       uintptr // current running goroutine
    46  	caughtsig  uintptr // goroutine running during fatal signal
    47  	p          *p      // attached p for executing go code (nil if not executing go code)
    48  }