libucontext/README.md

43 lines
1.9 KiB
Markdown

# `libucontext`
`libucontext` is a library which provides the `ucontext.h` C API. Unlike other implementations,
it faithfully follows the kernel process ABI when doing context swaps.
Notably, when combined with `gcompat`, it provides a fully compatible implementation of the ucontext
functions that are ABI compatible with glibc.
Since version 0.13, for some architectures, you can deploy to bare metal using newlib via the
`FREESTANDING=yes` make option. Systems which use a syscall cannot work this way. The table
below shows which architecture ports have been adapted to build with `FREESTANDING=yes`.
## supported architectures
Adding support for new architectures is easy, but you need to know assembly language to do it.
| Architecture | Works on musl | Syscall | Supports FREESTANDING |
|--------------|---------------|---------|-----------------------|
| aarch64 | ✓ | | |
| arm | ✓ | | |
| m68k | ✓ | | ✓ |
| mips | ✓ | | |
| mips64 | ✓ | | |
| ppc | ✓ | ✓ | |
| ppc64 | ✓ | ✓ | |
| riscv64 | ✓ | | |
| s390x | ✓ | | |
| x86 | ✓ | | ✓ |
| x86_64 | ✓ | | ✓ |
## building
`libucontext` uses a simple makefile build system. You should define `ARCH=` at build time, otherwise
the build system will attempt to guess using `uname -m`.
```
$ make ARCH=x86_64
$ make ARCH=x86_64 check
$ make ARCH=x86_64 DESTDIR=out install
```