diff --git a/libwild/src/args.rs b/libwild/src/args.rs index 8f8ed01cc..3846ac7f4 100644 --- a/libwild/src/args.rs +++ b/libwild/src/args.rs @@ -1476,15 +1476,17 @@ fn setup_argument_parser() -> ArgumentParser { .help("Create a position-independent executable") .execute(|args, _modifier_stack| { args.relocation_model = RelocationModel::Relocatable; + args.output_kind = None; Ok(()) }); parser .declare() .long("no-pie") - .help("Create a position-dependent executable (default)") + .help("Do not create a position-dependent executable (default)") .execute(|args, _modifier_stack| { args.relocation_model = RelocationModel::NonRelocatable; + args.output_kind = None; Ok(()) }); diff --git a/wild/tests/integration_tests.rs b/wild/tests/integration_tests.rs index 540475b34..cfda6ac9d 100644 --- a/wild/tests/integration_tests.rs +++ b/wild/tests/integration_tests.rs @@ -2562,7 +2562,8 @@ fn integration_test( "unresolved-symbols-object.c", "unresolved-symbols-shared.c", "lto-undefined.c", - "symbol-version-symver.c" + "symbol-version-symver.c", + "args-precedence.c" )] program_name: &'static str, #[allow(unused_variables)] setup_symlink: (), diff --git a/wild/tests/sources/args-precedence.c b/wild/tests/sources/args-precedence.c new file mode 100644 index 000000000..27bc43471 --- /dev/null +++ b/wild/tests/sources/args-precedence.c @@ -0,0 +1,20 @@ +// Extracted from https://github.com/rust-lang/rust/issues/146780 +//#Config:pie-over-shared +//#LinkArgs:-shared -z now -pie +//#DiffIgnore:.dynamic.DT_RELA* +// We're linking different .so files, so this is expected. +//#DiffIgnore:.dynamic.DT_NEEDED +//#DiffIgnore:section.got +//#Shared:runtime.c +//#Mode:dynamic + +//#Config:no-pie-over-shared +//#LinkArgs:-shared -z now -no-pie +//#Object:runtime.c + +#include "runtime.h" + +void _start(void) { + runtime_init(); + exit_syscall(42); +}