Skip to content

“illegal thread-local reference to regular symbol” error on a TLS variable #26195

@llvmbot

Description

@llvmbot
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)

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugzillaIssues migrated from bugzillabuild-problemlld:MachOwontfixIssue is real, but we can't or won't fix it. Not invalid

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions