Quais são os requisitos reais da ELF TLS ABI para cada cpu arch?

O papel de Ulrich Drepper em armazenamento local de thread descreve a ABI TLS para várias arquiteturas de cpu diferentes, mas estou achando insuficiente como base para implementar o TLS por dois motivos:

Ele omite vários arcos importantes como ARM, MIPS, etc. (incluindo um monte de itens completamente irrelevantes como o Itanium)Mais importante, ele mistura muitos detalhes de implementação com a ABI, de modo que é difícil dizer quais propriedades são necessárias para a interoperabilidade e quais são apenas aspectos de sua implementação.

Como exemplo, os únicos requisitos reais da ABI para i386 são:

%gs:0 aponta para um ponteiro para si mesmo.O segmento TLS do executável principal, se houver, deve estar localizado em um deslocamento fixo (pelo vinculador, negativo) desse endereço.Todos os outros segmentos TLS para bibliotecas carregadas inicialmente devem ter um deslocamento de tempo de execução constante (ou seja, o mesmo para cada encadeamento, mas não necessariamente o mesmo em diferentes execuções de programa) (e o vinculador dinâmico deve ser capaz de preencher as realocações com essas compensações).___tls_get_addr e__tls_get_addr funções devem existir com a semântica correta para procurar segmentos TLS arbitrários.

Em particular, a existência ou o layout de um DTV énão parte da ABI, nem a ordenação / layout de segmentos TLS além dos do programa principal.

Parece que qualquer arco usando "TLS variante II" tem aproximadamente os requisitos ABI acima. Mas eu não entendo muito bem os requisitos de "TLS variante I", e parece que a partir de fontes de leitura (em uClibc e glibc) que pode haver várias variantes de "variante I".

Há algum documento melhor que eu deveria estar olhando, ou alguém familiarizado com o funcionamento do TLS pode explicar os requisitos da ABI para mim?

questionAnswers(1)

yourAnswerToTheQuestion