]> git.lizzy.rs Git - rust.git/blob - src/test/run-make/static-pie/test-aslr.rs
Fix src/test/run-make/static-pie/test-aslr.rs
[rust.git] / src / test / run-make / static-pie / test-aslr.rs
1 const NUM_RUNS: usize = 10;
2
3 fn run_self(exe: &str) -> usize {
4     use std::process::Command;
5     let mut set = std::collections::HashSet::new();
6
7     let mut cmd = Command::new(exe);
8     cmd.arg("--report");
9     (0..NUM_RUNS).for_each(|_| {
10         set.insert(cmd.output().expect("failed to execute process").stdout);
11     });
12     set.len()
13 }
14
15 fn main() {
16     let mut args = std::env::args();
17     let arg0 = args.next().unwrap();
18     match args.next() {
19         Some(s) if s.eq("--report") => {
20             println!("main = {:#?}", &main as *const _);
21         }
22         Some(s) if s.eq("--test-no-aslr") => {
23             let cnt = run_self(&arg0);
24             if cnt != 1 {
25                 eprintln!("FAIL: {} most likely ASLR", arg0);
26                 std::process::exit(1);
27             }
28             println!("PASS: {} does no ASLR", arg0);
29         }
30         Some(s) if s.eq("--test-aslr") => {
31             let cnt = run_self(&arg0);
32             if cnt == 1 {
33                 eprintln!("FAIL: {} most likely no ASLR", arg0);
34                 std::process::exit(1);
35             }
36             println!("PASS: {} does ASLR", arg0);
37         }
38         Some(_) | None => {
39             println!("Usage: {} --test-no-aslr | --test-aslr", arg0);
40             std::process::exit(1);
41         }
42     }
43 }