runtime: mark gcWork methods nowritebarrierrec
runtime: mark gcWork methods nowritebarrierrec

Currently most of these are marked go:nowritebarrier as a hint, but
it's actually important that these not invoke write barriers
recursively. The danger is that some gcWork method would invoke the
write barrier while the gcWork is in an inconsistent state and that
the write barrier would in turn invoke some other gcWork method, which
would crash or permanently corrupt the gcWork. Simply marking the
write barrier itself as go:nowritebarrierrec isn't sufficient to
prevent this if the write barrier doesn't use the outer method.

Thankfully, this doesn't cause any build failures, so we were getting
this right. :)

For #22460.

Change-Id: I35a7292a584200eb35a49507cd3fe359ba2206f6
Reviewed-on: https://go-review.googlesource.com/72554
Run-TryBot: Austin Clements <7ea35d812706d9213868749011af1ed4fa2f6aa0@google.com>
TryBot-Result: Gobot Gobot <66cb808b70d30c07676d5e946fee83fd561249e5@golang.org>
Reviewed-by: Rick Hudson <838bd060584c511f21c75c69ea04b7b120d86af0@golang.org>

nawawi/go,nawawi/go,akutz/go,josharian/go,codestation/go,akutz/go,golang/go,CAFxX/go,Cofyc/go,golang/go,Cofyc/go,josharian/go,josharian/go,akutz/go,cloudflare/go,josharian/go,golang/go,nawawi/go,codestation/go,golang/go,cloudflare/go,cloudflare/go,CAFxX/go,CAFxX/go,CAFxX/go,nawawi/go,josharian/go,Cofyc/go,golang/go,CAFxX/go,codestation/go,golang/go,nawawi/go,codestation/go,akutz/go,codestation/go,Cofyc/go,akutz/go,Cofyc/go,josharian/go,CAFxX/go,nawawi/go,akutz/go,akutz/go,CAFxX/go,CAFxX/go,nawawi/go,josharian/go,cloudflare/go,cloudflare/go,golang/go,Cofyc/go,cloudflare/go,christopher-henderson/Go,josharian/go,cloudflare/go,Cofyc/go,codestation/go,akutz/go,codestation/go,nawawi/go,cloudflare/go,codestation/go,Cofyc/go,golang/go