¿Cuáles son los requisitos reales de ELF TLS ABI para cada arco de CPU?

El papel de Ulrich Drepper. en el almacenamiento local de subprocesos se describe el ABI de TLS para varias arquitecturas de CPU diferentes, pero me parece insuficiente como base para implementar TLS por dos razones:

Omite una serie de arcos importantes como ARM, MIPS, etc. (a la vez que incluye un montón de elementos completamente irrelevantes como Itanium)Más importante aún, combina una gran cantidad de detalles de implementación con ABI, por lo que es difícil decir qué propiedades se requieren para la interoperabilidad y cuáles son solo aspectos de su implementación.

Como ejemplo, los únicos requisitos ABI reales para i386 son:

%gs:0 señala un puntero a sí mismo.El segmento TLS del ejecutable principal, si existe, debe ubicarse en un desplazamiento fijo (por el enlazador, negativo) de esta dirección.Todos los demás segmentos TLS para las bibliotecas cargadas inicialmente deben tener una constante de tiempo de ejecución (es decir, la misma para cada subproceso, pero no necesariamente la misma en las diferentes ejecuciones del programa) compensaciones relativas a esta dirección (y el vinculador dinámico debe poder completar las reubicaciones con estas compensaciones).___tls_get_addr y__tls_get_addr Las funciones deben existir con la semántica correcta para buscar segmentos TLS arbitrarios.

En particular, la existencia o disposición de un DTV esno parte del ABI, ni es el orden / diseño de segmentos TLS que no sean los del programa principal.

Parece que cualquier arco que use la "variante TLS II" tiene aproximadamente los requisitos ABI anteriores. Pero no entiendo muy bien los requisitos de la "variante TLS I", y las fuentes de lectura (en uClibc y glibc) parecen indicar que puede haber varias variantes de la "variante I".

¿Debo consultar algún documento mejor o alguien que esté familiarizado con el funcionamiento de TLS puede explicarme los requisitos de ABI?

Respuestas a la pregunta(1)

Su respuesta a la pregunta