This commit is contained in:
Jeremy Soller
2020-06-02 08:35:41 -06:00
3 changed files with 18 additions and 6 deletions
+4 -1
View File
@@ -29,6 +29,7 @@ use super::{
debug::{RTLDDebug, RTLDState, _dl_debug_state, _r_debug},
tcb::{Master, Tcb},
PAGE_SIZE,
access,
};
#[cfg(target_os = "redox")]
@@ -169,7 +170,9 @@ impl Linker {
})?;
// TODO: Use R_OK | X_OK
unistd::access(path_c.as_ptr(), unistd::F_OK) == 0
// We cannot use unix stdlib because errno is thead local variable
// and fs:[0] is not set yet.
access(path_c.as_ptr(), unistd::F_OK) == 0
};
if access {
+11 -2
View File
@@ -1,8 +1,11 @@
use goblin::elf::program_header::{self, program_header32, program_header64, ProgramHeader};
use self::tcb::{Master, Tcb};
use crate::start::Stack;
use crate::{
start::Stack,
c_str::CStr,
platform::types::*
};
pub const PAGE_SIZE: usize = 4096;
pub mod debug;
@@ -80,6 +83,12 @@ pub fn static_init(sp: &'static Stack) {
}
}
// Wrapper over the systemcall, Do not use outside of ld_so
pub unsafe fn access(path: *const c_char, mode: c_int) -> c_int {
let path = CStr::from_ptr(path);
syscall!(ACCESS, (path).as_ptr(), mode) as c_int
}
#[cfg(target_os = "linux")]
pub unsafe fn init(sp: &'static Stack) {
let mut tp = 0usize;
+3 -3
View File
@@ -138,8 +138,8 @@ pub extern "C" fn relibc_ld_so_start(sp: &'static mut Stack, ld_entry: usize) ->
// Some variables that will be overridden by environment and auxiliary vectors
let library_path = match envs.get("LD_LIBRARY_PATH") {
Some(lib_path) => lib_path,
None => "/lib",
Some(lib_path) => lib_path.to_owned() + ":/lib",
None => "/lib".to_owned(),
};
let path = if is_manual {
@@ -178,7 +178,7 @@ pub extern "C" fn relibc_ld_so_start(sp: &'static mut Stack, ld_entry: usize) ->
}
pr
};
let mut linker = Linker::new(library_path, false);
let mut linker = Linker::new(&library_path, false);
match linker.load(&path, &path) {
Ok(()) => (),
Err(err) => {