HomeFreeBSD

TLS: Use <machine/tls.h> for libc and rtld.

Description

TLS: Use <machine/tls.h> for libc and rtld.

  • Include <machine/tls.h> in MD rtld_machdep.h headers.
  • Remove local definitions of TLS_* constants from rtld_machdep.h headers and libc using the values from <machine/tls.h> instead.
  • Use _tcb_set() instead of inlined versions in MD allocate_initial_tls() routines in rtld. The one exception is amd64 whose _tcb_set() invokes the amd64_set_fsbase ifunc. rtld cannot use ifuncs, so amd64 inlines the logic to optionally write to fsbase directly.
  • Use _tcb_set() instead of _set_tp() in libc.
  • Use '&_tcb_get()->tcb_dtv' instead of _get_tp() in both rtld and libc. This permits removing _get_tp.c from rtld.
  • Use TLS_TCB_SIZE and TLS_TCB_ALIGN with allocate_tls() in MD allocate_initial_tls() routines in rtld.

Reviewed by: kib, jrtc27 (earlier version)
Differential Revision: https://reviews.freebsd.org/D33353

(cherry picked from commit 8bcdb144ebe391ce243c71caf06cf417d96ce335)

Details

Provenance
jhbAuthored on Dec 9 2021, 9:17 PM
Reviewer
kib
Differential Revision
D33353: TLS: Use <machine/tls.h> for libc and rtld.
Parents
rG34e70df37ae7: libthr: Use <machine/tls.h> for most MD TLS details.
Branches
Unknown
Tags
Unknown