Merge branch 'master' of https://gitlab.redox-os.org/redox-os/relibc
This commit is contained in:
+4
-1
@@ -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
@@ -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
@@ -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) => {
|
||||
|
||||
Reference in New Issue
Block a user