From 7cf854e5313327ed9a21d3de3617f556ea6648c7 Mon Sep 17 00:00:00 2001 From: John Hodge <tpg@mutabah.net> Date: Sun, 11 Aug 2019 17:18:01 +0800 Subject: [PATCH] Usermode loader - Fix link error with over-sized value --- Usermode/loader/bin/src/interface.rs | 5 ++--- Usermode/loader/bin/start.S | 5 +++++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/Usermode/loader/bin/src/interface.rs b/Usermode/loader/bin/src/interface.rs index 65b3def4..ef483be5 100644 --- a/Usermode/loader/bin/src/interface.rs +++ b/Usermode/loader/bin/src/interface.rs @@ -26,8 +26,7 @@ impl_from! { pub extern "C" fn new_process(executable_handle: ::syscalls::vfs::File, process_name: &[u8], args: &[&[u8]]) -> Result<::syscalls::threads::ProtoProcess,loader::Error> { extern "C" { - static BASE: [u8; 0]; - static LIMIT: [u8; 0]; + static limit_and_base: (u64, u64); } kernel_log!("new_process({:?}, ...)", ::std::ffi::OsStr::new(process_name)); @@ -62,7 +61,7 @@ pub extern "C" fn new_process(executable_handle: ::syscalls::vfs::File, process_ // Spawn new process // SAFE: Just takes the address of the externs statics - match ::syscalls::threads::start_process(name, unsafe { BASE.as_ptr() as usize }, unsafe { LIMIT.as_ptr() as usize }) + match ::syscalls::threads::start_process(name, unsafe { limit_and_base.0 as usize }, unsafe { limit_and_base.1 as usize }) { Ok(v) => v, Err(e) => panic!("TODO: new_process - Error '{:?}'", e), diff --git a/Usermode/loader/bin/start.S b/Usermode/loader/bin/start.S index 2bc014bd..ac97ea2b 100644 --- a/Usermode/loader/bin/start.S +++ b/Usermode/loader/bin/start.S @@ -199,6 +199,11 @@ GLOBAL(image_header) .long init_path_end - init_path DEFPTR start +.section .data +GLOBAL(limit_and_base) + .quad BASE + .quad LIMIT + .section .bss .space 0x1000 /* Guard page */ GLOBAL(init_stack_base) -- GitLab