It is slightly more advanced that that - since there are multiple OS threads that the Go routines are multiplexed onto.
The easiest solution is to look at the ‘trace’ code as it records the context switches. > On Feb 9, 2019, at 3:34 PM, milis...@gmail.com wrote: > > I am looking at fine-grained calling context collection for go lang programs > (for all go routines) using binary instrumentation tools such as Intel Pin. > In a traditional language such as C/C++ intercepting CALL/RET instructions > (plus some special handling for exceptions setjmp/longjmp) suffices. > Go makes it significantly more complicated. > > For Go, the scheduler can context switch from one goroutine to another > (including garbage collection etc.). > The scheduler adjusts the stack pointer and program counter during these > events, which (for x86) is mostly in this file: > https://github.com/golang/go/blob/master/src/runtime/asm_amd64.s > Is there a go runtime expert, who can authoritatively confirm whether all the > go routine context switching code is captured in this file or if there are > other places too? > > It would also be great if somebody can confirm whether saving the current go > routine state into gobuf_sp, gobuf_pc, gobuf_g, gobuf_ctxt, gobuf_ret and > restoring a new one and jumping to the new gobuf_pc is the standard context > switching idiom? Is there use of any other idiom such as overwriting the > return address of a caller on the thread stack to jump to a different context > during a return from a procedure? > > Thanks in advance for answering these details. > -Milind > > -- > You received this message because you are subscribed to the Google Groups > "golang-nuts" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to golang-nuts+unsubscr...@googlegroups.com > <mailto:golang-nuts+unsubscr...@googlegroups.com>. > For more options, visit https://groups.google.com/d/optout > <https://groups.google.com/d/optout>. -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.