3 ms·
(Author here) Thanks for explaining this more succinctly than I can :) Just one nitpick: > decent amount of stuff that has to be done in main before you run _
by neeeeees 4y ago
(Author here) Thanks for explaining this more succinctly than I can :)
Just one nitpick:
> decent amount of stuff that has to be done in main before you run _start
should read
> decent amount of stuff that has to be done in _start before you run main
Analogously, cleanup code like running global destructors usually happens in _start/CRT after main returns, but I skipped that in the post for the sake of brevity.
- oso2k 4y agoI’d also argue > decent amount of stuff that CAN be done in _start before you run main It’s all optional. Before I found the Linux kernel’s nolibc [0], I wrote a minimal C runtime based on bunch of stuff I read [1]. Only thing you really need to do is align the stack (at least on x86, amd64). You don’t get argc/argv/envp but main will still work. [0] https://github.com/torvalds/linux/tree/master/tools/include/nolibc https://github.com/torvalds/linux/tree/master/tools/include/... [1] https://github.com/lpsantil/rt0/blob/master/src/lib/00_start.c https://github.com/lpsantil/rt0/blob/master/src/lib/00_start...
- saagarjha 4y agoGenerally this is either libc setup stuff, or things to support static initialization.