vmbase: Move stack to end of writable_data
Instead of imposing an arbitrary size for the stack, allows clients to
query a validated address range of a given size with boot_stack_range(),
which places the stack at the largest address possible, extending
downwards (common on AArch64).
Keep allocating 40 pages of stack in vmbase_example, rialto, and pvmfw.
Bug: 279209532
Bug: 270684188
Test: atest vmbase_example.integration_test
Test: atest rialto_test
Test: atest MicrodroidTests
Change-Id: If205ccd4fa408e32e5533b880a85f4cccbd3f005
diff --git a/vmbase/src/layout.rs b/vmbase/src/layout.rs
index 0d824bb..d07dac4 100644
--- a/vmbase/src/layout.rs
+++ b/vmbase/src/layout.rs
@@ -62,8 +62,12 @@
}
/// Writable data region for the stack.
-pub fn boot_stack_range() -> Range<usize> {
- linker_region!(boot_stack_begin, boot_stack_end)
+pub fn stack_range(stack_size: usize) -> Range<usize> {
+ let end = linker_addr!(init_stack_pointer);
+ let start = end.checked_sub(stack_size).unwrap();
+ assert!(start >= linker_addr!(stack_limit));
+
+ start..end
}
/// All writable sections, excluding the stack.