43 lines
1.9 KiB
Markdown
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
|
|
```
|