Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 2 Oct 2019 17:18:19 +0000 (UTC)
From:      Kyle Evans <kevans@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r353019 - head/share/mk
Message-ID:  <201910021718.x92HIJ8o085719@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201910021718.x92HIJ8o085719>