On Sun, May 07, 2017 at 05:37:47PM +0200, Mark Kettenis wrote:

> So this enables the code.  It makes -femulated-tls the default,
> otherwise it will generated TLS relocations that we can't handle yet.
> It is possible to specify -fno-emulated-tls if you really want to
> generate those.
> 
> A trivial example program that modifies the variable in one thread and
> prints it in another seems to work as expected.
> 
> Note that the libcompiler_rt implementation unconditionally references
> some symbols in libpthread.  So linking with -lpthread is mandatory.
> GCC 4.9 uses weak references, so -lpthread isn't needed there.
> 
> Perhaps those functions should move to libc.  Or we can make the
> libcompiler_rt code a bit smarter.
> 
> Also note that the libcompiler_rt implementation offers the choice
> between posix_memalign() and normal malloc().  With this diff it uses
> malloc().  Perhaps otto@ has an opinion what's better here?

No real opinion. Since the deafult implementation is malloc, I guess
that is better tested. BTW, I do not trust our posix_memalign to play
nice in all cases. It's on my list of things to check.

        -Otto

> 
> 
> Index: gnu/llvm/tools/clang/lib/Basic/Targets.cpp
> ===================================================================
> RCS file: /cvs/src/gnu/llvm/tools/clang/lib/Basic/Targets.cpp,v
> retrieving revision 1.7
> diff -u -p -r1.7 Targets.cpp
> --- gnu/llvm/tools/clang/lib/Basic/Targets.cpp        14 Mar 2017 08:11:34 
> -0000      1.7
> +++ gnu/llvm/tools/clang/lib/Basic/Targets.cpp        7 May 2017 15:25:08 
> -0000
> @@ -549,8 +549,6 @@ protected:
>  public:
>    OpenBSDTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
>        : OSTargetInfo<Target>(Triple, Opts) {
> -    this->TLSSupported = false;
> -
>        switch (Triple.getArch()) {
>          default:
>          case llvm::Triple::x86:
> Index: gnu/llvm/tools/clang/lib/Driver/Tools.cpp
> ===================================================================
> RCS file: /cvs/src/gnu/llvm/tools/clang/lib/Driver/Tools.cpp,v
> retrieving revision 1.10
> diff -u -p -r1.10 Tools.cpp
> --- gnu/llvm/tools/clang/lib/Driver/Tools.cpp 24 Jan 2017 08:39:08 -0000      
> 1.10
> +++ gnu/llvm/tools/clang/lib/Driver/Tools.cpp 7 May 2017 15:25:09 -0000
> @@ -5370,7 +5370,8 @@ void Clang::ConstructJob(Compilation &C,
>    Args.AddLastArg(CmdArgs, options::OPT_fno_operator_names);
>    // Emulated TLS is enabled by default on Android, and can be enabled 
> manually
>    // with -femulated-tls.
> -  bool EmulatedTLSDefault = Triple.isAndroid() || 
> Triple.isWindowsCygwinEnvironment();
> +  bool EmulatedTLSDefault = Triple.isAndroid() || Triple.isOSOpenBSD() ||
> +                            Triple.isWindowsCygwinEnvironment();
>    if (Args.hasFlag(options::OPT_femulated_tls, options::OPT_fno_emulated_tls,
>                     EmulatedTLSDefault))
>      CmdArgs.push_back("-femulated-tls");
> Index: lib/libcompiler_rt/Makefile
> ===================================================================
> RCS file: /cvs/src/lib/libcompiler_rt/Makefile,v
> retrieving revision 1.7
> diff -u -p -r1.7 Makefile
> --- lib/libcompiler_rt/Makefile       17 Apr 2017 15:53:21 -0000      1.7
> +++ lib/libcompiler_rt/Makefile       7 May 2017 15:25:09 -0000
> @@ -64,6 +64,7 @@ GEN_SRCS=   absvdi2 \
>               divti3 \
>               divtf3 \
>               divxc3 \
> +             emutls \
>               enable_execute_stack \
>               eprintf \
>               extendsfdf2 \

Reply via email to