Skip to content

Commit adc321a

Browse files
authored
Rollup merge of rust-lang#72782 - petrochenkov:crtargs, r=varkor
rustc_target: Remove `pre_link_args_crt` To regain some more control over the definition of `+crt-static` (rust-lang#71586). After rust-lang#71769 this target option wasn't used anywhere except for VxWorks, and I suspect that for VxWorks its use may be redundant as well.
2 parents 21ac561 + b628358 commit adc321a

File tree

5 files changed

+18
-21
lines changed

5 files changed

+18
-21
lines changed

src/librustc_codegen_ssa/back/link.rs

+2-12
Original file line numberDiff line numberDiff line change
@@ -1253,20 +1253,10 @@ fn add_post_link_objects(
12531253

12541254
/// Add arbitrary "pre-link" args defined by the target spec or from command line.
12551255
/// FIXME: Determine where exactly these args need to be inserted.
1256-
fn add_pre_link_args(
1257-
cmd: &mut dyn Linker,
1258-
sess: &Session,
1259-
flavor: LinkerFlavor,
1260-
crate_type: CrateType,
1261-
) {
1256+
fn add_pre_link_args(cmd: &mut dyn Linker, sess: &Session, flavor: LinkerFlavor) {
12621257
if let Some(args) = sess.target.target.options.pre_link_args.get(&flavor) {
12631258
cmd.args(args);
12641259
}
1265-
if let Some(args) = sess.target.target.options.pre_link_args_crt.get(&flavor) {
1266-
if sess.crt_static(Some(crate_type)) {
1267-
cmd.args(args);
1268-
}
1269-
}
12701260
cmd.args(&sess.opts.debugging_opts.pre_link_args);
12711261
}
12721262

@@ -1502,7 +1492,7 @@ fn linker_with_args<'a, B: ArchiveBuilder<'a>>(
15021492
let crt_objects_fallback = crt_objects_fallback(sess, crate_type);
15031493

15041494
// NO-OPT-OUT, OBJECT-FILES-MAYBE, CUSTOMIZATION-POINT
1505-
add_pre_link_args(cmd, sess, flavor, crate_type);
1495+
add_pre_link_args(cmd, sess, flavor);
15061496

15071497
// NO-OPT-OUT
15081498
add_link_script(cmd, sess, tmpdir, crate_type);

src/librustc_codegen_ssa/back/linker.rs

+15
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,21 @@ impl<'a> Linker for GccLinker<'a> {
315315
self.build_dylib(out_filename);
316316
}
317317
}
318+
// VxWorks compiler driver introduced `--static-crt` flag specifically for rustc,
319+
// it switches linking for libc and similar system libraries to static without using
320+
// any `#[link]` attributes in the `libc` crate, see #72782 for details.
321+
// FIXME: Switch to using `#[link]` attributes in the `libc` crate
322+
// similarly to other targets.
323+
if self.sess.target.target.target_os == "vxworks"
324+
&& matches!(
325+
output_kind,
326+
LinkOutputKind::StaticNoPicExe
327+
| LinkOutputKind::StaticPicExe
328+
| LinkOutputKind::StaticDylib
329+
)
330+
{
331+
self.cmd.arg("--static-crt");
332+
}
318333
}
319334

320335
fn link_dylib(&mut self, lib: Symbol) {

src/librustc_target/spec/mod.rs

+1-5
Original file line numberDiff line numberDiff line change
@@ -733,8 +733,7 @@ pub struct TargetOptions {
733733
pub lld_flavor: LldFlavor,
734734

735735
/// Linker arguments that are passed *before* any user-defined libraries.
736-
pub pre_link_args: LinkArgs, // ... unconditionally
737-
pub pre_link_args_crt: LinkArgs, // ... when linking with a bundled crt
736+
pub pre_link_args: LinkArgs,
738737
/// Objects to link before and after all other object code.
739738
pub pre_link_objects: CrtObjects,
740739
pub post_link_objects: CrtObjects,
@@ -997,7 +996,6 @@ impl Default for TargetOptions {
997996
linker: option_env!("CFG_DEFAULT_LINKER").map(|s| s.to_string()),
998997
lld_flavor: LldFlavor::Ld,
999998
pre_link_args: LinkArgs::new(),
1000-
pre_link_args_crt: LinkArgs::new(),
1001999
post_link_args: LinkArgs::new(),
10021000
link_script: None,
10031001
asm_args: Vec::new(),
@@ -1397,7 +1395,6 @@ impl Target {
13971395
key!(post_link_objects_fallback, link_objects);
13981396
key!(crt_objects_fallback, crt_objects_fallback)?;
13991397
key!(pre_link_args, link_args);
1400-
key!(pre_link_args_crt, link_args);
14011398
key!(late_link_args, link_args);
14021399
key!(late_link_args_dynamic, link_args);
14031400
key!(late_link_args_static, link_args);
@@ -1629,7 +1626,6 @@ impl ToJson for Target {
16291626
target_option_val!(post_link_objects_fallback);
16301627
target_option_val!(crt_objects_fallback);
16311628
target_option_val!(link_args - pre_link_args);
1632-
target_option_val!(link_args - pre_link_args_crt);
16331629
target_option_val!(link_args - late_link_args);
16341630
target_option_val!(link_args - late_link_args_dynamic);
16351631
target_option_val!(link_args - late_link_args_static);

src/librustc_target/spec/tests/tests_impl.rs

-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ impl Target {
2525
);
2626
for args in &[
2727
&self.options.pre_link_args,
28-
&self.options.pre_link_args_crt,
2928
&self.options.late_link_args,
3029
&self.options.late_link_args_dynamic,
3130
&self.options.late_link_args_static,

src/librustc_target/spec/vxworks_base.rs

-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
use crate::spec::{LinkArgs, LinkerFlavor, TargetOptions};
22

33
pub fn opts() -> TargetOptions {
4-
let mut args_crt = LinkArgs::new();
5-
args_crt.insert(LinkerFlavor::Gcc, vec!["--static-crt".to_string()]);
64
let mut args = LinkArgs::new();
75
args.insert(
86
LinkerFlavor::Gcc,
@@ -29,7 +27,6 @@ pub fn opts() -> TargetOptions {
2927
pre_link_args: args,
3028
position_independent_executables: false,
3129
has_elf_tls: true,
32-
pre_link_args_crt: args_crt,
3330
crt_static_default: true,
3431
crt_static_respected: true,
3532
crt_static_allows_dylibs: true,

0 commit comments

Comments
 (0)