File tree 3 files changed +21
-5
lines changed
test/run-make-fulldeps/sanitizer-staticlib-link
3 files changed +21
-5
lines changed Original file line number Diff line number Diff line change @@ -738,10 +738,10 @@ impl<'a> CrateLoader<'a> {
738
738
if !self . sess . crate_types . borrow ( ) . iter ( ) . all ( |ct| {
739
739
match * ct {
740
740
// Link the runtime
741
- config:: CrateType :: Staticlib |
742
741
config:: CrateType :: Executable => true ,
743
742
// This crate will be compiled with the required
744
743
// instrumentation pass
744
+ config:: CrateType :: Staticlib |
745
745
config:: CrateType :: Rlib |
746
746
config:: CrateType :: Dylib |
747
747
config:: CrateType :: Cdylib =>
Original file line number Diff line number Diff line change 4
4
5
5
-include ../tools.mk
6
6
7
- # This test builds a staticlib, then an executable that links to it.
8
- # The staticlib and executable both are compiled with address sanitizer,
9
- # and we assert that a fault in the staticlib is correctly detected.
7
+ # This test first builds a staticlib with AddressSanitizer and checks that
8
+ # linking it to an executable fails due to the missing sanitizer runtime.
9
+ # It then builds an executable linking to the staticlib and checks that
10
+ # the fault in the staticlib is detected correctly.
11
+
12
+ # Note that checking for the link failure actually checks two things at once:
13
+ # 1) That the library has the sanitizer intrumentation
14
+ # 2) and that library does not have the sanitizer runtime
10
15
11
16
all :
12
17
$(RUSTC ) -g -Z sanitizer=address --crate-type staticlib --target $(TARGET ) library.rs
13
- $(CC ) program.c $(call STATICLIB,library) $(call OUT_EXE,program) $(EXTRACFLAGS ) $(EXTRACXXFLAGS )
18
+ ! $(CC ) program.c $(call STATICLIB,library) $(call OUT_EXE,program) $(EXTRACFLAGS ) $(EXTRACXXFLAGS )
19
+ $(RUSTC ) -g -Z sanitizer=address --crate-type bin --target $(TARGET ) -L . program.rs
14
20
LD_LIBRARY_PATH=$(TMPDIR ) $(TMPDIR ) /program 2>&1 | $(CGREP ) stack-buffer-overflow
15
21
Original file line number Diff line number Diff line change
1
+ #[ link( name = "library" ) ]
2
+ extern {
3
+ fn overflow ( ) ;
4
+ }
5
+
6
+ fn main ( ) {
7
+ unsafe {
8
+ overflow ( ) ;
9
+ }
10
+ }
You can’t perform that action at this time.
0 commit comments