runtime: fixes for -buildmode=c-archive
commitbc816275bf9f410e0f53961d0c2053db0cc7e6f3
authorian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 30 Nov 2016 02:09:24 +0000 (30 02:09 +0000)
committerian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 30 Nov 2016 02:09:24 +0000 (30 02:09 +0000)
treec1565b1daa9faf905ef5d66188008c4603dd4f77
parent46d07ee0aa699dc6c3bf87c3e529359e838e80f2
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

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@242992 138bc75d-0d04-0410-961f-82ee72b054a4
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