aboutsummaryrefslogtreecommitdiff
path: root/src/rust/external
diff options
context:
space:
mode:
authorAlex Crichton <alex@alexcrichton.com>2018-10-01 22:54:20 -0700
committerAlex Crichton <alex@alexcrichton.com>2018-10-01 22:55:59 -0700
commit74c1e44746a7d9c810f095177af88b7dbaafd3e3 (patch)
treec132fa6494b98a8374eaca66722eb8267999a9f5 /src/rust/external
parent6ebb2c46d5eae7bae8d827fdc68d3ed58b16e95a (diff)
downloadtor-74c1e44746a7d9c810f095177af88b7dbaafd3e3.tar.gz
tor-74c1e44746a7d9c810f095177af88b7dbaafd3e3.zip
Fix segfaults related to sanitizers+jemalloc
It looks to be the case that Rust's standard allocator, jemalloc, is incompatible with sanitizers. The incompatibility, for whatever reason, seems to cause segfaults at runtime when jemalloc is linked with sanitizers. Without actually trying to figure out what's going on here this commit instead takes the hammer of "let's remove jemalloc when testing". The `tor_allocate` crate now by default switches to the system allocator (eventually this will want to be the tor allocator). Most crates then link to `tor_allocate` ot pick this up, but the `smartlist` crate had to manually switch to the system allocator in testing and the `external` crate had to be sure to link to `tor_allocate`. The final gotcha here is that this patch also switches to unconditionally passing `--target` to Cargo. For weird and arcane reasons passing `--target` with the host target of the compiler (which Cargo otherwise uses as the default) is different than not passing `--target` at all. This ensure that our custom `RUSTFLAGS` with sanitizer options doesn't make its way into build scripts, just the final testing artifacts.
Diffstat (limited to 'src/rust/external')
-rw-r--r--src/rust/external/Cargo.toml5
-rw-r--r--src/rust/external/lib.rs2
2 files changed, 3 insertions, 4 deletions
diff --git a/src/rust/external/Cargo.toml b/src/rust/external/Cargo.toml
index 4735144ee6..d5c3a739e0 100644
--- a/src/rust/external/Cargo.toml
+++ b/src/rust/external/Cargo.toml
@@ -5,9 +5,8 @@ name = "external"
[dependencies]
libc = "=0.2.39"
-
-[dependencies.smartlist]
-path = "../smartlist"
+smartlist = { path = "../smartlist" }
+tor_allocate = { path = "../tor_allocate" }
[lib]
name = "external"
diff --git a/src/rust/external/lib.rs b/src/rust/external/lib.rs
index b72a4f6e4c..d68036fcad 100644
--- a/src/rust/external/lib.rs
+++ b/src/rust/external/lib.rs
@@ -8,7 +8,7 @@
//! module implementing this functionality repeatedly.
extern crate libc;
-
+extern crate tor_allocate;
extern crate smartlist;
pub mod crypto_digest;