[ 
https://issues.apache.org/jira/browse/MESOS-9323?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16653343#comment-16653343
 ] 

Benno Evers commented on MESOS-9323:
------------------------------------

After further investigation, this was caused by mixing `g++` as default 
compiiler with `lld` as default linker.

I'm able to reproduce the unique symbol and the DTPOFF32 relocation using this 
example program:
{noformat}
$ cat thread_local.cpp
#include <string>

class C {
public:
  static void* foo() {
    static thread_local void* generator = nullptr;
    return generator;
  }
};


void* cfoo() {
        return C::foo();        
}
$ g++ thread-local.cpp -c -O2 -fPIC
{noformat}

But this in itself doesn't seem to be enough to trigger the error, so I still 
don't know the actual root cause of this problem.

> Relocation errros against symbol id::UUID::random()
> ---------------------------------------------------
>
>                 Key: MESOS-9323
>                 URL: https://issues.apache.org/jira/browse/MESOS-9323
>             Project: Mesos
>          Issue Type: Bug
>            Reporter: Benno Evers
>            Priority: Major
>
> Trying to build Mesos on a Fedora 28 machine using a combination of gcc 8.1 
> and lld 8-trunk results in the following error:
> {noformat}
> ld: error: can't create dynamic relocation R_X86_64_DTPOFF32 against symbol: 
> id::UUID::random()::generator in readonly segment; recompile object files 
> with -fPIC or pass '-Wl,-z,notext' to allow text relocations in the output
> >>> defined in 
> >>> ./.libs/libmesos_no_3rdparty.a(libmesos_no_3rdparty_la-checker_process.o)
> >>> referenced by uuid.hpp:43 (../../3rdparty/stout/include/stout/uuid.hpp:43)
> >>>               
> >>> lt15-libmesos_no_3rdparty_la-manager.o:(mesos::internal::ResourceProviderManagerProcess::newResourceProviderId())
> >>>  in archive ./.libs/libmesos_no_3rdparty.a
> ld: error: too many errors emitted, stopping now (use -error-limit=0 to see 
> all errors)
> {noformat}
> Both the linker and compiler flags already included `-fPIC`, so this part of 
> the error message seems bogus.
> I'm not sure if this an issue of the compiler generating invalid object files 
> or the linker misunderstanding the created artifacts. However, the symbol 
> `id::UUID::random()::generator` is a very special case because it is a 
> function-local static in an inline function, causing gcc to generate a 
> special `GNU_UNIQUE` symbol, and also a thread-local variable leading to the 
> DTPOFF32 relocation.
> It seems like this combination of uncommon things is somehow tripping up one 
> of the involved tools.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to