This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Linking with -pthread only if linking with a .so that needs it


* Sam Varshavchik:

> Florian Weimer writes:
>
>> * Sam Varshavchik:
>>
>> > libcxx.so gets built by gcc.7.3.1 with -std=c++17 -O2
>> > -fvisibility-inlines- hidden, -fno-omit-frame-pointer, and
>> > -pthread. It contains some static variables that are instantiated
>> > templates. It contains other static variables whose constructors
>> > invoke the instantiated templates' methods that construct and
>> > destruct std::unique_lock<std::mutex> of std::mutexes that are
>> > static variables of the instantiated templates. Static
>> > initialization of libcxx.so does not create any execution thread.
>>
>> What's the binding type for __pthread_key_create in libcxx.so?  I
>> assume that's the symbol used as a key for __gthread_active_p.
>
> It's whatever it inherited from <thread>. None of the translation units  
> directly call pthread_key_create(). They construct std::thread, std::mutex,  
> std::recursive_mutex, std::condition_variable, and std::lock and  
> std::lock_guard, for the mutexes.

Sorry, I mind the binding type of the ELF symbol, in the dynamic
symbol table.  Is there even a relocation left?

Same question for __gthread_active_p (or the function that was inlined
into, if any).

There are a few things that could go wrong here: The link editor
resolved the weak symbol at static link time.  The weak symbol is
still there, but it gets processed at an inopportune time during
relocation processing.  Symbol interposition could be involved.
STB_GNU_UNIQUE could have unanticipated side effects as well.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]