|
1 |
| -#![feature(rustc_private)] |
2 | 1 | #![feature(link_args)]
|
3 | 2 |
|
4 | 3 | // Set the stack size at link time on Windows. See rustc_driver::in_rustc_thread
|
|
11 | 10 | // Also, don't forget to set this for rustdoc.
|
12 | 11 | extern {}
|
13 | 12 |
|
14 |
| -extern crate rustc_driver; |
| 13 | +fn main() { |
| 14 | + // Pull in jemalloc when enabled. |
| 15 | + // |
| 16 | + // Note that we're pulling in a static copy of jemalloc which means that to |
| 17 | + // pull it in we need to actually reference its symbols for it to get |
| 18 | + // linked. The two crates we link to here, std and rustc_driver, are both |
| 19 | + // dynamic libraries. That means to pull in jemalloc we need to actually |
| 20 | + // reference allocation symbols one way or another (as this file is the only |
| 21 | + // object code in the rustc executable). |
| 22 | + #[cfg(feature = "jemalloc-sys")] |
| 23 | + { |
| 24 | + use std::os::raw::{c_void, c_int}; |
15 | 25 |
|
16 |
| -// Note that the linkage here should be all that we need, on Linux we're not |
17 |
| -// prefixing the symbols here so this should naturally override our default |
18 |
| -// allocator. On OSX it should override via the zone allocator. We shouldn't |
19 |
| -// enable this by default on other platforms, so other platforms aren't handled |
20 |
| -// here yet. |
21 |
| -#[cfg(feature = "jemalloc-sys")] |
22 |
| -extern crate jemalloc_sys; |
| 26 | + #[used] |
| 27 | + static _F1: unsafe extern fn(usize, usize) -> *mut c_void = |
| 28 | + jemalloc_sys::calloc; |
| 29 | + #[used] |
| 30 | + static _F2: unsafe extern fn(*mut *mut c_void, usize, usize) -> c_int = |
| 31 | + jemalloc_sys::posix_memalign; |
| 32 | + #[used] |
| 33 | + static _F3: unsafe extern fn(usize, usize) -> *mut c_void = |
| 34 | + jemalloc_sys::aligned_alloc; |
| 35 | + #[used] |
| 36 | + static _F4: unsafe extern fn(usize) -> *mut c_void = |
| 37 | + jemalloc_sys::malloc; |
| 38 | + #[used] |
| 39 | + static _F5: unsafe extern fn(*mut c_void, usize) -> *mut c_void = |
| 40 | + jemalloc_sys::realloc; |
| 41 | + #[used] |
| 42 | + static _F6: unsafe extern fn(*mut c_void) = |
| 43 | + jemalloc_sys::free; |
| 44 | + } |
23 | 45 |
|
24 |
| -fn main() { |
25 | 46 | rustc_driver::set_sigpipe_handler();
|
26 | 47 | rustc_driver::main()
|
27 | 48 | }
|
0 commit comments