Toolchain: Introduce stubs for core system libraries

This allows the linker to link against these dynamic libraries when
compiling libc++/libunwind, without having to do a separate
bootstrapping LibC build.

Without this change, libc++ would fail to pick up the need to link to
`LibPthread` if no prior builds of it existed. Because of this, we'd
immediately have an assertion failure in SystemServer, as mutexes are
used for the safe construction of function-local static variables.
This commit is contained in:
Daniel Bertalan 2021-10-06 22:47:39 +02:00 committed by Linus Groh
parent 95c32fdf19
commit c524f58290
9 changed files with 21 additions and 0 deletions

21
Toolchain/Stubs/README.md Normal file
View file

@ -0,0 +1,21 @@
# Library stubs
This directory contains stubs for SerenityOS libraries (LibC, LibM, LibDl, LibPthread)
that are referenced from the LLVM runtime libraries. These are needed by the linker
in order to add the required `DT_NEEDED` entries.
## Do these need to be updated?
Generally, no. LLVM does not use the header files to decide which functionality it can
use. After adding a new function to a header, you don't have to worry about LLVM
toolchain builds failing because the symbol is not present in the stubs.
## How to generate these?
First, you need to have a working SerenityOS installation that's been built by the
Clang toolchain. Then, using the `llvm-ifs` tool, these libraries need to be converted
into a stripped-down stub form. To do that, run the following command:
```sh
Toolchain/Local/clang/bin/llvm-ifs --output-format=ELF --output=<path-to-stub> <path-to-original>
```

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.