Я просто изучаю, как TLS (потоковое локальное хранилище) реализовано в системах Linux. В документе ELF Handling for Thread-Local Storage объясняется, как требования программы к локальным переменным потока могут быть закодированы в двоичном формате ELF и как «среда выполнения» должна обрабатывать такие двоичные файлы.В Linux, TLS настроен ядром или libc (или другим языком исполнения)?
Однако мне не ясно, будет ли на практике «среда выполнения», которая устанавливает область (области) TLS, будет ядром Linux (и его кодом для загрузки двоичных файлов ELF) или некоторым кодом инициализации в libc. Может кто-нибудь объяснить кратко?
(Фон: Я пытаюсь статически связать и запустить приложение, но он segfaults при запуске. В gdb я вижу, что код segfaulting - это некоторый код init из libc. Он пытается прочитать статическую переменную используя адрес, относящийся к GS, но GS равен нулю.)
glibc и musl - с открытым исходным кодом; вы можете проверить исходный код для них. –
Обсуждаете ли вы TLS (потоковое локальное хранилище) или TLS (безопасность транспортного уровня)? Содержимое предлагает локальное хранилище; tag [tag: ssl] предлагает последний. Вы были синонимичны? Я удалил [tag: ssl] и добавил [tag: thread-local-storage], хотя [tag: tls], по-видимому, не был сопоставлен с [tag: ssl]. –
@JonathanLeffler, я добавил tls, что означает поток-локальное хранилище. Спасибо за исправление ошибки. –