[PATCH] D115250: switched to emulated TLV on macOS before 10.7

Kirill A. Korinsky via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Dec 7 07:57:30 PST 2021


catap created this revision.
catap added a reviewer: chandlerc.
catap added projects: clang, LLVM.
Herald added subscribers: dexonsmith, JDevlieghere.
catap requested review of this revision.
Herald added subscribers: llvm-commits, cfe-commits.

The first version of macOS which had TLV inside DYLD was macOS 10.7 and llvm/clang can't compile code:

  __thread int x;
  
  void use_x() {
      x = 7;
  }

on macOS before 10.7 as:

  	.section	__TEXT,__text,regular,pure_instructions
  	.macosx_version_min 10, 6
  	.globl	_use_x                          ## -- Begin function use_x
  	.p2align	4, 0x90
  _use_x:                                 ## @use_x
  	.cfi_startproc
  	pushq	%rbp
  	.cfi_def_cfa_offset 16
  	.cfi_offset %rbp, -16
  	movq	%rsp, %rbp
  	.cfi_def_cfa_register %rbp
  	leaq	___emutls_v.x(%rip), %rdi
  	callq	___emutls_get_address
  	movl	$7, (%rax)
  	popq	%rbp
  	retq
  	.cfi_endproc
                                          ## -- End function
  	.section	__DATA,__data
  	.globl	___emutls_v.x                   ## @__emutls_v.x
  	.p2align	3
  ___emutls_v.x:
  	.quad	4                               ## 0x4
  	.quad	4                               ## 0x4
  	.quad	0
  	.quad	0
  
  .subsections_via_symbols

Which allows me to build rust for macOS 10.6 for example.

This changes effectively reverts an assumption that was introduced at least at 25 Jun 2010 in commit https://github.com/llvm/llvm-project/commit/17c7b89054639ad3cd86f917ad11a50377c8de17

I guess it isn't the only place, but it shown how deep ago it was.

This patch was tested on all MacPorts users for quite a while since it was firstly introduced on 13 Dec 2018 at commit https://github.com/macports/macports-ports/commit/5949e6264728ac7f74625c9eaf5b41d2852d07e6

Co-authored-by: Ken Cunningham <ken.cunningham.webuse at gmail.com>


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D115250

Files:
  clang/lib/Basic/Targets/OSTargets.h
  clang/lib/CodeGen/ItaniumCXXABI.cpp
  llvm/include/llvm/ADT/Triple.h


Index: llvm/include/llvm/ADT/Triple.h
===================================================================
--- llvm/include/llvm/ADT/Triple.h
+++ llvm/include/llvm/ADT/Triple.h
@@ -839,7 +839,7 @@
 
   /// Tests whether the target uses emulated TLS as default.
   bool hasDefaultEmulatedTLS() const {
-    return isAndroid() || isOSOpenBSD() || isWindowsCygwinEnvironment();
+    return isAndroid() || isOSOpenBSD() || isWindowsCygwinEnvironment() || isMacOSXVersionLT(10, 7);
   }
 
   /// Tests whether the target uses -data-sections as default.
Index: clang/lib/CodeGen/ItaniumCXXABI.cpp
===================================================================
--- clang/lib/CodeGen/ItaniumCXXABI.cpp
+++ clang/lib/CodeGen/ItaniumCXXABI.cpp
@@ -2580,7 +2580,7 @@
   const char *Name = "__cxa_atexit";
   if (TLS) {
     const llvm::Triple &T = CGF.getTarget().getTriple();
-    Name = T.isOSDarwin() ?  "_tlv_atexit" : "__cxa_thread_atexit";
+    Name = (T.isOSDarwin() && !T.isMacOSXVersionLT(10, 7)) ?  "_tlv_atexit" : "__cxa_thread_atexit";
   }
 
   // We're assuming that the destructor function is something we can
Index: clang/lib/Basic/Targets/OSTargets.h
===================================================================
--- clang/lib/Basic/Targets/OSTargets.h
+++ clang/lib/Basic/Targets/OSTargets.h
@@ -91,7 +91,7 @@
     this->TLSSupported = false;
 
     if (Triple.isMacOSX())
-      this->TLSSupported = !Triple.isMacOSXVersionLT(10, 7);
+      this->TLSSupported = !Triple.isMacOSXVersionLT(10, 4);
     else if (Triple.isiOS()) {
       // 64-bit iOS supported it from 8 onwards, 32-bit device from 9 onwards,
       // 32-bit simulator from 10 onwards.


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D115250.392367.patch
Type: text/x-patch
Size: 1670 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20211207/9b5f480d/attachment.bin>


More information about the cfe-commits mailing list