From 791460d5d1aa2bebf37a65754a6dc5751c0ea1ab Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Sat, 20 Aug 2022 19:48:47 -0600 Subject: [PATCH] Use 32-bit elf headers on 32-bit redox --- src/platform/redox/redox-exec/src/lib.rs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/platform/redox/redox-exec/src/lib.rs b/src/platform/redox/redox-exec/src/lib.rs index 7d90ddcd0b..3fd4d4deea 100644 --- a/src/platform/redox/redox-exec/src/lib.rs +++ b/src/platform/redox/redox-exec/src/lib.rs @@ -12,6 +12,13 @@ use alloc::{ vec, }; +//TODO: allow use of either 32-bit or 64-bit programs +#[cfg(target_pointer_width = "32")] +use goblin::elf32::{header::Header, program_header::program_header64::{ProgramHeader, PT_LOAD, PT_INTERP, PF_W, PF_X}}; +#[cfg(target_pointer_width = "64")] +use goblin::elf64::{header::Header, program_header::program_header64::{ProgramHeader, PT_LOAD, PT_INTERP, PF_W, PF_X}}; + + use syscall::{ PAGE_SIZE, error::*, @@ -45,8 +52,6 @@ where A::Item: AsRef<[u8]>, E::Item: AsRef<[u8]>, { - use goblin::elf64::{header::Header, program_header::program_header64::{ProgramHeader, PT_LOAD, PT_INTERP, PF_W, PF_X}}; - // Here, we do the minimum part of loading an application, which is what the kernel used to do. // We load the executable into memory (albeit at different offsets in this executable), fix // some misalignments, and then execute the SYS_EXEC syscall to replace the program memory @@ -83,7 +88,7 @@ where const BUFSZ: usize = 1024 * 256; let mut buf = vec! [0_u8; BUFSZ]; - read_all(*image_file as usize, Some(header.e_phoff), phs).map_err(|_| Error::new(EIO))?; + read_all(*image_file as usize, Some(header.e_phoff as u64), phs).map_err(|_| Error::new(EIO))?; for ph_idx in 0..phnum { let ph_bytes = &phs[ph_idx * phentsize..(ph_idx + 1) * phentsize];