Skip to content

Commit 3c987cb

Browse files
committed
Move computation of decorated names out of the create_dll_import_lib method
1 parent bb764bd commit 3c987cb

File tree

5 files changed

+25
-25
lines changed

5 files changed

+25
-25
lines changed

compiler/rustc_codegen_cranelift/src/archive.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ impl ArchiveBuilderBuilder for ArArchiveBuilderBuilder {
1616
&self,
1717
sess: &Session,
1818
_lib_name: &str,
19-
_dll_imports: &[rustc_session::cstore::DllImport],
19+
_import_name_and_ordinal_vector: Vec<(String, Option<u16>)>,
2020
_output_path: &Path,
2121
) {
2222
sess.dcx().fatal("raw-dylib is not yet supported by rustc_codegen_cranelift");

compiler/rustc_codegen_gcc/src/archive.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ use std::path::Path;
33
use rustc_codegen_ssa::back::archive::{
44
ArArchiveBuilder, ArchiveBuilder, ArchiveBuilderBuilder, DEFAULT_OBJECT_READER,
55
};
6-
use rustc_session::cstore::DllImport;
76
use rustc_session::Session;
87

98
pub(crate) struct ArArchiveBuilderBuilder;
@@ -17,7 +16,7 @@ impl ArchiveBuilderBuilder for ArArchiveBuilderBuilder {
1716
&self,
1817
_sess: &Session,
1918
_lib_name: &str,
20-
_dll_imports: &[DllImport],
19+
_import_name_and_ordinal_vector: Vec<(String, Option<u16>)>,
2120
_output_path: &Path,
2221
) {
2322
unimplemented!("creating dll imports is not yet supported");

compiler/rustc_codegen_llvm/src/back/archive.rs

+3-18
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ use rustc_codegen_ssa::back::archive::{
99
ArchiveBuilderBuilder, ObjectReader, UnknownArchiveKind, DEFAULT_OBJECT_READER,
1010
};
1111
use rustc_codegen_ssa::common;
12-
use rustc_session::cstore::DllImport;
1312
use rustc_session::Session;
1413
use tracing::trace;
1514

@@ -119,26 +118,12 @@ impl ArchiveBuilderBuilder for LlvmArchiveBuilderBuilder {
119118
&self,
120119
sess: &Session,
121120
lib_name: &str,
122-
dll_imports: &[DllImport],
121+
import_name_and_ordinal_vector: Vec<(String, Option<u16>)>,
123122
output_path: &Path,
124123
) {
125124
let target = &sess.target;
126125
let mingw_gnu_toolchain = common::is_mingw_gnu_toolchain(target);
127126

128-
let import_name_and_ordinal_vector: Vec<(String, Option<u16>)> = dll_imports
129-
.iter()
130-
.map(|import: &DllImport| {
131-
if sess.target.arch == "x86" {
132-
(
133-
common::i686_decorated_name(import, mingw_gnu_toolchain, false),
134-
import.ordinal(),
135-
)
136-
} else {
137-
(import.name.to_string(), import.ordinal())
138-
}
139-
})
140-
.collect();
141-
142127
if mingw_gnu_toolchain {
143128
// The binutils linker used on -windows-gnu targets cannot read the import
144129
// libraries generated by LLVM: in our attempts, the linker produced an .EXE
@@ -236,9 +221,9 @@ impl ArchiveBuilderBuilder for LlvmArchiveBuilderBuilder {
236221
trace!(" output_path {}", output_path.display());
237222
trace!(
238223
" import names: {}",
239-
dll_imports
224+
import_name_and_ordinal_vector
240225
.iter()
241-
.map(|import| import.name.to_string())
226+
.map(|(name, _ordinal)| name.clone())
242227
.collect::<Vec<_>>()
243228
.join(", "),
244229
);

compiler/rustc_codegen_ssa/src/back/archive.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ use object::read::archive::ArchiveFile;
99
use object::read::macho::FatArch;
1010
use rustc_data_structures::fx::FxIndexSet;
1111
use rustc_data_structures::memmap::Mmap;
12-
use rustc_session::cstore::DllImport;
1312
use rustc_session::Session;
1413
use rustc_span::symbol::Symbol;
1514
use tempfile::Builder as TempFileBuilder;
@@ -30,7 +29,7 @@ pub trait ArchiveBuilderBuilder {
3029
&self,
3130
sess: &Session,
3231
lib_name: &str,
33-
dll_imports: &[DllImport],
32+
import_name_and_ordinal_vector: Vec<(String, Option<u16>)>,
3433
output_path: &Path,
3534
);
3635

compiler/rustc_codegen_ssa/src/back/link.rs

+19-2
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,8 @@ use super::linker::{self, Linker};
5151
use super::metadata::{create_wrapper_file, MetadataPosition};
5252
use super::rpath::{self, RPathConfig};
5353
use crate::{
54-
errors, looks_like_rust_object_file, CodegenResults, CompiledModule, CrateInfo, NativeLib,
54+
common, errors, looks_like_rust_object_file, CodegenResults, CompiledModule, CrateInfo,
55+
NativeLib,
5556
};
5657

5758
pub fn ensure_removed(dcx: DiagCtxtHandle<'_>, path: &Path) {
@@ -497,10 +498,26 @@ fn create_dll_import_libs<'a>(
497498
let name_suffix = if is_direct_dependency { "_imports" } else { "_imports_indirect" };
498499
let output_path = tmpdir.join(format!("{raw_dylib_name}{name_suffix}.lib"));
499500

501+
let mingw_gnu_toolchain = common::is_mingw_gnu_toolchain(&sess.target);
502+
503+
let import_name_and_ordinal_vector: Vec<(String, Option<u16>)> = raw_dylib_imports
504+
.iter()
505+
.map(|import: &DllImport| {
506+
if sess.target.arch == "x86" {
507+
(
508+
common::i686_decorated_name(import, mingw_gnu_toolchain, false),
509+
import.ordinal(),
510+
)
511+
} else {
512+
(import.name.to_string(), import.ordinal())
513+
}
514+
})
515+
.collect();
516+
500517
archive_builder_builder.create_dll_import_lib(
501518
sess,
502519
&raw_dylib_name,
503-
&raw_dylib_imports,
520+
import_name_and_ordinal_vector,
504521
&output_path,
505522
);
506523

0 commit comments

Comments
 (0)