Sto solo studiando come TLS (thread-local storage) è implementato su sistemi Linux. Il documento ELF Handling for Thread-Local Storage spiega come i requisiti di un programma per le variabili locali del thread possono essere codificati in un binario ELF e in che modo il "runtime" deve gestire tali binari.Su Linux, TLS è impostato dal kernel o da libc (o altro linguaggio runtime)?
Tuttavia, non è chiaro se in pratica il "tempo di esecuzione", che imposta l'area TLS (s) sarà il kernel di Linux (e il suo codice per i binari di carico ELF) o qualche codice di inizializzazione in libc. Qualcuno potrebbe spiegarci brevemente?
(Sfondo: sto cercando di collegare ed eseguire un'applicazione in modo statico, ma segfaults all'avvio. In gdb, posso vedere che il codice segfaulting è un codice init di libc. Sta cercando di leggere una variabile statica utilizzando un indirizzo relativo a GS, ma GS è zero.)
glibc e musl sono open source; puoi controllare il codice sorgente per loro. –
Stai discutendo di TLS (thread-local storage) o TLS (transport layer security)? Il contenuto suggerisce l'archiviazione locale del thread; tag [tag: ssl] suggerisce quest'ultimo. Eri sinonimo? Ho rimosso [tag: ssl] e aggiunto [tag: thread-local-storage], anche se [tag: tls] non è stato auto-evidentemente mappato a [tag: ssl]. –
@JonathanLeffler, ho aggiunto tls, che significa thread-local-storage. Grazie per aver corretto l'errore. –