Hacker News new | ask | show | jobs
by sortie 3028 days ago
Author here. POSIX requires errno to be thread local, but with few requirements. Commonly libc's #define errno (*__get_errno_location()). Why? It's because the thread local storage isn't online very early on. The libc literally has to open its own program executable and locate the the thread local storage and mmap a copy of it for each thread. Thread level storage comes online late in Linux, which bloats statically linked executables with code to parse their own executable.

In Sortix, I just have the kernel set up the TLS for statically linked executables and just declare errno as:

__thread int errno;

That means errno is online from the very first instruction in _start in statically linked executables, without the need to parse the program file in early libc. There's no error conditions between _start and main. This is the kind of implementation quality I want to have in Sortix and part of why I develop Sortix.

1 comments

Ah, that's very neat. Thanks for explaining.