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. For more options, visit https://groups.google.com/d/optout.