runtime: don't use pointers in g_ucontext_t or stackcontext

The g_ucontext_t type holds registers saved for a goroutine.  We have
to scan it for pointers, but since registers don't necessarily hold
pointers we have to scan it conservatively.  That means that it should
not have a pointer type, since the GC will always scan pointers.
Instead it needs special treatment to be scanned conservatively.
The current GC doesn't care when a pointer type holds a non-pointer,
but the Go 1.8 GC does.

For the current GC this means we have to explicitly scan the
g_ucontext_t values in a G.

While we're at it change stackcontext to be uintptr too.  The entries
in stackcontext never hold pointers that the Go GC cares about.

Change-Id: I10c9dab28ce8b992be1a61c9be681af1c35c256e
Reviewed-on: https://go-review.googlesource.com/41270
Reviewed-by: Than McIntosh <thanm@google.com>
4 files changed