runtime: expose the g variable
authorIan Lance Taylor <ian@gcc.gnu.org>
Mon, 15 Jul 2019 21:17:16 +0000 (21:17 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Mon, 15 Jul 2019 21:17:16 +0000 (21:17 +0000)
commit4e62f891cdeabc14cf6195a69dc6528aab11e753
tree3a7e81af0a3e72432c75f043950798b0387de393
parent2d94f7dea9c73ef3c116a0ddc722724578a860fe
runtime: expose the g variable

    Currently, getg is implemented in C, which loads the thread-local
    g variable. The g variable is declared static in C.

    This CL exposes the g variable, so it can be accessed from the Go
    side. This allows the Go compiler to inline getg calls to direct
    access of g.

    Currently, the actual inlining is only implemented in the gollvm
    compiler. The g variable is thread-local and the compiler backend
    may choose to cache the TLS address in a register or on stack. If
    a thread switch happens the cache may become invalid. I don't
    know how to disable the TLS address cache in gccgo, therefore
    the inlining of getg is not implemented. In the future gccgo may
    gain this if we know how to do it safely.

    Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/186238

From-SVN: r273499
gcc/go/gofrontend/MERGE
libgo/runtime/proc.c