Skip to content

Commit de4ee55

Browse files
committed
Remove get_reloc_model and target_cpu dependency from most of link.rs
1 parent d8bce01 commit de4ee55

File tree

2 files changed

+19
-15
lines changed

2 files changed

+19
-15
lines changed

src/librustc_codegen_llvm/back/link.rs

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ use super::archive::LlvmArchiveBuilder;
22
use super::rpath::RPathConfig;
33
use super::rpath;
44
use crate::back::wasm;
5-
use crate::context::get_reloc_model;
6-
use crate::llvm;
75
use rustc_codegen_ssa::{METADATA_FILENAME, RLIB_BYTECODE_EXTENSION};
86
use rustc_codegen_ssa::back::archive::ArchiveBuilder;
97
use rustc_codegen_ssa::back::linker::Linker;
@@ -40,6 +38,7 @@ pub(crate) fn link_binary<'a>(sess: &'a Session,
4038
codegen_results: &CodegenResults,
4139
outputs: &OutputFilenames,
4240
crate_name: &str) -> Vec<PathBuf> {
41+
let target_cpu = crate::llvm_util::target_cpu(sess);
4342
let mut out_filenames = Vec::new();
4443
for &crate_type in sess.crate_types.borrow().iter() {
4544
// Ignore executable crates if we have -Z no-codegen, as they will error.
@@ -58,7 +57,8 @@ pub(crate) fn link_binary<'a>(sess: &'a Session,
5857
codegen_results,
5958
crate_type,
6059
outputs,
61-
crate_name);
60+
crate_name,
61+
target_cpu);
6262
out_filenames.extend(out_files);
6363
}
6464

@@ -92,7 +92,8 @@ fn link_binary_output<'a, B: ArchiveBuilder<'a>>(sess: &'a Session,
9292
codegen_results: &CodegenResults,
9393
crate_type: config::CrateType,
9494
outputs: &OutputFilenames,
95-
crate_name: &str) -> Vec<PathBuf> {
95+
crate_name: &str,
96+
target_cpu: &str) -> Vec<PathBuf> {
9697
for obj in codegen_results.modules.iter().filter_map(|m| m.object.as_ref()) {
9798
check_file_is_writeable(obj, sess);
9899
}
@@ -134,7 +135,7 @@ fn link_binary_output<'a, B: ArchiveBuilder<'a>>(sess: &'a Session,
134135
link_staticlib::<B>(sess, codegen_results, &out_filename, &tmpdir);
135136
}
136137
_ => {
137-
link_natively::<B>(sess, crate_type, &out_filename, codegen_results, tmpdir.path());
138+
link_natively::<B>(sess, crate_type, &out_filename, codegen_results, tmpdir.path(), target_cpu);
138139
}
139140
}
140141
out_filenames.push(out_filename);
@@ -167,11 +168,6 @@ fn emit_metadata<'a>(
167168
out_filename
168169
}
169170

170-
enum RlibFlavor {
171-
Normal,
172-
StaticlibBase,
173-
}
174-
175171
// Create an 'rlib'
176172
//
177173
// An rlib in its current incarnation is essentially a renamed .a file. The
@@ -354,7 +350,8 @@ fn link_natively<'a, B: ArchiveBuilder<'a>>(sess: &'a Session,
354350
crate_type: config::CrateType,
355351
out_filename: &Path,
356352
codegen_results: &CodegenResults,
357-
tmpdir: &Path) {
353+
tmpdir: &Path,
354+
target_cpu: &str) {
358355
info!("preparing {:?} to {:?}", crate_type, out_filename);
359356
let (linker, flavor) = linker_and_flavor(sess);
360357

@@ -407,7 +404,6 @@ fn link_natively<'a, B: ArchiveBuilder<'a>>(sess: &'a Session,
407404
}
408405

409406
{
410-
let target_cpu = crate::llvm_util::target_cpu(sess);
411407
let mut linker = codegen_results.linker_info.to_linker(cmd, &sess, flavor, target_cpu);
412408
link_args::<B>(&mut *linker, flavor, sess, crate_type, tmpdir,
413409
out_filename, codegen_results);
@@ -663,8 +659,7 @@ fn link_args<'a, B: ArchiveBuilder<'a>>(cmd: &mut dyn Linker,
663659
let more_args = &sess.opts.cg.link_arg;
664660
let mut args = args.iter().chain(more_args.iter()).chain(used_link_args.iter());
665661

666-
if get_reloc_model(sess) == llvm::RelocMode::PIC
667-
&& !sess.crt_static() && !args.any(|x| *x == "-static") {
662+
if is_pic(sess) && !sess.crt_static() && !args.any(|x| *x == "-static") {
668663
position_independent_executable = true;
669664
}
670665
}
@@ -1106,3 +1101,12 @@ fn add_upstream_rust_crates<'a, B: ArchiveBuilder<'a>>(cmd: &mut dyn Linker,
11061101
parent.unwrap_or(Path::new("")));
11071102
}
11081103
}
1104+
1105+
fn is_pic(sess: &Session) -> bool {
1106+
let reloc_model_arg = match sess.opts.cg.relocation_model {
1107+
Some(ref s) => &s[..],
1108+
None => &sess.target.target.options.relocation_model[..],
1109+
};
1110+
1111+
reloc_model_arg == "pic"
1112+
}

src/librustc_codegen_ssa/back/link.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ pub fn archive_search_paths(sess: &Session) -> Vec<PathBuf> {
258258
sess.target_filesearch(PathKind::Native).search_path_dirs()
259259
}
260260

261-
enum RlibFlavor {
261+
pub enum RlibFlavor {
262262
Normal,
263263
StaticlibBase,
264264
}

0 commit comments

Comments
 (0)