vmbase: Support LLVM and Bionic stack guard

C code compiled with the Android toolchain has stack guard checks
enabled. So as to avoid having to recompile every target with
-fno-stack-guard, instead add the expected symbols to vmbase.

This means we need __stack_chk_guard variable containing the canary
(used by all libc implementations [1]) and a thread-local storage containing
another copy of the canary at offset 40 (Bionic only [2]).

If the instrumentation detects an error, it calls __stack_chk_fail.
Provide an implementation that simply panics.

[1] bionic/tests/stack_protector_test.cpp
[2] https://reviews.llvm.org/D18632

Bug: 237372981
Test: atest vmbase_example.integration_test
Change-Id: I00de7c75aef6a57a73667df6983a12b01fbe9e51
diff --git a/vmbase/src/lib.rs b/vmbase/src/lib.rs
index 257f415..9c9417a 100644
--- a/vmbase/src/lib.rs
+++ b/vmbase/src/lib.rs
@@ -30,3 +30,8 @@
     eprintln!("{}", info);
     reboot()
 }
+
+#[no_mangle]
+extern "C" fn __stack_chk_fail() -> ! {
+    panic!("stack guard check failed");
+}