diff --git a/kernel/src/process/structs.rs b/kernel/src/process/structs.rs index bdb72d7..2ec8dcf 100644 --- a/kernel/src/process/structs.rs +++ b/kernel/src/process/structs.rs @@ -20,6 +20,7 @@ use crate::memory::{ use crate::sync::{Condvar, SpinNoIrqLock as Mutex}; use super::abi::{self, ProcInitInfo}; +use core::mem::uninitialized; use rcore_fs::vfs::INode; // TODO: avoid pub @@ -138,9 +139,11 @@ impl Thread { mut args: Vec, envs: Vec, ) -> Result<(MemorySet, usize, usize), &'static str> { - // Read data - let data = inode - .read_as_vec() + // Read ELF header + // 0x3c0: magic number from ld-musl.so + let mut data: [u8; 0x3c0] = unsafe { uninitialized() }; + inode + .read_at(0, &mut data) .map_err(|_| "failed to read from INode")?; // Parse ELF