Skip to content

Local-exec TLS in an AArch64 shared object leaves no binary evidence

Index: Known gaps

Status (re-verified 2026-10-09 at 456989f): POLICY_NOTE. Records a toolchain limitation: local-exec TLS in an AArch64 shared object leaves no binary evidence. tests/test_elf_static_tls.py asserts the fact stays False.

has_static_tls is read from DF_STATIC_TLS or a TP-relative dynamic relocation (extract/elf_static_tls.py), which covers initial-exec on every architecture, including AArch64, where GNU ld writes no DF_STATIC_TLS. One case stays invisible: -ftls-model=local-exec in a shared object on AArch64. GNU ld (binutils 2.42) links it with the TP offset fixed at link time, emitting neither a TLS dynamic relocation nor the flag, so nothing in the binary records the requirement (tests/test_elf_static_tls.py asserts the fact stays False there rather than fabricating a positive). Local-exec is only valid for executables, so this is toolchain misuse rather than a supported configuration. Closing it would need instruction-level evidence (the tprel relocations in the object files, i.e. L3 build evidence).