libunwind-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Libunwind-devel] tls_model("initial-exec") attribute prevents dynam


From: Dave Watson
Subject: Re: [Libunwind-devel] tls_model("initial-exec") attribute prevents dynamic loading of libunwind via dlopen()
Date: Wed, 2 May 2018 07:37:22 -0700
User-agent: Mutt/1.6.0 (2016-04-01)

On 04/29/18 09:55 PM, Milian Wolff wrote:
> Hey all.
> 
> I just noticed that one cannot dlopen() libunwind when it is build with --
> enable-per-thread-cache. In such scenarios, dlopen will always fail with 
> "cannot allocate memory in static TLS block".
> 
> The issue was also encountered by the jemalloc people, see [1] and [2].
> 
> [1]: https://github.com/jemalloc/jemalloc/issues/937
> [2]: https://github.com/jemalloc/jemalloc/pull/1180
> 
> The reason for this in libunwind comes from src/dwarf/Gparser.c:
> 
> static __thread struct dwarf_rs_cache tls_cache 
> __attribute__((tls_model("initial-exec")));
> 
> The initially specified tls_model("initial-exec") triggers the issue above. 
> jemalloc has work-arounded this by adding a configure option to remove this 
> explicit tsl_model setting (cf. [2] above).
> 
> Indeed, just removing the attribute "fixes" libunwind for my use-case in 
> heaptrack. So the question is now:
> 
> - why was the tls_model explicitly set to initial-exec?
> - can we just remove it?
> - if not, can we add another configure option similar to what jemalloc did?

As Paul mentioned, it's because __thread and friends aren't
async-signal-safe on glibc and may allocate.  I'm fine adding a
configure-time option to change the tls model if someone wants to
provide a patch for it.

Facebook has codepaths that try to avoid the trace cache __thread if
we actually need async-signal-safety:

https://github.com/facebook/folly/blob/cd1bdc912603c0358ba733d379a74ae90ab3a437/folly/experimental/symbolizer/StackTrace.cpp#L31



reply via email to

[Prev in Thread] Current Thread [Next in Thread]