A minimal C runtime for Linux on i386 & x86_64
- Implemented in just 202 SLOC of C code.
- Just 9 lines of GCC inline ASM for i386, or,
- Just 6 lines GCC inline ASM for x86_64
- Small runtime providing just
argc,argv,envp,__environ,errno,_exit,_end,_edata,_etext,__executable_startandsyscall0/1/2/3/4/5/6 - An example implementation of
sys_brk,brk, andsbrk - Can be used with gold (Google LD, part of GNU Binutils)
- Hello World in just 608 bytes (i386) or 792 bytes (x86_64)
- Small binary sizes vs. other libc's
- Tested with RHEL 7, Ubuntu 14.04, i386/i686, x86_64
See STATS.md to see how rt0 fares. See the musl libc comparison to see how other libc's fare.
You might be interested in Linux native/built-in and fairly portable nolibc header.
Try:
makemake librt0.amake testmake runtestmake DESTDIR=/usr/local install, or simply,make install- You can also do
make uninstall - It is highly recommended that you build using
WITH_FAST_SYSCALL=1, e.g.,make WITH_FAST_SYSCALL=1
- Include
rt0/rt0.hfor__environ,_exit - Include
rt0/syscall.hforSYS_*,syscall0/1/2/3/4/5/6 - Define
mainasint main( int, char**, char** ) - Compile your code with at least
-nostdlib, e.g.,cc -c prog.c -nostdlib -o prog.o - On Linux, link with librt0, e.g.,
cc prog.o -nostdlib -lrt0 -o prog - On FreeBSD, link with librt0 using,
cc prog.o -Wl,-u_start -nostdlib -lrt0 -o prog - To enable Google ld, type
make LD=gold - To enable GNU ld, type
make LD=ld(default) - To enable a slightly faster version of the syscalls, type
make WITH_FAST_SYSCALL=1 - To enable
-fdata-sections -ffunction-sections, typemake WITH_SECTIONS=1 - To enable a debug build, type
make WITH_DEBUG=1
- Hello from a libc free world!
- musl libc
- Minimum C prgram
- SmallerC
- GCC Inline Assembly HOWTO
- System V ABI/Calling Convention
- Linux syscall interface
- gold - Google ld
- brk(2) man page
- malloc implementation@Stack Overflow
- A Quick Tutorial on Implementing and Debugging Malloc, Free, Calloc, and Realloc
- Tips of malloc & free
- Writing C software without the standard library - Linux Edition