aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Johnston <markj@FreeBSD.org>2021-07-16 02:35:28 +0000
committerMark Johnston <markj@FreeBSD.org>2021-07-16 02:41:10 +0000
commit9c97062b620137a1f7cad4c6b3fb030a396b3266 (patch)
tree715f7ad46658f5a21a7b09342bd4875220a34563
parentf238ebd1429312ac2a4cb9f764babc4b6f69721e (diff)
downloadsrc-9c97062b620137a1f7cad4c6b3fb030a396b3266.tar.gz
src-9c97062b620137a1f7cad4c6b3fb030a396b3266.zip
libc: Use the initial-exec TLS model
This permits more efficient accesses of thread-local variables, which are heavily used at least by jemalloc and locale-aware code. Note that on amd64 and i386, jemalloc's thread-local variables already have their TLS model overridden by defining JEMALLOC_TLS_MODEL. For now the change is applied only to tested platforms, but should in principle be enabled everywhere. PR: 255840 Suggested by: jrtc27 Reviewed by: kib MFC after: 2 months Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D31070
-rw-r--r--lib/libc/Makefile7
1 files changed, 7 insertions, 0 deletions
diff --git a/lib/libc/Makefile b/lib/libc/Makefile
index 958270e6ddf5..fdf6aa49932b 100644
--- a/lib/libc/Makefile
+++ b/lib/libc/Makefile
@@ -54,6 +54,13 @@ CANCELPOINTS_CFLAGS=-fexceptions
CFLAGS+=${CANCELPOINTS_CFLAGS}
.endif
+# Use a more efficient TLS model for libc since we can reasonably assume that
+# it will be loaded during program startup.
+.if ${LIBC_ARCH} == "aarch64" || ${LIBC_ARCH} == "amd64" || \
+ ${LIBC_ARCH} == "i386" || ${LIBC_ARCH} == "riscv"
+CFLAGS+= -ftls-model=initial-exec
+.endif
+
#
# Link with static libcompiler_rt.a.
#