svn commit: r353019 - head/share/mk
Kyle Evans
kevans at FreeBSD.org
Wed Oct 2 17:18:19 UTC 2019
Author: kevans
Date: Wed Oct 2 17:18:18 2019
New Revision: 353019
URL: https://svnweb.freebsd.org/changeset/base/353019
Log:
Override the TLS model when building mips64 binaries and static libraries
GCC uses "dynamic" TLS models when -fpic or -fPIC is explicitly
specified on the command line (which is only true for shared libraries).
It uses "static" (or "exec") TLS models otherwise. In particular, GCC
does _not_ use dynamic TLS models when PIC is implicitly enabled (which
it is on MIPS), only if a PIC flag is explicitly provided.
llvm uses "dynamic" TLS models if PIC is enabled either via a PIC flag
or if it is implicily enabled (as on MIPS64). This means that llvm on
MIPS64 always uses "dynamic" TLS models. However, dynamic TLS models
do not work for static binaries and libraries as the __tls_get_addr
function they invoke is only defined in rtld.
Written by: jhb
Reviewed by: arichardson
Differential Revision: https://reviews.freebsd.org/D21699
Modified:
head/share/mk/bsd.lib.mk
head/share/mk/bsd.prog.mk
Modified: head/share/mk/bsd.lib.mk
==============================================================================
--- head/share/mk/bsd.lib.mk Wed Oct 2 17:15:38 2019 (r353018)
+++ head/share/mk/bsd.lib.mk Wed Oct 2 17:18:18 2019 (r353019)
@@ -92,6 +92,12 @@ CXXFLAGS+= ${DEBUG_FILES_CFLAGS}
CTFFLAGS+= -g
.endif
+# clang currently defaults to dynamic TLS for mips64 object files without -fPIC
+.if ${MACHINE_ARCH:Mmips64*} && ${COMPILER_TYPE} == "clang"
+STATIC_CFLAGS+= -ftls-model=initial-exec
+STATIC_CXXFLAGS+= -ftls-model=initial-exec
+.endif
+
.include <bsd.libnames.mk>
# prefer .s to a .c, add .po, remove stuff not used in the BSD libraries
Modified: head/share/mk/bsd.prog.mk
==============================================================================
--- head/share/mk/bsd.prog.mk Wed Oct 2 17:15:38 2019 (r353018)
+++ head/share/mk/bsd.prog.mk Wed Oct 2 17:18:18 2019 (r353019)
@@ -82,6 +82,11 @@ TAG_ARGS= -T ${TAGS:[*]:S/ /,/g}
LDFLAGS+= -static
.endif
+# clang currently defaults to dynamic TLS for mips64 binaries
+.if ${MACHINE_ARCH:Mmips64*} && ${COMPILER_TYPE} == "clang"
+CFLAGS+= -ftls-model=initial-exec
+.endif
+
.if ${MK_DEBUG_FILES} != "no"
PROG_FULL=${PROG}.full
# Use ${DEBUGDIR} for base system debug files, else .debug subdirectory
More information about the svn-src-all
mailing list