Was sind die tatsächlichen ELF TLS ABI-Anforderungen für jeden CPU-Arch?

Ulrich Dreppers Arbeit Bei thread-lokalem Speicher wird die TLS-ABI für mehrere verschiedene CPU-Architekturen beschrieben, aber ich finde, dass sie aus zwei Gründen als Basis für die Implementierung von TLS nicht ausreicht:

Es lässt eine Reihe wichtiger Bögen wie ARM, MIPS usw. aus (einschließlich einer Reihe völlig irrelevanter Bögen wie Itanium).Noch wichtiger ist, dass viele Implementierungsdetails mit ABI vermischt werden, sodass schwer zu sagen ist, welche Eigenschaften für die Interoperabilität erforderlich sind und welche nur Aspekte seiner Implementierung sind.

Beispielsweise sind die einzigen tatsächlichen ABI-Anforderungen für i386:

%gs:0 zeigt auf einen Zeiger auf sich selbst.Das TLS-Segment der Hauptprogrammdatei muss, falls vorhanden, an einem festen (durch den Linker negativen) Abstand von dieser Adresse liegen.Alle anderen TLS-Segmente für anfänglich geladene Bibliotheken müssen eine Laufzeitkonstante (dh für jeden Thread gleich, aber nicht notwendigerweise für verschiedene Programmläufe gleich) bezüglich dieser Adresse aufweisen (und der dynamische Linker muss in der Lage sein, Verschiebungen mit auszufüllen diese Offsets).___tls_get_addr und__tls_get_addr Funktionen müssen mit der richtigen Semantik für die Suche nach beliebigen TLS-Segmenten vorhanden sein.

Insbesondere ist das Vorhandensein oder Layout eines DTVnicht Teil des ABI, noch ist die Reihenfolge / das Layout der TLS-Segmente anders als die des Hauptprogramms.

Es scheint, dass jeder Bogen, der "TLS-Variante II" verwendet, in etwa die oben genannten ABI-Anforderungen erfüllt. Aber ich verstehe die Anforderungen von "TLS-Variante I" überhaupt nicht sehr gut, und es scheint aus Lesequellen (in uClibc und glibc), dass es sogar mehrere Varianten von "Variante I" geben kann.

Gibt es bessere Dokumente, die ich mir ansehen sollte, oder kann mir jemand, der mit der Funktionsweise von TLS vertraut ist, die ABI-Anforderungen erklären?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage