Run pre-init array before _init

This commit is contained in:
Jeremy Soller
2018-12-11 21:01:10 -07:00
parent e764fedba5
commit ae115ac6ff
+16 -10
View File
@@ -77,19 +77,25 @@ pub unsafe extern "C" fn relibc_start(sp: &'static Stack) -> ! {
stdio::stdout = stdio::default_stdout.get();
stdio::stderr = stdio::default_stderr.get();
// Run preinit array
{
let mut f = &__preinit_array_start as *const _;
while f < &__preinit_array_end {
(*f)();
f = f.offset(1);
}
}
// Call init section
_init();
// Look for the neighbor functions in memory until the end
let mut f = &__preinit_array_start as *const _;
while f < &__preinit_array_end {
(*f)();
f = f.offset(1);
}
f = &__init_array_start as *const _;
while f < &__init_array_end {
(*f)();
f = f.offset(1);
// Run init array
{
let mut f = &__init_array_start as *const _;
while f < &__init_array_end {
(*f)();
f = f.offset(1);
}
}
// not argv or envp, because programs like bash try to modify this *const* pointer :|