runtime: fixes for -buildmode=c-archive
authorIan Lance Taylor <ian@gcc.gnu.org>
Wed, 30 Nov 2016 02:09:24 +0000 (02:09 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Wed, 30 Nov 2016 02:09:24 +0000 (02:09 +0000)
commitfbe9724cc368a76c8bb04c822a9877b9096758e6
treec1565b1daa9faf905ef5d66188008c4603dd4f77
parentf521b29334903c4e3c27d4ef67fbf602ac427df7
runtime: fixes for -buildmode=c-archive

    With -buildmode=c-archive, initsig is called before the memory
    allocator has been initialized.  The code was doing a memory
    allocation because of the call to funcPC(sigtramp).  When escape
    analysis is fully implemented, that call should not allocate.  For
    now, finesse the issue by calling a C function to get the C function
    pointer value of sigtramp.

    When returning from a call from C to a Go function, a deferred
    function is run to go back to syscall mode.  When the call occurs on a
    non-Go thread, that call sets g to nil, making it impossible to add
    the _defer struct back to the pool.  Just drop it and let the garbage
    collector clean it up.

    Reviewed-on: https://go-review.googlesource.com/33675

From-SVN: r242992
gcc/go/gofrontend/MERGE
libgo/go/runtime/panic.go
libgo/go/runtime/signal1_unix.go
libgo/go/runtime/stubs.go
libgo/runtime/go-signal.c