A minimal C runtime for Linux i386 & x86_64
C Makefile
Switch branches/tags
Nothing to show
Clone or download
Latest commit 5580740 Mar 9, 2018
Permalink
Failed to load latest commit information.
include/rt0
lib
src/lib
t
.gitignore Updates to gitignore, Makefile, README, STATS. Cleaned up `t/` for `-… Oct 9, 2015
AUTHORS
LICENSE
Makefile
README.md
STATS.md
TODO.md

README.md

rt0

A minimal C runtime for Linux on i386 & x86_64

Features

  • 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_start and syscall0/1/2/3/4/5/6
  • An example implementation of sys_brk, brk, and sbrk
  • 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.

Building

Try:

  • make
  • make librt0.a
  • make test
  • make runtest
  • make 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

Usage

  • Include rt0/rt0.h for __environ, _exit
  • Include rt0/syscall.h for SYS_*, syscall0/1/2/3/4/5/6
  • Define main as int 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, type make WITH_SECTIONS=1
  • To enable a debug build, type make WITH_DEBUG=1

References

Other small libc's and runtimes