about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--.travis.yml2
-rw-r--r--src/test/run-make/sanitizer-address/Makefile15
-rw-r--r--src/test/run-make/sanitizer-cdylib-link/Makefile14
-rw-r--r--src/test/run-make/sanitizer-dylib-link/Makefile14
4 files changed, 31 insertions, 14 deletions
diff --git a/.travis.yml b/.travis.yml
index 827f5fd159a..23bae6d9f17 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,8 +1,6 @@
 language: shell
 sudo: required
 dist: trusty
-# FIXME(#44398) shouldn't need to be here
-group: deprecated-2017Q3
 services:
   - docker
 
diff --git a/src/test/run-make/sanitizer-address/Makefile b/src/test/run-make/sanitizer-address/Makefile
index 61b25df1451..d0ac8903f10 100644
--- a/src/test/run-make/sanitizer-address/Makefile
+++ b/src/test/run-make/sanitizer-address/Makefile
@@ -1,5 +1,7 @@
 -include ../tools.mk
 
+LOG := $(TMPDIR)/log.txt
+
 # NOTE the address sanitizer only supports x86_64 linux and macOS
 
 ifeq ($(TARGET),x86_64-apple-darwin)
@@ -8,12 +10,21 @@ EXTRA_RUSTFLAG=-C rpath
 else
 ifeq ($(TARGET),x86_64-unknown-linux-gnu)
 ASAN_SUPPORT=$(SANITIZER_SUPPORT)
-EXTRA_RUSTFLAG=
+
+# Apparently there are very specific Linux kernels, notably the one that's
+# currently on Travis CI, which contain a buggy commit that triggers failures in
+# the ASan implementation, detailed at google/sanitizers#837. As noted in
+# google/sanitizers#856 the "fix" is to avoid using PIE binaries, so we pass a
+# different relocation model to avoid generating a PIE binary. Once Travis is no
+# longer running kernel 4.4.0-93 we can remove this and pass an empty set of
+# flags again.
+EXTRA_RUSTFLAG=-C relocation-model=dynamic-no-pic
 endif
 endif
 
 all:
 ifeq ($(ASAN_SUPPORT),1)
 	$(RUSTC) -g -Z sanitizer=address -Z print-link-args $(EXTRA_RUSTFLAG) overflow.rs | grep -q librustc_asan
-	$(TMPDIR)/overflow 2>&1 | grep -q stack-buffer-overflow
+	$(TMPDIR)/overflow 2>&1 | tee $(LOG)
+	grep -q stack-buffer-overflow $(LOG)
 endif
diff --git a/src/test/run-make/sanitizer-cdylib-link/Makefile b/src/test/run-make/sanitizer-cdylib-link/Makefile
index 9b0470fb277..0cc4334f17f 100644
--- a/src/test/run-make/sanitizer-cdylib-link/Makefile
+++ b/src/test/run-make/sanitizer-cdylib-link/Makefile
@@ -1,5 +1,7 @@
 -include ../tools.mk
 
+LOG := $(TMPDIR)/log.txt
+
 # This test builds a shared object, then an executable that links it as a native
 # rust library (constrast to an rlib). The shared library and executable both
 # are compiled with address sanitizer, and we assert that a fault in the cdylib
@@ -7,13 +9,15 @@
 
 ifeq ($(TARGET),x86_64-unknown-linux-gnu)
 ASAN_SUPPORT=$(SANITIZER_SUPPORT)
-EXTRA_RUSTFLAG=
+
+# See comment in sanitizer-address/Makefile for why this is here
+EXTRA_RUSTFLAG=-C relocation-model=dynamic-no-pic
 endif
 
 all:
 ifeq ($(ASAN_SUPPORT),1)
-	$(RUSTC) -g -Z sanitizer=address --crate-type cdylib --target $(TARGET) library.rs
-	$(RUSTC) -g -Z sanitizer=address --crate-type bin --target $(TARGET) -llibrary program.rs
-	LD_LIBRARY_PATH=$(TMPDIR) $(TMPDIR)/program 2>&1 | grep -q stack-buffer-overflow
+	$(RUSTC) -g -Z sanitizer=address --crate-type cdylib --target $(TARGET) $(EXTRA_RUSTFLAG) library.rs
+	$(RUSTC) -g -Z sanitizer=address --crate-type bin --target $(TARGET) $(EXTRA_RUSTFLAG) -llibrary program.rs
+	LD_LIBRARY_PATH=$(TMPDIR) $(TMPDIR)/program 2>&1 | tee $(LOG)
+	grep -q stack-buffer-overflow $(LOG)
 endif
-
diff --git a/src/test/run-make/sanitizer-dylib-link/Makefile b/src/test/run-make/sanitizer-dylib-link/Makefile
index d75241f0971..cdf0b91c1ef 100644
--- a/src/test/run-make/sanitizer-dylib-link/Makefile
+++ b/src/test/run-make/sanitizer-dylib-link/Makefile
@@ -1,5 +1,7 @@
 -include ../tools.mk
 
+LOG := $(TMPDIR)/log.txt
+
 # This test builds a shared object, then an executable that links it as a native
 # rust library (constrast to an rlib). The shared library and executable both
 # are compiled with address sanitizer, and we assert that a fault in the dylib
@@ -7,13 +9,15 @@
 
 ifeq ($(TARGET),x86_64-unknown-linux-gnu)
 ASAN_SUPPORT=$(SANITIZER_SUPPORT)
-EXTRA_RUSTFLAG=
+
+# See comment in sanitizer-address/Makefile for why this is here
+EXTRA_RUSTFLAG=-C relocation-model=dynamic-no-pic
 endif
 
 all:
 ifeq ($(ASAN_SUPPORT),1)
-	$(RUSTC) -g -Z sanitizer=address --crate-type dylib --target $(TARGET) library.rs
-	$(RUSTC) -g -Z sanitizer=address --crate-type bin --target $(TARGET) -llibrary program.rs
-	LD_LIBRARY_PATH=$(TMPDIR) $(TMPDIR)/program 2>&1 | grep -q stack-buffer-overflow
+	$(RUSTC) -g -Z sanitizer=address --crate-type dylib --target $(TARGET) $(EXTRA_RUSTFLAG) library.rs
+	$(RUSTC) -g -Z sanitizer=address --crate-type bin --target $(TARGET) $(EXTRA_RUSTFLAG) -llibrary program.rs
+	LD_LIBRARY_PATH=$(TMPDIR) $(TMPDIR)/program 2>&1 | tee $(LOG)
+	grep -q stack-buffer-overflow $(LOG)
 endif
-