vmbase: Export linker-defined MemoryRegions & VAs
Group all linker-defined variables in a private module.
Export the memory regions defined by the linker as safe Range<usize>.
Export __stack_chk_guard as a safe static &u64.
Bug: 238050226
Test: atest vmbase_example.integration_test
Change-Id: I401ac4af949e283f78fbc576db19339e38ed3942
diff --git a/vmbase/src/linker.rs b/vmbase/src/linker.rs
new file mode 100644
index 0000000..f4baae8
--- /dev/null
+++ b/vmbase/src/linker.rs
@@ -0,0 +1,48 @@
+// Copyright 2022, The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+//! Linker-defined symbols.
+
+extern "C" {
+ /// Stack canary value
+ pub static __stack_chk_guard: u64;
+ /// First byte beyond the pre-loaded binary.
+ pub static bin_end: u8;
+ /// First byte of the `.stack` section.
+ pub static boot_stack_begin: u8;
+ /// First byte beyond the `.stack` section.
+ pub static boot_stack_end: u8;
+ /// First byte of the `.bss` section.
+ pub static bss_begin: u8;
+ /// First byte beyond the `.bss` section.
+ pub static bss_end: u8;
+ /// First byte of the (loaded) `.data` section.
+ pub static data_begin: u8;
+ /// First byte beyond the (loaded) `.data` section.
+ pub static data_end: u8;
+ /// First byte of the pre-loaded `.data` section.
+ pub static data_lma: u8;
+ /// First byte of the `.dtb` section.
+ pub static dtb_begin: u8;
+ /// First byte beyond the `.dtb` section.
+ pub static dtb_end: u8;
+ /// First byte of the `.rodata` section.
+ pub static rodata_begin: u8;
+ /// First byte beyond the `.rodata` section.
+ pub static rodata_end: u8;
+ /// First byte of the `.text` section.
+ pub static text_begin: u8;
+ /// First byte beyond the `.text` section.
+ pub static text_end: u8;
+}