-
Notifications
You must be signed in to change notification settings - Fork 16.8k
“illegal thread-local reference to regular symbol” error on a TLS variable #26195
Copy link
Copy link
Closed
Labels
bugzillaIssues migrated from bugzillaIssues migrated from bugzillabuild-problemlld:MachOwontfixIssue is real, but we can't or won't fix it. Not invalidIssue is real, but we can't or won't fix it. Not invalid
Description
| Bugzilla Link | 25821 |
| Resolution | WONTFIX |
| Resolved on | Feb 19, 2021 16:01 |
| Version | unspecified |
| OS | MacOS X |
| Reporter | LLVM Bugzilla Contributor |
| CC | @int3 |
Extended Description
Linking fails with the message "illegal thread-local reference to regular symbol" when attempting to create a dylib which references an external TLS variable declared with __thread.
In foo.cc:
extern __thread int x;
void foo() { ++x; }
The compile step is (this works fine):
$CXX -stdlib=libc++ -std=c++11 -fvisibility=hidden -fPIC -o foo.cc.o -c foo.cc
The linking step (where the error is thrown):
$CXX -stdlib=libc++ -std=c++11 -fvisibility=hidden -dynamiclib -Wl,-undefined,dynamic_lookup -o libfoo.dylib foo.cpp.o
Now this works fine in gcc (5 and 4.9.3) on the same platform. I understand there are differences in the implementation of __thread, but I cannot find any documentation addressing this specific issue anywhere, so I assume this is a bug.
Version info:
$ $CXX --version
Apple LLVM version 7.0.2 (clang-700.1.81)
Target: x86_64-apple-darwin14.5.0
Thread model: posix
$ ld -v
@(#)PROGRAM:ld PROJECT:ld64-253.9
configured to support archs: armv6 armv7 armv7s arm64 i386 x86_64 x86_64h armv6m armv7k armv7m armv7em (tvOS)
LTO support using: Apple LLVM 7.0.2 (clang-700.1.81)
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
bugzillaIssues migrated from bugzillaIssues migrated from bugzillabuild-problemlld:MachOwontfixIssue is real, but we can't or won't fix it. Not invalidIssue is real, but we can't or won't fix it. Not invalid