diff options
| author | bors <bors@rust-lang.org> | 2015-10-01 04:29:04 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2015-10-01 04:29:04 +0000 |
| commit | 587be42d0bd318d6c2f41fe4716e040366dc8951 (patch) | |
| tree | f029b84fe4e63374038bf89e179f1689ab81bf3a /src/liballoc_jemalloc | |
| parent | 031dd9c38153558025b3de97d486541b56275002 (diff) | |
| parent | 9502df5798f2d7de41fe59927fddd894f7769a73 (diff) | |
| download | rust-587be42d0bd318d6c2f41fe4716e040366dc8951.tar.gz rust-587be42d0bd318d6c2f41fe4716e040366dc8951.zip | |
Auto merge of #28605 - alexcrichton:link-native-first, r=brson
This commit swaps the order of linking local native libraries and upstream native libraries on the linker command line. Detail of bugs this can cause can be found in #28595, and this change also invalidates the test case that was added for #12446 which is now considered a bug because the downstream dependency would need to declare that it depends on the native library somehow. Closes #28595 [breaking-change]
Diffstat (limited to 'src/liballoc_jemalloc')
| -rw-r--r-- | src/liballoc_jemalloc/lib.rs | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/src/liballoc_jemalloc/lib.rs b/src/liballoc_jemalloc/lib.rs index 4179cbe8a7b..80a831fd207 100644 --- a/src/liballoc_jemalloc/lib.rs +++ b/src/liballoc_jemalloc/lib.rs @@ -27,7 +27,19 @@ extern crate libc; use libc::{c_int, c_void, size_t}; +// Linkage directives to pull in jemalloc and its dependencies. +// +// On some platforms we need to be sure to link in `pthread` which jemalloc +// depends on, and specifically on android we need to also link to libgcc. +// Currently jemalloc is compiled with gcc which will generate calls to +// intrinsics that are libgcc specific (e.g. those intrinsics aren't present in +// libcompiler-rt), so link that in to get that support. #[link(name = "jemalloc", kind = "static")] +#[cfg_attr(target_os = "android", link(name = "gcc"))] +#[cfg_attr(all(not(windows), + not(target_os = "android"), + not(target_env = "musl")), + link(name = "pthread"))] extern { fn je_mallocx(size: size_t, flags: c_int) -> *mut c_void; fn je_rallocx(ptr: *mut c_void, size: size_t, flags: c_int) -> *mut c_void; @@ -37,13 +49,6 @@ extern { fn je_nallocx(size: size_t, flags: c_int) -> size_t; } -// -lpthread needs to occur after -ljemalloc, the earlier argument isn't enough -#[cfg(all(not(windows), - not(target_os = "android"), - not(target_env = "musl")))] -#[link(name = "pthread")] -extern {} - // The minimum alignment guaranteed by the architecture. This value is used to // add fast paths for low alignment values. In practice, the alignment is a // constant at the call site and the branch will be optimized out. |
