|
6 | 6 |
|
7 | 7 | //@ ignore-windows-msvc |
8 | 8 |
|
9 | | -use run_make_support::{bin_name, dynamic_lib_name, is_windows, llvm_readobj, regex, rustc}; |
| 9 | +//FIXME(Oneirical): This currently uses llvm-nm for symbol detection. However, |
| 10 | +// the custom Rust-based solution of #128314 may prove to be an interesting alternative. |
| 11 | + |
| 12 | +use run_make_support::{bin_name, dynamic_lib_name, is_darwin, is_windows, llvm_nm, regex, rustc}; |
10 | 13 |
|
11 | 14 | fn main() { |
12 | | - let mut cdylib_name = dynamic_lib_name("a_cdylib"); |
13 | | - let mut rdylib_name = dynamic_lib_name("a_rust_dylib"); |
| 15 | + let cdylib_name = dynamic_lib_name("a_cdylib"); |
| 16 | + let rdylib_name = dynamic_lib_name("a_rust_dylib"); |
14 | 17 | let exe_name = bin_name("an_executable"); |
15 | | - let mut combined_cdylib_name = dynamic_lib_name("combined_rlib_dylib"); |
| 18 | + let combined_cdylib_name = dynamic_lib_name("combined_rlib_dylib"); |
16 | 19 | rustc().arg("-Zshare-generics=no").input("an_rlib.rs").run(); |
17 | 20 | rustc().arg("-Zshare-generics=no").input("a_cdylib.rs").run(); |
18 | 21 | rustc().arg("-Zshare-generics=no").input("a_rust_dylib.rs").run(); |
@@ -142,7 +145,15 @@ fn main() { |
142 | 145 |
|
143 | 146 | #[track_caller] |
144 | 147 | fn symbols_check(path: &str, symbol_check_type: SymbolCheckType, exists_once: bool) { |
145 | | - let out = llvm_readobj().arg("--dyn-symbols").input(path).run().invalid_stdout_utf8(); |
| 148 | + let mut nm = llvm_nm(); |
| 149 | + if is_windows() { |
| 150 | + nm.arg("--extern-only"); |
| 151 | + } else if is_darwin() { |
| 152 | + nm.arg("--extern-only").arg("--defined-only"); |
| 153 | + } else { |
| 154 | + nm.arg("--dynamic"); |
| 155 | + } |
| 156 | + let out = nm.input(path).run().stdout_utf8(); |
146 | 157 | assert_eq!( |
147 | 158 | out.lines() |
148 | 159 | .filter(|&line| !line.contains("__imp_") && has_symbol(line, symbol_check_type)) |
|
0 commit comments