|
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