提交 26d129ce 编写于 作者: K kennytm 提交者: GitHub

Rollup merge of #47110 - EdSchouten:cloudabi-tls, r=kennytm

Use the right TLS model for CloudABI.

CloudABI doesn't do dynamic linking. For this reason, there is no need
to handle any other TLS model than local-exec. CloudABI's C library
doesn't provide a __tls_get_addr() function to do Dynamic TLS.

By forcing local-exec to be used here, we ensure that we don't generate
function calls to __tls_get_addr().
......@@ -27,6 +27,18 @@ pub fn opts() -> TargetOptions {
linker_is_gnu: true,
pre_link_args: args,
position_independent_executables: true,
// As CloudABI only supports static linkage, there is no need
// for dynamic TLS. The C library therefore does not provide
// __tls_get_addr(), which is normally used to perform dynamic
// TLS lookups by programs that make use of dlopen(). Only the
// "local-exec" and "initial-exec" TLS models can be used.
//
// "local-exec" is more efficient than "initial-exec", as the
// latter has one more level of indirection: it accesses the GOT
// (Global Offset Table) to obtain the effective address of a
// thread-local variable. Using a GOT is useful only when doing
// dynamic linking.
tls_model: "local-exec".to_string(),
relro_level: RelroLevel::Full,
exe_allocation_crate: super::maybe_jemalloc(),
.. Default::default()
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册