diff options
| author | bors <bors@rust-lang.org> | 2015-04-16 13:29:52 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2015-04-16 13:29:52 +0000 |
| commit | 5576b0558c7f46faa5331be72113238c677979b6 (patch) | |
| tree | 4f99eb29429b44cbbf458b6350f8e71641efcfe1 /src/libstd/thread | |
| parent | ac2b6f6066adeb79629604a92ecb871c642d045d (diff) | |
| parent | 3e57c6c3ba0d7bfb6ad85915052406be1f218dbc (diff) | |
| download | rust-5576b0558c7f46faa5331be72113238c677979b6.tar.gz rust-5576b0558c7f46faa5331be72113238c677979b6.zip | |
Auto merge of #24448 - alexcrichton:issue-24445, r=huonw
One of the parameters to the magical "register a thread-local destructor" function is called `__dso_handle` and largely just passed along (this seems to be what other implementations do). Currently we pass the *value* of this symbol, but apparently the correct piece of information to pass is the *address* of the symbol. In a PIE binary the symbol actually contains an address to itself which is why we've gotten away with what we're doing as long as we have. In a non-PIE binary the symbol contains the address `NULL`, causing a segfault in the runtime library if it keeps going. Closes #24445
Diffstat (limited to 'src/libstd/thread')
| -rw-r--r-- | src/libstd/thread/local.rs | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/libstd/thread/local.rs b/src/libstd/thread/local.rs index cc4031cc180..6d8f1cba709 100644 --- a/src/libstd/thread/local.rs +++ b/src/libstd/thread/local.rs @@ -373,7 +373,7 @@ mod imp { arg: *mut u8, dso_handle: *mut u8) -> libc::c_int; mem::transmute::<*const (), F>(__cxa_thread_atexit_impl) - (dtor, t, __dso_handle); + (dtor, t, &__dso_handle as *const _ as *mut _); return } |
