To continue describing the other GNU LibC cross-platform libraries...

* `csu` provides code for allocating (via `sbrk`) some memory for thread-local storage (taking extra care regarding alignment & initial values) if not allocated already.
* More broadly, `csu` implements a __start routine which initializes GNU LibC, the memory layout (partially CPU-specific) & any C++/ELF initializers/finalizers before calling main() (taking care regarding threading) & exit()ing. Some details in ELF lib.



* `ctype` classifies & converts "character types" via lookup tables (provided said input's in-range), some of which are optionally locale-specific.

* `debug` adds ELF initializers/finalizers to open a file specified by `PCPROFILE_OUTPUT` (prepending byteorder & pointer sizes), to which it'll write a reformatted callstack (sourced from another lib) upon segfault, etc signals. A seperate program reformats that binary data into human readable text, or you could use GDB.


* `dl` (dynamic libraries) appears to dispatch calls elsewhere once arguments are validated & synchronized. Which is a little tricky to do before having implemented dynamic libraries! I'll defer describing the libraries it dispatches to.

* `gshadow` & `nss` libraries serializes & (preprocess-aided) deserializes user account, etc info from coordinated binary-searched in-memory storage, /etc files, & dynamically-loaded libraries. `nss` provides some commands to create & query these files.


* `iconv` dispatches to statically & dynamically loaded modules to convert between character encodings (source encoding taken from locale where unspecified), with caching & a commandline program operating on files one chunk at a time. I'll defer describing these modules.

* `intl` exposes more of the `gettext internationalization library, managing globals, determining which plural form to use via interpreting exprs, binary searching aliases, better determines which locale to use, etc.

4/4 Fin

Sign in to participate in the conversation

For people who care about, support, or build Free, Libre, and Open Source Software (FLOSS).