| // The unstable flag `-Z export-executable-symbols` exports symbols from executables, as if |
| // they were dynamic libraries. This test is a simple smoke test to check that this feature |
| // works by using it in compilation, then checking that the output binary contains the exported |
| // symbol. |
| // See https://github.com/rust-lang/rust/pull/85673 |
| |
| //@ ignore-wasm |
| //@ ignore-cross-compile |
| |
| use run_make_support::object::Object; |
| use run_make_support::{bin_name, is_darwin, object, rustc}; |
| |
| fn main() { |
| rustc() |
| .arg("-Ctarget-feature=-crt-static") |
| .arg("-Zexport-executable-symbols") |
| .input("main.rs") |
| .crate_type("bin") |
| .run(); |
| let name: &[u8] = if is_darwin() { b"_exported_symbol" } else { b"exported_symbol" }; |
| let contents = std::fs::read(bin_name("main")).unwrap(); |
| let object = object::File::parse(contents.as_slice()).unwrap(); |
| let found = object.exports().unwrap().iter().any(|x| x.name() == name); |
| assert!(found); |
| } |