Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add a test for -znostart-stop-gc usage with LLD #137926

Merged
merged 1 commit into from
Mar 11, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions tests/ui/linking/no-gc-encapsulation-symbols.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
// This test checks that encapsulation symbols are not garbage collected by the linker.
// LLD will remove them by default, so this test checks that we pass `-znostart-stop-gc` to LLD
// to avoid that behavior. Without that flag, the test should fail.
// This test is inspired by the behavior of the linkme crate.
//
//@ build-pass
//@ only-x86_64-unknown-linux-gnu

unsafe extern "Rust" {
// The __start_ section name is magical for the linker,
// It will put link sections named EXTERNFNS after it.
#[link_name = "__start_EXTERNFNS"]
static SECTION_START: fn();
}

#[used]
#[unsafe(link_section = "EXTERNFNS")]
static EXTERN_FN_LOCAL: fn() = extern_fn;

fn extern_fn() {}

fn main() {
// We need to reference the SECTION_START symbol to avoid it being garbage collected
let slice = unsafe { SECTION_START };
}
Loading