Skip to content

Commit

Permalink
Auto merge of #111694 - Amanieu:no-assume-bdynamic, r=petrochenkov
Browse files Browse the repository at this point in the history
Don't assume that `-Bdynamic` is the default linker mode

In particular this is false when passing `-static` or `-static-pie` to the linker, which changes the default to `-Bstatic`. This PR ensures we explicitly initialize the correct mode when we first need it.
  • Loading branch information
bors committed May 24, 2023
2 parents 70db836 + c2f0313 commit b3cbf7c
Showing 1 changed file with 12 additions and 12 deletions.
24 changes: 12 additions & 12 deletions compiler/rustc_codegen_ssa/src/back/linker.rs
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ pub fn get_linker<'a>(
cmd,
sess,
target_cpu,
hinted_static: false,
hinted_static: None,
is_ld: cc == Cc::No,
is_gnu: flavor.is_gnu(),
}) as Box<dyn Linker>,
Expand Down Expand Up @@ -214,7 +214,7 @@ pub struct GccLinker<'a> {
cmd: Command,
sess: &'a Session,
target_cpu: &'a str,
hinted_static: bool, // Keeps track of the current hinting mode.
hinted_static: Option<bool>, // Keeps track of the current hinting mode.
// Link as ld
is_ld: bool,
is_gnu: bool,
Expand Down Expand Up @@ -275,19 +275,19 @@ impl<'a> GccLinker<'a> {
if !self.takes_hints() {
return;
}
if !self.hinted_static {
if self.hinted_static != Some(true) {
self.linker_arg("-Bstatic");
self.hinted_static = true;
self.hinted_static = Some(true);
}
}

fn hint_dynamic(&mut self) {
if !self.takes_hints() {
return;
}
if self.hinted_static {
if self.hinted_static != Some(false) {
self.linker_arg("-Bdynamic");
self.hinted_static = false;
self.hinted_static = Some(false);
}
}

Expand Down Expand Up @@ -1484,25 +1484,25 @@ impl<'a> L4Bender<'a> {
pub struct AixLinker<'a> {
cmd: Command,
sess: &'a Session,
hinted_static: bool,
hinted_static: Option<bool>,
}

impl<'a> AixLinker<'a> {
pub fn new(cmd: Command, sess: &'a Session) -> AixLinker<'a> {
AixLinker { cmd: cmd, sess: sess, hinted_static: false }
AixLinker { cmd: cmd, sess: sess, hinted_static: None }
}

fn hint_static(&mut self) {
if !self.hinted_static {
if self.hinted_static != Some(true) {
self.cmd.arg("-bstatic");
self.hinted_static = true;
self.hinted_static = Some(true);
}
}

fn hint_dynamic(&mut self) {
if self.hinted_static {
if self.hinted_static != Some(false) {
self.cmd.arg("-bdynamic");
self.hinted_static = false;
self.hinted_static = Some(false);
}
}

Expand Down

0 comments on commit b3cbf7c

Please sign in to comment.