t/linux: use toolchain and platforms

This allows us to do builds for different platforms consistent with how
Bazel does them. Also uses our own LLVM toolchain instead of the
"ambient" GCC. As bzImages only exist for x86, rename everything to
Image which is the cross-platform name. For us this is fine as we use
the PE entry point which exists for all of these.

Binary path generation is a hack as not all of the ones Linux needs are
actually available in the rules-based toolchain and we need a special
calling convention to work around a bug in LLVM when compiling assembly
with preprocessor macros.

Change-Id: I8ed8fa7c1514b9ffbfaedf235e32250e4af40aa4
Reviewed-on: https://review.monogon.dev/c/monogon/+/4215
Tested-by: Jenkins CI
Reviewed-by: Tim Windelschmidt <tim@monogon.tech>
diff --git a/cloud/agent/takeover/takeover.go b/cloud/agent/takeover/takeover.go
index 9af4872..a75eb5e 100644
--- a/cloud/agent/takeover/takeover.go
+++ b/cloud/agent/takeover/takeover.go
@@ -41,7 +41,7 @@
 	netapi "source.monogon.dev/osbase/net/proto"
 )
 
-//go:embed third_party/linux/bzImage
+//go:embed third_party/linux/Image
 var kernel []byte
 
 //go:embed third_party/ucode.cpio