Rollup merge of #90001 - Fearyncess:master, r=alexcrichton
Make rlib metadata strip works with MIPSr6 architecture
Because MIPSr6 has many differences with previous MIPSr2 arch, the previous rlib metadata stripping code in `rustc_codegen_ssa` is only for MIPSr2/r3/r5 (which share the same elf e_flags).
This commit fixed this problem. It makes `rustc_codegen_ssa` happy when compiling rustc for MIPSr6 target or hosts.
e_flags REF: e356027016/llvm/include/llvm/BinaryFormat/ELF.h (L562)
This commit is contained in:
commit
c7ada001ec
28
Cargo.lock
28
Cargo.lock
@ -24,6 +24,17 @@ dependencies = [
|
|||||||
"rustc-std-workspace-core",
|
"rustc-std-workspace-core",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ahash"
|
||||||
|
version = "0.7.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "43bb833f0bf979d8475d38fbf09ed3b8a55e1885fe93ad3f93239fc6a4f17b98"
|
||||||
|
dependencies = [
|
||||||
|
"getrandom 0.2.0",
|
||||||
|
"once_cell",
|
||||||
|
"version_check",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "aho-corasick"
|
name = "aho-corasick"
|
||||||
version = "0.7.18"
|
version = "0.7.18"
|
||||||
@ -1579,6 +1590,7 @@ version = "0.11.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "362385356d610bd1e5a408ddf8d022041774b683f345a1d2cfcb4f60f8ae2db5"
|
checksum = "362385356d610bd1e5a408ddf8d022041774b683f345a1d2cfcb4f60f8ae2db5"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"ahash",
|
||||||
"compiler_builtins",
|
"compiler_builtins",
|
||||||
"rustc-std-workspace-alloc",
|
"rustc-std-workspace-alloc",
|
||||||
"rustc-std-workspace-core",
|
"rustc-std-workspace-core",
|
||||||
@ -2396,8 +2408,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "39f37e50073ccad23b6d09bcb5b263f4e76d3bb6038e4a3c08e52162ffa8abc2"
|
checksum = "39f37e50073ccad23b6d09bcb5b263f4e76d3bb6038e4a3c08e52162ffa8abc2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"compiler_builtins",
|
"compiler_builtins",
|
||||||
"crc32fast",
|
|
||||||
"indexmap",
|
|
||||||
"memchr",
|
"memchr",
|
||||||
"rustc-std-workspace-alloc",
|
"rustc-std-workspace-alloc",
|
||||||
"rustc-std-workspace-core",
|
"rustc-std-workspace-core",
|
||||||
@ -2415,6 +2425,18 @@ dependencies = [
|
|||||||
"memchr",
|
"memchr",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "object"
|
||||||
|
version = "0.28.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7ce8b38d41f9f3618fc23f908faae61510f8d8ce2d99cbe910641e8f1971f084"
|
||||||
|
dependencies = [
|
||||||
|
"crc32fast",
|
||||||
|
"hashbrown",
|
||||||
|
"indexmap",
|
||||||
|
"memchr",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "odht"
|
name = "odht"
|
||||||
version = "0.3.1"
|
version = "0.3.1"
|
||||||
@ -3801,7 +3823,7 @@ dependencies = [
|
|||||||
"itertools 0.9.0",
|
"itertools 0.9.0",
|
||||||
"jobserver",
|
"jobserver",
|
||||||
"libc",
|
"libc",
|
||||||
"object 0.26.2",
|
"object 0.28.1",
|
||||||
"pathdiff",
|
"pathdiff",
|
||||||
"regex",
|
"regex",
|
||||||
"rustc_apfloat",
|
"rustc_apfloat",
|
||||||
|
@ -41,6 +41,6 @@ rustc_target = { path = "../rustc_target" }
|
|||||||
rustc_session = { path = "../rustc_session" }
|
rustc_session = { path = "../rustc_session" }
|
||||||
|
|
||||||
[dependencies.object]
|
[dependencies.object]
|
||||||
version = "0.26.2"
|
version = "0.28.0"
|
||||||
default-features = false
|
default-features = false
|
||||||
features = ["read_core", "elf", "macho", "pe", "unaligned", "archive", "write"]
|
features = ["read_core", "elf", "macho", "pe", "unaligned", "archive", "write"]
|
||||||
|
@ -95,7 +95,7 @@ fn search_for_metadata<'a>(
|
|||||||
.map_err(|e| format!("failed to read {} section in '{}': {}", section, path.display(), e))
|
.map_err(|e| format!("failed to read {} section in '{}': {}", section, path.display(), e))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn create_object_file(sess: &Session) -> Option<write::Object> {
|
fn create_object_file(sess: &Session) -> Option<write::Object<'static>> {
|
||||||
let endianness = match sess.target.options.endian {
|
let endianness = match sess.target.options.endian {
|
||||||
Endian::Little => Endianness::Little,
|
Endian::Little => Endianness::Little,
|
||||||
Endian::Big => Endianness::Big,
|
Endian::Big => Endianness::Big,
|
||||||
@ -135,12 +135,24 @@ fn create_object_file(sess: &Session) -> Option<write::Object> {
|
|||||||
Architecture::Mips => {
|
Architecture::Mips => {
|
||||||
// copied from `mipsel-linux-gnu-gcc foo.c -c` and
|
// copied from `mipsel-linux-gnu-gcc foo.c -c` and
|
||||||
// inspecting the resulting `e_flags` field.
|
// inspecting the resulting `e_flags` field.
|
||||||
let e_flags = elf::EF_MIPS_ARCH_32R2 | elf::EF_MIPS_CPIC | elf::EF_MIPS_PIC;
|
let e_flags = elf::EF_MIPS_CPIC
|
||||||
|
| elf::EF_MIPS_PIC
|
||||||
|
| if sess.target.options.cpu.contains("r6") {
|
||||||
|
elf::EF_MIPS_ARCH_32R6 | elf::EF_MIPS_NAN2008
|
||||||
|
} else {
|
||||||
|
elf::EF_MIPS_ARCH_32R2
|
||||||
|
};
|
||||||
file.flags = FileFlags::Elf { e_flags };
|
file.flags = FileFlags::Elf { e_flags };
|
||||||
}
|
}
|
||||||
Architecture::Mips64 => {
|
Architecture::Mips64 => {
|
||||||
// copied from `mips64el-linux-gnuabi64-gcc foo.c -c`
|
// copied from `mips64el-linux-gnuabi64-gcc foo.c -c`
|
||||||
let e_flags = elf::EF_MIPS_ARCH_64R2 | elf::EF_MIPS_CPIC | elf::EF_MIPS_PIC;
|
let e_flags = elf::EF_MIPS_CPIC
|
||||||
|
| elf::EF_MIPS_PIC
|
||||||
|
| if sess.target.options.cpu.contains("r6") {
|
||||||
|
elf::EF_MIPS_ARCH_64R6 | elf::EF_MIPS_NAN2008
|
||||||
|
} else {
|
||||||
|
elf::EF_MIPS_ARCH_64R2
|
||||||
|
};
|
||||||
file.flags = FileFlags::Elf { e_flags };
|
file.flags = FileFlags::Elf { e_flags };
|
||||||
}
|
}
|
||||||
Architecture::Riscv64 if sess.target.options.features.contains("+d") => {
|
Architecture::Riscv64 if sess.target.options.features.contains("+d") => {
|
||||||
|
@ -73,6 +73,7 @@
|
|||||||
const PERMITTED_DEPENDENCIES: &[&str] = &[
|
const PERMITTED_DEPENDENCIES: &[&str] = &[
|
||||||
"addr2line",
|
"addr2line",
|
||||||
"adler",
|
"adler",
|
||||||
|
"ahash",
|
||||||
"aho-corasick",
|
"aho-corasick",
|
||||||
"annotate-snippets",
|
"annotate-snippets",
|
||||||
"ansi_term",
|
"ansi_term",
|
||||||
|
Loading…
Reference in New Issue
Block a user