misc(ld.so): cleanup

Signed-off-by: Anhad Singh <andypython@protonmail.com>
This commit is contained in:
Anhad Singh
2026-07-15 22:06:59 +10:00
parent 6697881222
commit bf2455ea2e
4 changed files with 12 additions and 15 deletions
+6 -4
View File
@@ -372,7 +372,7 @@ pub struct DSO {
pub pie: bool, pub pie: bool,
/// Whether this DSO *and* its dependencies have been successfully loaded. /// Whether this DSO *and* its dependencies have been successfully loaded.
pub is_ready: AtomicBool, is_ready: AtomicBool,
/// Is this DSO for ld.so? /// Is this DSO for ld.so?
is_me: bool, is_me: bool,
@@ -476,7 +476,7 @@ impl DSO {
} }
#[inline] #[inline]
pub fn mark_ready(&self) { pub unsafe fn mark_ready(&self) {
self.is_ready.store(true, Ordering::SeqCst); self.is_ready.store(true, Ordering::SeqCst);
} }
@@ -537,7 +537,7 @@ impl DSO {
} }
} }
pub fn run_fini(&self) { pub unsafe fn run_fini(&self) {
for f in self.dynamic.fini_array.iter().rev() { for f in self.dynamic.fini_array.iter().rev() {
unsafe { f() } unsafe { f() }
} }
@@ -1266,7 +1266,9 @@ impl Drop for DSO {
if self.is_ready.load(Ordering::SeqCst) { if self.is_ready.load(Ordering::SeqCst) {
// `run_fini` should not be called if we are being prematurely // `run_fini` should not be called if we are being prematurely
// dropped (e.g. failed to satisfy dependencies). // dropped (e.g. failed to satisfy dependencies).
self.run_fini(); unsafe {
self.run_fini();
}
} }
} }
} }
+4 -1
View File
@@ -714,7 +714,10 @@ impl Linker {
} }
for obj in new_objects.into_iter() { for obj in new_objects.into_iter() {
obj.mark_ready(); // SAFETY: `obj` and its dependencies have been successfuly loaded.
unsafe {
obj.mark_ready();
}
self.run_init(&obj); self.run_init(&obj);
self.register_object(obj); self.register_object(obj);
} }
-6
View File
@@ -41,12 +41,6 @@ use super::{
tcb::Tcb, tcb::Tcb,
}; };
#[cfg(target_pointer_width = "32")]
pub const SIZEOF_EHDR: usize = 52;
#[cfg(target_pointer_width = "64")]
pub const SIZEOF_EHDR: usize = 64;
unsafe fn get_argv(mut ptr: *const usize) -> (Vec<String>, *const usize) { unsafe fn get_argv(mut ptr: *const usize) -> (Vec<String>, *const usize) {
//traverse the stack and collect argument vector //traverse the stack and collect argument vector
let mut argv = Vec::new(); let mut argv = Vec::new();
+2 -4
View File
@@ -90,8 +90,6 @@ static mut __relibc_init_environ: *mut *mut c_char = ptr::null_mut();
extern "C" fn init_array() { extern "C" fn init_array() {
// The thing is that we cannot guarantee if // The thing is that we cannot guarantee if
// init_array runs first or if relibc_start runs first // init_array runs first or if relibc_start runs first
// Still whoever gets to run first must initialize rust
// memory allocator before doing anything else.
unsafe { unsafe {
if INIT_COMPLETE { if INIT_COMPLETE {
@@ -99,14 +97,14 @@ extern "C" fn init_array() {
} }
} }
io_init();
unsafe { unsafe {
if platform::environ.is_null() { if platform::environ.is_null() {
platform::environ = __relibc_init_environ; platform::environ = __relibc_init_environ;
} }
} }
io_init();
unsafe { unsafe {
crate::pthread::init(); crate::pthread::init();
INIT_COMPLETE = true INIT_COMPLETE = true