Документ Ульриха Дреппера о локальном хранилище потоков описывает TLS ABI для нескольких различных архитектур ЦП, но Я считаю его недостаточным в качестве основы для реализации TLS по двум причинам:
- В нем отсутствует ряд важных арок, таких как ARM, MIPS и т. д. (но включено несколько совершенно неуместных, таких как Itanium).
- Что еще более важно, он смешивает множество деталей реализации с ABI, так что трудно сказать, какие свойства необходимы для взаимодействия, а какие являются просто аспектами его реализации.
Например, единственными фактическими требованиями к ABI для i386 являются:
%gs:0
указывает на указатель на самого себя.- Сегмент TLS основного исполняемого файла, если он есть, должен располагаться по фиксированному (по компоновщику, отрицательному) смещению от этого адреса.
- Все остальные сегменты TLS для первоначально загруженных библиотек должны иметь постоянные во время выполнения (т. е. одинаковые для каждого потока, но не обязательно одинаковые для разных запусков программы) смещения относительно этого адреса (и динамический компоновщик должен иметь возможность заполнять перемещения с помощью эти смещения).
- Функции
___tls_get_addr
и__tls_get_addr
должны существовать с правильной семантикой для поиска произвольных сегментов TLS.
В частности, существование или расположение DTV не является частью ABI, равно как и порядок/расположение сегментов TLS, кроме основной программы.
Кажется, что любая арка, использующая «TLS вариант II», имеет примерно указанные выше требования к ABI. Но я вообще не очень хорошо понимаю требования «TLS варианта I», и из чтения источников (в uClibc и glibc) кажется, что может быть даже несколько вариантов «варианта I».
Есть ли какие-либо лучшие документы, на которые мне следует обратить внимание, или кто-нибудь, знакомый с работой TLS, может объяснить мне требования ABI?
GCC
TLS? Например, в списке рассылкиgcc-patches
есть ветка, начинающаяся 1 июня этого года, о добавлении поддержки MIPS16 TLS (marc.info/?l=gcc-patches&m=132586147826602). Создатели компиляторов кажутся гораздо более формальными в таких вещах, чем разработчики библиотеки C; у них может быть лучшая формальная документация. - person Nominal Animal   schedule 14.10.2012