|
@@ -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 :|
|