A Deep Dive into Implicit Thread-Local Storage
chao-tic.github.io
chao-tic.github.io
Because it seems to need the kernel to set it? But I guess that's only done once each time you create a new thread and you're already doing a syscall in that case, so it's probably better than taking up a general purpose register.
on the linker side - you're right, there isn't any fundamental reason why. but since traditionally the linker does address assignment for symbols, and TLS variables are general symbols/storage with an annotation...then it seems natural to extend it to allocate out of .tdata and .tbss for multiple objects.
Not the clearest abbreviation ;)