Process Startup - Static Program Linker adds csu objects to program: crt0.o, crtbegin.o, crtend.o Kernel sets up stack with environment vars and command line arguments Kernel transfers control to entry point __start in crt0.o crt0.o is created from per arch source in /usr/src/lib/csu and translates the startup into c calling conventions using assembly csu calls main() function $ cc -v -static hello.o -o hello Reading specs from /usr/lib/gcc-lib/i386-unknown-openbsd4.4/3.3.5/specs Configured with: Thread model: single gcc version 3.3.5 (propolice) /usr/lib/gcc-lib/i386-unknown-openbsd4.4/3.3.5/collect2 -e __start -Bstatic -dynamic-linker /usr/libexec/ld.so -o hello /usr/lib/crt0.o /usr/lib/crtbegin.o -L/usr/lib/gcc-lib/i386-unknown-openbsd4.4/3.3.5 hello.o -lgcc -lc -lgcc /usr/lib/crtend.o