Каковы реальные требования ELF TLS ABI для каждой арки процессора?

Ульрих Дреппербумага в локальном хранилище потоков описывается интерфейс TLS ABI для нескольких разных архитектур ЦП, но яЯ считаю его недостаточным в качестве основы для реализации TLS по двум причинам:

Он пропускает ряд важных арок, таких как ARM, MIPS и т. Д. (Включая кучу совершенно не относящихся к делу, таких как Itanium)Что еще более важно, он смешивает много деталей реализации с ABI, так чтоТрудно сказать, какие свойства требуются для взаимодействия, а какие являются лишь аспектами его реализации.

Например, единственными фактическими требованиями ABI для i386 являются:

%gs:0 указывает на указатель на себя.Основной исполняемый файлСегмент TLS, если таковой имеется, должен быть расположен с фиксированным (с помощью линкера, отрицательным) смещением от этого адреса.Все другие сегменты TLS для изначально загруженных библиотек должны иметь постоянные времени выполнения (т. Е. Одинаковые для каждого потока, но не обязательно одинаковые при разных запусках программы) относительно этого адреса (и динамический компоновщик должен иметь возможность заполнять перемещения с помощью эти смещения).___tls_get_addr а также__tls_get_addr функции должны существовать с правильной семантикой для поиска произвольных сегментов TLS.

В частности, наличие или расположение DTV являетсяне часть ABI, а также порядок / расположение сегментов TLS, кроме основной программы.s.

Кажется, что любая арка используетTLS вариант II " имеет примерно вышеупомянутые требования ABI. Но я нене понимаю требования "TLS вариант I " очень хорошо, и из чтения источников (в uClibc и glibc) кажется, что может быть даже несколько вариантов "вариант I ".

Есть ли какие-нибудь лучшие документы, на которые мне стоит обратить внимание, или кто-нибудь, знакомый с работой TLS, может объяснить мне требования ABI?

Ответы на вопрос(1)

Ваш ответ на вопрос