Compare commits

...

10 Commits

Author SHA1 Message Date
openeuler-ci-bot
5bce29dead
!131 Add support for the ppc64le platform
From: @jianchunfu 
Reviewed-by: @wk333 
Signed-off-by: @wk333
2024-06-18 06:53:38 +00:00
JianChunfu
09d992dc31 spec: Add support for the ppc64le platform
Add support for the powerpc platform of ppc64le target.

Signed-off-by: JianChunfu <chunfu.jian@shingroup.cn>
2024-06-17 15:42:17 +08:00
openeuler-ci-bot
8af59cc67e
!129 disable musl for loongarch64
From: @zhangwenlong01 
Reviewed-by: @wk333 
Signed-off-by: @wk333
2024-06-06 09:03:58 +00:00
Wenlong Zhang
c937cf1951 disable musl for loongarch64 2024-06-05 11:06:55 +00:00
openeuler-ci-bot
d5d6e44d5e !125 modify openEuler to %{_vendor}
From: @panchenbo 
Reviewed-by: @wk333 
Signed-off-by: @wk333
2024-04-22 06:28:45 +00:00
panchenbo
62a7e58643 Modify openEuler to vendor 2024-04-22 14:06:04 +08:00
openeuler-ci-bot
86737f8ed5 !122 [sync] PR-121: Enable profiler builtin
From: @openeuler-sync-bot 
Reviewed-by: @wk333 
Signed-off-by: @wk333
2024-04-21 05:52:12 +00:00
shafeipaozi
91427acfca enable profiler builtin
(cherry picked from commit 61c6107133a82a94b705b6aecd7e5ca5f12ebdf6)
2024-04-19 16:27:43 +08:00
openeuler-ci-bot
707e9c1ccd !119 [sync] PR-118: Update to 1.77.0
From: @openeuler-sync-bot 
Reviewed-by: @wk333 
Signed-off-by: @wk333
2024-04-07 06:28:28 +00:00
wk333
57bcf485aa Update to 1.77.0
(cherry picked from commit b34a8df02be7d7609b73027b0c3790cb5b3fe3a2)
2024-04-03 14:46:59 +08:00
10 changed files with 579 additions and 173 deletions

View File

@ -0,0 +1,160 @@
From 85c7f9262e9d4fbfdaa5d7bc22a85eb5300fcca0 Mon Sep 17 00:00:00 2001
From: jcf <chunfu.jian@shingroup.cn>
Date: Wed, 12 Jun 2024 09:14:32 +0000
Subject: [PATCH] add support for ppc64le
---
compiler/rustc_target/src/spec/mod.rs | 2 ++
.../src/spec/targets/ppc64le_unknown_freebsd.rs | 17 +++++++++++++++++
.../spec/targets/ppc64le_unknown_linux_gnu.rs | 17 +++++++++++++++++
.../spec/targets/ppc64le_unknown_linux_musl.rs | 17 +++++++++++++++++
src/bootstrap/configure.py | 2 ++
src/doc/rustc/src/platform-support.md | 2 ++
vendor/openssl-src/src/lib.rs | 3 +++
vendor/target-lexicon/src/targets.rs | 3 +++
8 files changed, 63 insertions(+)
create mode 100644 compiler/rustc_target/src/spec/targets/ppc64le_unknown_freebsd.rs
create mode 100644 compiler/rustc_target/src/spec/targets/ppc64le_unknown_linux_gnu.rs
create mode 100644 compiler/rustc_target/src/spec/targets/ppc64le_unknown_linux_musl.rs
diff --git a/compiler/rustc_target/src/spec/mod.rs b/compiler/rustc_target/src/spec/mod.rs
index 6c698c5b0..29575b9aa 100644
--- a/compiler/rustc_target/src/spec/mod.rs
+++ b/compiler/rustc_target/src/spec/mod.rs
@@ -1421,6 +1421,8 @@ supported_targets! {
("powerpc64-unknown-linux-musl", powerpc64_unknown_linux_musl),
("powerpc64le-unknown-linux-gnu", powerpc64le_unknown_linux_gnu),
("powerpc64le-unknown-linux-musl", powerpc64le_unknown_linux_musl),
+ ("ppc64le-unknown-linux-gnu", ppc64le_unknown_linux_gnu),
+ ("ppc64le-unknown-linux-musl", ppc64le_unknown_linux_musl),
("s390x-unknown-linux-gnu", s390x_unknown_linux_gnu),
("s390x-unknown-linux-musl", s390x_unknown_linux_musl),
("sparc-unknown-linux-gnu", sparc_unknown_linux_gnu),
diff --git a/compiler/rustc_target/src/spec/targets/ppc64le_unknown_freebsd.rs b/compiler/rustc_target/src/spec/targets/ppc64le_unknown_freebsd.rs
new file mode 100644
index 000000000..41189b6fa
--- /dev/null
+++ b/compiler/rustc_target/src/spec/targets/ppc64le_unknown_freebsd.rs
@@ -0,0 +1,17 @@
+use crate::spec::{base, Cc, LinkerFlavor, Lld, StackProbeType, Target, TargetOptions};
+
+pub fn target() -> Target {
+ let mut base = base::freebsd::opts();
+ base.cpu = "ppc64le".into();
+ base.add_pre_link_args(LinkerFlavor::Gnu(Cc::Yes, Lld::No), &["-m64"]);
+ base.max_atomic_width = Some(64);
+ base.stack_probes = StackProbeType::Inline;
+
+ Target {
+ llvm_target: "ppc64le-unknown-freebsd".into(),
+ pointer_width: 64,
+ data_layout: "e-m:e-Fn32-i64:64-n32:64".into(),
+ arch: "powerpc64".into(),
+ options: TargetOptions { mcount: "_mcount".into(), ..base },
+ }
+}
diff --git a/compiler/rustc_target/src/spec/targets/ppc64le_unknown_linux_gnu.rs b/compiler/rustc_target/src/spec/targets/ppc64le_unknown_linux_gnu.rs
new file mode 100644
index 000000000..f60b84447
--- /dev/null
+++ b/compiler/rustc_target/src/spec/targets/ppc64le_unknown_linux_gnu.rs
@@ -0,0 +1,17 @@
+use crate::spec::{base, Cc, LinkerFlavor, Lld, StackProbeType, Target, TargetOptions};
+
+pub fn target() -> Target {
+ let mut base = base::linux_gnu::opts();
+ base.cpu = "ppc64le".into();
+ base.add_pre_link_args(LinkerFlavor::Gnu(Cc::Yes, Lld::No), &["-m64"]);
+ base.max_atomic_width = Some(64);
+ base.stack_probes = StackProbeType::Inline;
+
+ Target {
+ llvm_target: "ppc64le-unknown-linux-gnu".into(),
+ pointer_width: 64,
+ data_layout: "e-m:e-Fn32-i64:64-n32:64-S128-v256:256:256-v512:512:512".into(),
+ arch: "powerpc64".into(),
+ options: TargetOptions { mcount: "_mcount".into(), ..base },
+ }
+}
diff --git a/compiler/rustc_target/src/spec/targets/ppc64le_unknown_linux_musl.rs b/compiler/rustc_target/src/spec/targets/ppc64le_unknown_linux_musl.rs
new file mode 100644
index 000000000..d497b674b
--- /dev/null
+++ b/compiler/rustc_target/src/spec/targets/ppc64le_unknown_linux_musl.rs
@@ -0,0 +1,17 @@
+use crate::spec::{base, Cc, LinkerFlavor, Lld, StackProbeType, Target, TargetOptions};
+
+pub fn target() -> Target {
+ let mut base = base::linux_musl::opts();
+ base.cpu = "ppc64le".into();
+ base.add_pre_link_args(LinkerFlavor::Gnu(Cc::Yes, Lld::No), &["-m64"]);
+ base.max_atomic_width = Some(64);
+ base.stack_probes = StackProbeType::Inline;
+
+ Target {
+ llvm_target: "ppc64le-unknown-linux-musl".into(),
+ pointer_width: 64,
+ data_layout: "e-m:e-Fn32-i64:64-n32:64-S128-v256:256:256-v512:512:512".into(),
+ arch: "powerpc64".into(),
+ options: TargetOptions { mcount: "_mcount".into(), ..base },
+ }
+}
diff --git a/src/bootstrap/configure.py b/src/bootstrap/configure.py
index d34c19a47..b6adafc5e 100755
--- a/src/bootstrap/configure.py
+++ b/src/bootstrap/configure.py
@@ -126,6 +126,8 @@ v("musl-root-mips64", "target.mips64-unknown-linux-muslabi64.musl-root",
"mips64-unknown-linux-muslabi64 install directory")
v("musl-root-mips64el", "target.mips64el-unknown-linux-muslabi64.musl-root",
"mips64el-unknown-linux-muslabi64 install directory")
+v("musl-root-ppc64le", "target.ppc64le-unknown-linux-musl.musl-root",
+ "ppc64le-unknown-linux-musl install directory")
v("musl-root-riscv32gc", "target.riscv32gc-unknown-linux-musl.musl-root",
"riscv32gc-unknown-linux-musl install directory")
v("musl-root-riscv64gc", "target.riscv64gc-unknown-linux-musl.musl-root",
diff --git a/src/doc/rustc/src/platform-support.md b/src/doc/rustc/src/platform-support.md
index f648a60b6..a905f27d7 100644
--- a/src/doc/rustc/src/platform-support.md
+++ b/src/doc/rustc/src/platform-support.md
@@ -330,8 +330,10 @@ target | std | host | notes
`powerpc-wrs-vxworks` | ? | |
`powerpc64-unknown-freebsd` | ✓ | ✓ | PPC64 FreeBSD (ELFv1 and ELFv2)
`powerpc64le-unknown-freebsd` | | | PPC64LE FreeBSD
+`ppc64le-unknown-freebsd` | | | PPC64LE FreeBSD
`powerpc-unknown-freebsd` | | | PowerPC FreeBSD
`powerpc64-unknown-linux-musl` | ? | |
+`ppc64le-unknown-linux-musl` | ? | |
`powerpc64-wrs-vxworks` | ? | |
`powerpc64le-unknown-linux-musl` | ? | |
[`powerpc64-unknown-openbsd`](platform-support/openbsd.md) | ✓ | ✓ | OpenBSD/powerpc64
diff --git a/vendor/openssl-src/src/lib.rs b/vendor/openssl-src/src/lib.rs
index 1264742dc..14427a70e 100644
--- a/vendor/openssl-src/src/lib.rs
+++ b/vendor/openssl-src/src/lib.rs
@@ -282,6 +282,9 @@ impl Build {
"powerpc64le-unknown-freebsd" => "BSD-generic64",
"powerpc64le-unknown-linux-gnu" => "linux-ppc64le",
"powerpc64le-unknown-linux-musl" => "linux-ppc64le",
+ "ppc64le-unknown-freebsd" => "BSD-generic64",
+ "ppc64le-unknown-linux-gnu" => "linux-ppc64le",
+ "ppc64le-unknown-linux-musl" => "linux-ppc64le",
"riscv64gc-unknown-linux-gnu" => "linux-generic64",
"s390x-unknown-linux-gnu" => "linux64-s390x",
"s390x-unknown-linux-musl" => "linux64-s390x",
diff --git a/vendor/target-lexicon/src/targets.rs b/vendor/target-lexicon/src/targets.rs
index d03d202a0..7d7c0ee95 100644
--- a/vendor/target-lexicon/src/targets.rs
+++ b/vendor/target-lexicon/src/targets.rs
@@ -1624,6 +1624,9 @@ mod tests {
"powerpc64le-unknown-freebsd",
"powerpc64le-unknown-linux-gnu",
"powerpc64le-unknown-linux-musl",
+ "ppc64le-unknown-freebsd",
+ "ppc64le-unknown-linux-gnu",
+ "ppc64le-unknown-linux-musl",
"powerpc64-ibm-aix",
"powerpc64-unknown-freebsd",
"powerpc64-unknown-linux-gnu",
--
2.44.0

View File

@ -1,50 +0,0 @@
From c9d31b711e8906cf248566f43142f20b03e20cbf Mon Sep 17 00:00:00 2001
From: Edward Thomson <ethomson@edwardthomson.com>
Date: Fri, 17 Nov 2023 16:54:47 +0000
Subject: [PATCH] revparse: fix parsing bug for trailing `@`
Origin: https://github.com/libgit2/libgit2/commit/c9d31b711e8906cf248566f43142f20b03e20cbf
When parsing a revspec that ends with a trailing `@`, explicitly stop
parsing. Introduce a sentinel variable to explicitly stop parsing.
Prior to this, we would set `spec` to `HEAD`, but were looping on the
value of `spec[pos]`, so we would continue walking the (new) `spec`
at offset `pos`, looking for a NUL. This is obviously an out-of-bounds
read.
Credit to Michael Rodler (@f0rki) and Amazon AWS Security.
---
vendor/libgit2-sys/libgit2/src/libgit2/revparse.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/vendor/libgit2-sys/libgit2/src/libgit2/revparse.c b/vendor/libgit2-sys/libgit2/src/libgit2/revparse.c
index 964afe378da..06d92f82bf2 100644
--- a/vendor/libgit2-sys/libgit2/src/libgit2/revparse.c
+++ b/vendor/libgit2-sys/libgit2/src/libgit2/revparse.c
@@ -701,6 +701,7 @@ static int revparse(
git_object *base_rev = NULL;
bool should_return_reference = true;
+ bool parsed = false;
GIT_ASSERT_ARG(object_out);
GIT_ASSERT_ARG(reference_out);
@@ -710,7 +711,7 @@ static int revparse(
*object_out = NULL;
*reference_out = NULL;
- while (spec[pos]) {
+ while (!parsed && spec[pos]) {
switch (spec[pos]) {
case '^':
should_return_reference = false;
@@ -817,6 +818,8 @@ static int revparse(
break;
} else if (spec[pos+1] == '\0') {
spec = "HEAD";
+ identifier_len = 4;
+ parsed = true;
break;
}
/* fall through */

View File

@ -1,51 +0,0 @@
From eb4c1716cd92bf56f2770653a915d5fc01eab8f3 Mon Sep 17 00:00:00 2001
From: Edward Thomson <ethomson@edwardthomson.com>
Date: Sat, 16 Dec 2023 11:19:07 +0000
Subject: [PATCH] index: correct index has_dir_name check
Origin: https://github.com/libgit2/libgit2/commit/eb4c1716cd92bf56f2770653a915d5fc01eab8f3
`has_dir_name` is used to check for directory/file collisions,
and attempts to determine whether the index contains a file with
a directory name that is a proper subset of the new index entry
that we're trying to add.
To determine directory name, the function would walk the path string
backwards to identify a `/`, stopping at the end of the string. However,
the function assumed that the strings did not start with a `/`. If the
paths contain only a single `/` at the beginning of the string, then the
function would continue the loop, erroneously, when they should have
stopped at the first character.
Correct the order of the tests to terminate properly.
Credit to Michael Rodler (@f0rki) and Amazon AWS Security.
---
vendor/libgit2-sys/libgit2/src/libgit2/index.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/vendor/libgit2-sys/libgit2/src/libgit2/index.c b/vendor/libgit2-sys/libgit2/src/libgit2/index.c
index 7ebe075..7862273 100644
--- a/vendor/libgit2-sys/libgit2/src/libgit2/index.c
+++ b/vendor/libgit2-sys/libgit2/src/libgit2/index.c
@@ -1155,10 +1155,14 @@ static int has_dir_name(git_index *index,
size_t len, pos;
for (;;) {
- if (*--slash == '/')
- break;
+ slash--;
+
if (slash <= entry->path)
return 0;
+
+
+ if (*slash == '/')
+ break;
}
len = slash - name;
--
2.23.0

View File

@ -0,0 +1,296 @@
From a599284dbac82d272aac53a7ace524484b4bb4dc Mon Sep 17 00:00:00 2001
From: kxxt <rsworktech@outlook.com>
Date: Sun, 28 Jan 2024 18:38:41 +0800
Subject: [PATCH] embed riscv64 target abi in bc when plugin-lto is used
Fixes chromium linking error.
Related:
- https://discourse.llvm.org/t/encode-target-abi-into-llvm-bitcode-for-lto/54116
- https://internals.rust-lang.org/t/per-target-llvm-module-flags/12023
---
compiler/rustc_codegen_llvm/src/back/lto.rs | 2 +-
compiler/rustc_codegen_llvm/src/context.rs | 49 +++++++++++++------
.../rustc_codegen_llvm/src/debuginfo/mod.rs | 6 +--
compiler/rustc_codegen_llvm/src/llvm/ffi.rs | 10 +++-
compiler/rustc_codegen_llvm/src/llvm/mod.rs | 5 ++
.../rustc_llvm/llvm-wrapper/RustWrapper.cpp | 11 ++++-
6 files changed, 62 insertions(+), 21 deletions(-)
diff --git a/compiler/rustc_codegen_llvm/src/back/lto.rs b/compiler/rustc_codegen_llvm/src/back/lto.rs
index 42bd8687042a1..6c204b7ab2bc9 100644
--- a/compiler/rustc_codegen_llvm/src/back/lto.rs
+++ b/compiler/rustc_codegen_llvm/src/back/lto.rs
@@ -607,7 +607,7 @@ pub(crate) fn run_pass_manager(
"LTOPostLink".as_ptr().cast(),
11,
) {
- llvm::LLVMRustAddModuleFlag(
+ llvm::LLVMRustAddModuleFlagU32(
module.module_llvm.llmod(),
llvm::LLVMModFlagBehavior::Error,
c"LTOPostLink".as_ptr().cast(),
diff --git a/compiler/rustc_codegen_llvm/src/context.rs b/compiler/rustc_codegen_llvm/src/context.rs
index 6cb62280a595e..ebb657f97b398 100644
--- a/compiler/rustc_codegen_llvm/src/context.rs
+++ b/compiler/rustc_codegen_llvm/src/context.rs
@@ -30,6 +30,7 @@ use rustc_span::Span;
use rustc_target::abi::{
call::FnAbi, HasDataLayout, PointeeInfo, Size, TargetDataLayout, VariantIdx,
};
+use rustc_target::spec::TargetTriple;
use rustc_target::spec::{HasTargetSpec, RelocModel, Target, TlsModel};
use smallvec::SmallVec;
@@ -203,13 +204,13 @@ pub unsafe fn create_module<'ll>(
// to ensure intrinsic calls don't use it.
if !sess.needs_plt() {
let avoid_plt = c"RtLibUseGOT".as_ptr().cast();
- llvm::LLVMRustAddModuleFlag(llmod, llvm::LLVMModFlagBehavior::Warning, avoid_plt, 1);
+ llvm::LLVMRustAddModuleFlagU32(llmod, llvm::LLVMModFlagBehavior::Warning, avoid_plt, 1);
}
// Enable canonical jump tables if CFI is enabled. (See https://reviews.llvm.org/D65629.)
if sess.is_sanitizer_cfi_canonical_jump_tables_enabled() && sess.is_sanitizer_cfi_enabled() {
let canonical_jump_tables = c"CFI Canonical Jump Tables".as_ptr().cast();
- llvm::LLVMRustAddModuleFlag(
+ llvm::LLVMRustAddModuleFlagU32(
llmod,
llvm::LLVMModFlagBehavior::Override,
canonical_jump_tables,
@@ -220,7 +221,7 @@ pub unsafe fn create_module<'ll>(
// Enable LTO unit splitting if specified or if CFI is enabled. (See https://reviews.llvm.org/D53891.)
if sess.is_split_lto_unit_enabled() || sess.is_sanitizer_cfi_enabled() {
let enable_split_lto_unit = c"EnableSplitLTOUnit".as_ptr().cast();
- llvm::LLVMRustAddModuleFlag(
+ llvm::LLVMRustAddModuleFlagU32(
llmod,
llvm::LLVMModFlagBehavior::Override,
enable_split_lto_unit,
@@ -231,7 +232,7 @@ pub unsafe fn create_module<'ll>(
// Add "kcfi" module flag if KCFI is enabled. (See https://reviews.llvm.org/D119296.)
if sess.is_sanitizer_kcfi_enabled() {
let kcfi = c"kcfi".as_ptr().cast();
- llvm::LLVMRustAddModuleFlag(llmod, llvm::LLVMModFlagBehavior::Override, kcfi, 1);
+ llvm::LLVMRustAddModuleFlagU32(llmod, llvm::LLVMModFlagBehavior::Override, kcfi, 1);
}
// Control Flow Guard is currently only supported by the MSVC linker on Windows.
@@ -240,7 +241,7 @@ pub unsafe fn create_module<'ll>(
CFGuard::Disabled => {}
CFGuard::NoChecks => {
// Set `cfguard=1` module flag to emit metadata only.
- llvm::LLVMRustAddModuleFlag(
+ llvm::LLVMRustAddModuleFlagU32(
llmod,
llvm::LLVMModFlagBehavior::Warning,
c"cfguard".as_ptr() as *const _,
@@ -249,7 +250,7 @@ pub unsafe fn create_module<'ll>(
}
CFGuard::Checks => {
// Set `cfguard=2` module flag to emit metadata and checks.
- llvm::LLVMRustAddModuleFlag(
+ llvm::LLVMRustAddModuleFlagU32(
llmod,
llvm::LLVMModFlagBehavior::Warning,
c"cfguard".as_ptr() as *const _,
@@ -267,26 +268,26 @@ pub unsafe fn create_module<'ll>(
};
if sess.target.arch == "aarch64" {
- llvm::LLVMRustAddModuleFlag(
+ llvm::LLVMRustAddModuleFlagU32(
llmod,
behavior,
c"branch-target-enforcement".as_ptr().cast(),
bti.into(),
);
- llvm::LLVMRustAddModuleFlag(
+ llvm::LLVMRustAddModuleFlagU32(
llmod,
behavior,
c"sign-return-address".as_ptr().cast(),
pac_ret.is_some().into(),
);
let pac_opts = pac_ret.unwrap_or(PacRet { leaf: false, key: PAuthKey::A });
- llvm::LLVMRustAddModuleFlag(
+ llvm::LLVMRustAddModuleFlagU32(
llmod,
behavior,
c"sign-return-address-all".as_ptr().cast(),
pac_opts.leaf.into(),
);
- llvm::LLVMRustAddModuleFlag(
+ llvm::LLVMRustAddModuleFlagU32(
llmod,
behavior,
c"sign-return-address-with-bkey".as_ptr().cast(),
@@ -302,7 +303,7 @@ pub unsafe fn create_module<'ll>(
// Pass on the control-flow protection flags to LLVM (equivalent to `-fcf-protection` in Clang).
if let CFProtection::Branch | CFProtection::Full = sess.opts.unstable_opts.cf_protection {
- llvm::LLVMRustAddModuleFlag(
+ llvm::LLVMRustAddModuleFlagU32(
llmod,
llvm::LLVMModFlagBehavior::Override,
c"cf-protection-branch".as_ptr().cast(),
@@ -310,7 +311,7 @@ pub unsafe fn create_module<'ll>(
)
}
if let CFProtection::Return | CFProtection::Full = sess.opts.unstable_opts.cf_protection {
- llvm::LLVMRustAddModuleFlag(
+ llvm::LLVMRustAddModuleFlagU32(
llmod,
llvm::LLVMModFlagBehavior::Override,
c"cf-protection-return".as_ptr().cast(),
@@ -319,7 +320,7 @@ pub unsafe fn create_module<'ll>(
}
if sess.opts.unstable_opts.virtual_function_elimination {
- llvm::LLVMRustAddModuleFlag(
+ llvm::LLVMRustAddModuleFlagU32(
llmod,
llvm::LLVMModFlagBehavior::Error,
c"Virtual Function Elim".as_ptr().cast(),
@@ -329,7 +330,7 @@ pub unsafe fn create_module<'ll>(
// Set module flag to enable Windows EHCont Guard (/guard:ehcont).
if sess.opts.unstable_opts.ehcont_guard {
- llvm::LLVMRustAddModuleFlag(
+ llvm::LLVMRustAddModuleFlagU32(
llmod,
llvm::LLVMModFlagBehavior::Warning,
c"ehcontguard".as_ptr() as *const _,
@@ -354,6 +355,24 @@ pub unsafe fn create_module<'ll>(
llvm::LLVMMDNodeInContext(llcx, &name_metadata, 1),
);
+ // Embed target-abi into bitcode for rv64gc when plugin-lto is enabled
+ // Relevant:
+ // https://discourse.llvm.org/t/encode-target-abi-into-llvm-bitcode-for-lto/54116
+ // https://internals.rust-lang.org/t/per-target-llvm-module-flags/12023
+ if sess.opts.cg.linker_plugin_lto.enabled() {
+ let TargetTriple::TargetTriple(ref triple) = sess.opts.target_triple else {
+ panic!("Unexpected TargetTriple::TargetJson")
+ };
+ if triple == "riscv64gc-unknown-linux-gnu" {
+ llvm::LLVMRustAddModuleFlagString(
+ llmod,
+ llvm::LLVMModFlagBehavior::Error,
+ c"target-abi".as_ptr() as *const _,
+ c"lp64d".as_ptr() as *const _,
+ )
+ }
+ }
+
// Add module flags specified via -Z llvm_module_flag
for (key, value, behavior) in &sess.opts.unstable_opts.llvm_module_flag {
let key = format!("{key}\0");
@@ -369,7 +388,7 @@ pub unsafe fn create_module<'ll>(
// We already checked this during option parsing
_ => unreachable!(),
};
- llvm::LLVMRustAddModuleFlag(llmod, behavior, key.as_ptr().cast(), *value)
+ llvm::LLVMRustAddModuleFlagU32(llmod, behavior, key.as_ptr().cast(), *value)
}
llmod
diff --git a/compiler/rustc_codegen_llvm/src/debuginfo/mod.rs b/compiler/rustc_codegen_llvm/src/debuginfo/mod.rs
index d3a851b40c0a2..4fdaa59e0e559 100644
--- a/compiler/rustc_codegen_llvm/src/debuginfo/mod.rs
+++ b/compiler/rustc_codegen_llvm/src/debuginfo/mod.rs
@@ -110,7 +110,7 @@ impl<'ll, 'tcx> CodegenUnitDebugContext<'ll, 'tcx> {
.unstable_opts
.dwarf_version
.unwrap_or(sess.target.default_dwarf_version);
- llvm::LLVMRustAddModuleFlag(
+ llvm::LLVMRustAddModuleFlagU32(
self.llmod,
llvm::LLVMModFlagBehavior::Warning,
c"Dwarf Version".as_ptr().cast(),
@@ -118,7 +118,7 @@ impl<'ll, 'tcx> CodegenUnitDebugContext<'ll, 'tcx> {
);
} else {
// Indicate that we want CodeView debug information on MSVC
- llvm::LLVMRustAddModuleFlag(
+ llvm::LLVMRustAddModuleFlagU32(
self.llmod,
llvm::LLVMModFlagBehavior::Warning,
c"CodeView".as_ptr().cast(),
@@ -127,7 +127,7 @@ impl<'ll, 'tcx> CodegenUnitDebugContext<'ll, 'tcx> {
}
// Prevent bitcode readers from deleting the debug info.
- llvm::LLVMRustAddModuleFlag(
+ llvm::LLVMRustAddModuleFlagU32(
self.llmod,
llvm::LLVMModFlagBehavior::Warning,
c"Debug Info Version".as_ptr().cast(),
diff --git a/compiler/rustc_codegen_llvm/src/llvm/ffi.rs b/compiler/rustc_codegen_llvm/src/llvm/ffi.rs
index ee73c6b4756f0..4d1fc09c54854 100644
--- a/compiler/rustc_codegen_llvm/src/llvm/ffi.rs
+++ b/compiler/rustc_codegen_llvm/src/llvm/ffi.rs
@@ -1793,12 +1793,20 @@ extern "C" {
///
/// In order for Rust-C LTO to work, module flags must be compatible with Clang. What
/// "compatible" means depends on the merge behaviors involved.
- pub fn LLVMRustAddModuleFlag(
+ pub fn LLVMRustAddModuleFlagU32(
M: &Module,
merge_behavior: LLVMModFlagBehavior,
name: *const c_char,
value: u32,
);
+
+ pub fn LLVMRustAddModuleFlagString(
+ M: &Module,
+ merge_behavior: LLVMModFlagBehavior,
+ name: *const c_char,
+ value: *const c_char,
+ );
+
pub fn LLVMRustHasModuleFlag(M: &Module, name: *const c_char, len: size_t) -> bool;
pub fn LLVMRustDIBuilderCreate(M: &Module) -> &mut DIBuilder<'_>;
diff --git a/compiler/rustc_codegen_llvm/src/llvm/mod.rs b/compiler/rustc_codegen_llvm/src/llvm/mod.rs
index 4f5cc575da6e5..73cd5e3052413 100644
--- a/compiler/rustc_codegen_llvm/src/llvm/mod.rs
+++ b/compiler/rustc_codegen_llvm/src/llvm/mod.rs
@@ -324,3 +324,8 @@ impl Drop for OperandBundleDef<'_> {
}
}
}
+
+pub enum LLVMModFlagValue {
+ String(String),
+ U32(u32),
+}
diff --git a/compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp b/compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp
index 0df7b7eed11f9..7408526f6ebef 100644
--- a/compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp
+++ b/compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp
@@ -748,7 +748,7 @@ extern "C" uint32_t LLVMRustVersionMinor() { return LLVM_VERSION_MINOR; }
extern "C" uint32_t LLVMRustVersionMajor() { return LLVM_VERSION_MAJOR; }
-extern "C" void LLVMRustAddModuleFlag(
+extern "C" void LLVMRustAddModuleFlagU32(
LLVMModuleRef M,
Module::ModFlagBehavior MergeBehavior,
const char *Name,
@@ -756,6 +756,15 @@ extern "C" void LLVMRustAddModuleFlag(
unwrap(M)->addModuleFlag(MergeBehavior, Name, Value);
}
+extern "C" void LLVMRustAddModuleFlagString(
+ LLVMModuleRef M,
+ Module::ModFlagBehavior MergeBehavior,
+ const char *Name,
+ const char *Value) {
+ llvm::LLVMContext &Ctx = unwrap(M)->getContext();
+ unwrap(M)->addModuleFlag(MergeBehavior, Name, llvm::MDString::get(Ctx, Value));
+}
+
extern "C" bool LLVMRustHasModuleFlag(LLVMModuleRef M, const char *Name,
size_t Len) {
return unwrap(M)->getModuleFlag(StringRef(Name, Len)) != nullptr;

View File

@ -1,7 +1,7 @@
%global bootstrap_rust 1.75.0 %global bootstrap_rust 1.76.0
%global bootstrap_cargo 1.75.0 %global bootstrap_cargo 1.76.0
%global bootstrap_channel 1.75.0 %global bootstrap_channel 1.76.0
%global bootstrap_date 2023-12-28 %global bootstrap_date 2024-02-08
%bcond_with llvm_static %bcond_with llvm_static
%bcond_with bundled_llvm %bcond_with bundled_llvm
%bcond_without bundled_libgit2 %bcond_without bundled_libgit2
@ -10,8 +10,8 @@
%bcond_without analyzer %bcond_without analyzer
Name: rust Name: rust
Version: 1.76.0 Version: 1.77.0
Release: 1 Release: 5
Summary: The Rust Programming Language Summary: The Rust Programming Language
License: Apache-2.0 OR MIT License: Apache-2.0 OR MIT
URL: https://www.rust-lang.org URL: https://www.rust-lang.org
@ -23,13 +23,16 @@ Source3: cargo-config
Source4: cargo-config.sh Source4: cargo-config.sh
Source5: cargo-config.csh Source5: cargo-config.csh
Patch0000: rustc-1.76.0-disable-libssh2.patch Patch0000: rustc-1.77.0-disable-libssh2.patch
# By default, rust tries to use "rust-lld" as a linker for some targets. # By default, rust tries to use "rust-lld" as a linker for some targets.
Patch0001: 0001-Use-lld-provided-by-system.patch Patch0001: 0001-Use-lld-provided-by-system.patch
# Set a substitute-path in rust-gdb for standard library sources. # Set a substitute-path in rust-gdb for standard library sources.
Patch0002: rustc-1.70.0-rust-gdb-substitute-path.patch Patch0002: rustc-1.70.0-rust-gdb-substitute-path.patch
Patch0003: CVE-2024-24575.patch Patch0003: 0001-add-support-for-ppc64le.patch
Patch0004: CVE-2024-24577.patch
%ifarch riscv64
Patch1000: embed-riscv64-target-abi-in-bc-when-plugin-_-lto-is-used.patch
%endif
%{lua: function rust_triple(arch) %{lua: function rust_triple(arch)
local abi = "gnu" local abi = "gnu"
@ -42,6 +45,8 @@ Patch0004: CVE-2024-24577.patch
arch = "powerpc64le" arch = "powerpc64le"
elseif arch == "riscv64" then elseif arch == "riscv64" then
arch = "riscv64gc" arch = "riscv64gc"
elseif arch == "loongarch64" then
arch = "loongarch64"
end end
return arch.."-unknown-linux-"..abi return arch.."-unknown-linux-"..abi
end} end}
@ -113,6 +118,8 @@ BuildRequires: %{llvm}-static libffi-devel
%endif %endif
BuildRequires: procps-ng BuildRequires: procps-ng
BuildRequires: ninja-build BuildRequires: ninja-build
BuildRequires: compiler-rt
BuildRequires: clang
Provides: rustc = %{version}-%{release} Provides: rustc = %{version}-%{release}
Provides: rustc%{?_isa} = %{version}-%{release} Provides: rustc%{?_isa} = %{version}-%{release}
Requires: %{name}-std-static%{?_isa} = %{version}-%{release} Requires: %{name}-std-static%{?_isa} = %{version}-%{release}
@ -236,12 +243,10 @@ Man pages and other related help documents for rust.
%prep %prep
# download source0 and gpg check # download source0 and gpg check
cd %{_sourcedir} wget -qO %{SOURCE0} https://user-repo.openeuler.openatom.cn/lfs-tar/rust/rustc-%{version}-src.tar.xz
rm -f %{SOURCE0}
wget https://user-repo.openeuler.openatom.cn/lfs-tar/rust/rustc-%{version}-src.tar.xz
gpg --import %{SOURCE2} gpg --import %{SOURCE2}
gpg --verify %{SOURCE1} %{SOURCE0} gpg --verify %{SOURCE1} %{SOURCE0}
cd -
%ifarch %{bootstrap_arches} %ifarch %{bootstrap_arches}
%setup -q -n %{bootstrap_root} -T -b %{bootstrap_source} %setup -q -n %{bootstrap_root} -T -b %{bootstrap_source}
./install.sh --components=cargo,rustc,rust-std-%{rust_triple} \ ./install.sh --components=cargo,rustc,rust-std-%{rust_triple} \
@ -259,7 +264,9 @@ sed -i.try-python -e '/^try python3 /i try "%{python}" "$@"' ./configure
%patch -P 0001 -p1 %patch -P 0001 -p1
%patch -P 0002 -p1 %patch -P 0002 -p1
%patch -P 0003 -p1 %patch -P 0003 -p1
%patch -P 0004 -p1 %ifarch riscv64
%patch -P 1000 -p1
%endif
rm -rf vendor/curl-sys*/curl/ rm -rf vendor/curl-sys*/curl/
rm -rf vendor/jemalloc-sys/jemalloc/ rm -rf vendor/jemalloc-sys/jemalloc/
rm -rf vendor/libffi-sys*/libffi/ rm -rf vendor/libffi-sys*/libffi/
@ -312,10 +319,33 @@ max_cpus=$(( ($(free -g | awk '/^Mem:/{print $2}') + 1) / 2 ))
if [ "$max_cpus" -ge 1 -a "$max_cpus" -lt "$ncpus" ]; then if [ "$max_cpus" -ge 1 -a "$max_cpus" -lt "$ncpus" ]; then
ncpus="$max_cpus" ncpus="$max_cpus"
fi fi
# Find the compiler-rt library for the Rust profiler_builtins crate.
# But there are two versions in openEuler. Why?
# We don't have macros.clang so we need clang version here
# This is for avoiding rpm syntax error
%ifarch ppc64le
%global _arch powerpc64le
%endif
%global clang_maj_ver 17
%if %{?clang_maj_ver} >= 17
# This is the new one, used on openEuler 24.03 LTS or later
%define profiler %(echo %{_prefix}/%{_lib}/clang/%{clang_maj_ver}/lib/%{_arch}-%{_vendor}-linux-gnu/libclang_rt.profile.a)
%else
# This is used before openEuler 23.09
%global clang_full_ver %%(clang --version | awk '/clang version/{print $3}')
%define profiler %(echo %{_prefix}/%{_lib}/clang/%{clang_full_ver}/lib/libclang_rt.profile-%{_arch}.a)
%endif
test -r "%{profiler}"
%configure --disable-option-checking \ %configure --disable-option-checking \
--libdir=%{common_libdir} \ --libdir=%{common_libdir} \
%ifarch loongarch64
--build=%{rust_triple} --host=%{rust_triple} --target=%{rust_triple} \
%else
%{rust_musl_root}=%{musl_root} \ %{rust_musl_root}=%{musl_root} \
--build=%{rust_triple} --host=%{rust_triple} --target=%{rust_triple},%{rust_musl_triple} \ --build=%{rust_triple} --host=%{rust_triple} --target=%{rust_triple},%{rust_musl_triple} \
%endif
--set target.%{rust_triple}.profiler="%{profiler}" \
--python=%{python} \ --python=%{python} \
--local-rust-root=%{local_rust_root} \ --local-rust-root=%{local_rust_root} \
%{!?with_bundled_llvm: --llvm-root=%{llvm_root} \ %{!?with_bundled_llvm: --llvm-root=%{llvm_root} \
@ -412,20 +442,24 @@ export %{rust_env}
%{_libexecdir}/rust-analyzer-proc-macro-srv %{_libexecdir}/rust-analyzer-proc-macro-srv
%endif %endif
%{rustlibdir}/%{rust_triple}/lib/*.so %{rustlibdir}/%{rust_triple}/lib/*.so
%ifnarch loongarch64
%dir %{rustlibdir}/%{rust_musl_triple} %dir %{rustlibdir}/%{rust_musl_triple}
%dir %{rustlibdir}/%{rust_musl_triple}/lib %dir %{rustlibdir}/%{rust_musl_triple}/lib
%endif
%files std-static %files std-static
%dir %{rustlibdir} %dir %{rustlibdir}
%dir %{rustlibdir}/%{rust_triple} %dir %{rustlibdir}/%{rust_triple}
%dir %{rustlibdir}/%{rust_triple}/lib %dir %{rustlibdir}/%{rust_triple}/lib
%{rustlibdir}/%{rust_triple}/lib/*.rlib %{rustlibdir}/%{rust_triple}/lib/*.rlib
%ifnarch loongarch64
%dir %{rustlibdir}/%{rust_musl_triple} %dir %{rustlibdir}/%{rust_musl_triple}
%dir %{rustlibdir}/%{rust_musl_triple}/lib %dir %{rustlibdir}/%{rust_musl_triple}/lib
%{rustlibdir}/%{rust_musl_triple}/lib/*.rlib %{rustlibdir}/%{rust_musl_triple}/lib/*.rlib
%{rustlibdir}/%{rust_musl_triple}/lib/self-contained/*.o %{rustlibdir}/%{rust_musl_triple}/lib/self-contained/*.o
%{rustlibdir}/%{rust_musl_triple}/lib/self-contained/libunwind.a %{rustlibdir}/%{rust_musl_triple}/lib/self-contained/libunwind.a
%{rustlibdir}/%{rust_musl_triple}/lib/self-contained/libc.a %{rustlibdir}/%{rust_musl_triple}/lib/self-contained/libc.a
%endif
%files debugger-common %files debugger-common
%dir %{rustlibdir} %dir %{rustlibdir}
@ -490,6 +524,21 @@ export %{rust_env}
%{_mandir}/man1/cargo*.1* %{_mandir}/man1/cargo*.1*
%changelog %changelog
* Thu Jun 13 2024 jianchunfu <chunfu.jian@shingroup.cn> - 1.77.0-5
- spec: Add support for ppc64le
* Wed Jun 05 2024 Wenlong Zhang <zhangwenlong@loongson.cn> - 1.77.0-4
- disable musl for loongarch64
* Mon Apr 22 2024 panchenbo <panchenbo@kylinsec.com.cn> - 1.77.0-3
- Modify openEuler to vendor
* Thu Apr 11 2024 misaka00251 <liuxin@iscas.ac.cn> - 1.77.0-2
- Enable profiler builtin
* Wed Apr 03 2024 wangkai <13474090681@163.com> - 1.77.0-1
- Update to 1.77.0
* Tue Feb 20 2024 wangkai <13474090681@163.com> - 1.76.0-1 * Tue Feb 20 2024 wangkai <13474090681@163.com> - 1.76.0-1
- Update to 1.76.0 - Update to 1.76.0

View File

@ -1,42 +0,0 @@
--- rustc-beta-src/src/tools/cargo/Cargo.lock.orig 2024-01-07 18:12:08.000000000 -0800
+++ rustc-beta-src/src/tools/cargo/Cargo.lock 2024-01-09 15:25:51.519781381 -0800
@@ -2071,7 +2071,6 @@
dependencies = [
"cc",
"libc",
- "libssh2-sys",
"libz-sys",
"openssl-sys",
"pkg-config",
@@ -2113,20 +2112,6 @@
"pkg-config",
"vcpkg",
]
-
-[[package]]
-name = "libssh2-sys"
-version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2dc8a030b787e2119a731f1951d6a773e2280c660f8ec4b0f5e1505a386e71ee"
-dependencies = [
- "cc",
- "libc",
- "libz-sys",
- "openssl-sys",
- "pkg-config",
- "vcpkg",
-]
[[package]]
name = "libz-sys"
--- rustc-beta-src/src/tools/cargo/Cargo.toml.orig 2024-01-09 15:23:02.369032291 -0800
+++ rustc-beta-src/src/tools/cargo/Cargo.toml 2024-01-09 15:24:44.015679666 -0800
@@ -40,7 +40,7 @@
curl-sys = "0.4.70"
filetime = "0.2.22"
flate2 = { version = "1.0.28", default-features = false, features = ["zlib"] }
-git2 = "0.18.1"
+git2 = { version = "0.18.1", default-features = false, features = ["https"] }
git2-curl = "0.19.0"
gix = { version = "0.56.0", default-features = false, features = ["blocking-http-transport-curl", "progress-tree", "revision"] }
gix-features-for-configuration-only = { version = "0.35.0", package = "gix-features", features = [ "parallel" ] }

View File

@ -1,16 +0,0 @@
-----BEGIN PGP SIGNATURE-----
wsFcBAABCgAQBQJlxNqSCRCFq5bm+hvl/gAA8kIP/ib21y3Rg18POvESXFDPmXAT
blvZsJwR4GsPcUeT2cUYEsWqrtEjoEjMPDumhaSJY4nt6wuAdpCSDf9RQxFSn5vW
Um68Q4dMqmIA2BOIbgDYIBwMUm+Q/ft+1eaKvitJSldqJCTFVXCee1MxeHpE9HSb
2sBC1sGD0aPecMJ9gnSYo57O9rAtItfWroek8KJ+NOxWABHkbRxhx4wSTK4mPy1i
DAtL4VYXomN3OvU1JiunAKhyuIttnrkH92x+YeUlNwOeLTECfLp8sq9yD0hgAkdW
b12ARrQCnBV3HwrgQNIw78ypPOSDYj4B++NB5F2j3wMCyIs6j/891F14ugzLEHuO
b1sjw/xW12kgUbRoyoW/5o60qE18QxgKaxNfgRme/XEF7hBxwFhOcc3BrBTvcA70
enFXpiqswpdvAMpW/YNEwT+Zm0UnWmsU9NXSB4cc8otL9Hj4oYyfX1q6XgmuyupL
jNXSd5evfTEjqcnpHFe0pnNJEExET7EQsEWFgn9J4K7hymSu/bliHMBIx+DAA4Ry
IMBP51oj+o+I8E84z9LDlBshGvcJvYsAXMrbpHonng7u9smitSA+oAy54qevS8+9
kK+UYY95Pl++BxdAFemsldoC0KkKJXGxK0FR2o1ttAA1I+uXrJLJXg8/K7binCeW
A7AXRJdE/spq/O9snPcA
=lnbm
-----END PGP SIGNATURE-----

View File

@ -0,0 +1,44 @@
diff -up rustc-beta-src/src/tools/cargo/Cargo.lock.orig rustc-beta-src/src/tools/cargo/Cargo.lock
--- rustc-beta-src/src/tools/cargo/Cargo.lock.orig 2024-02-14 14:06:05.881165093 +0100
+++ rustc-beta-src/src/tools/cargo/Cargo.lock 2024-02-14 14:06:27.169456166 +0100
@@ -2072,7 +2072,6 @@ checksum = "ee4126d8b4ee5c9d9ea891dd875c
dependencies = [
"cc",
"libc",
- "libssh2-sys",
"libz-sys",
"openssl-sys",
"pkg-config",
@@ -2113,20 +2112,6 @@ dependencies = [
"pkg-config",
"vcpkg",
]
-
-[[package]]
-name = "libssh2-sys"
-version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2dc8a030b787e2119a731f1951d6a773e2280c660f8ec4b0f5e1505a386e71ee"
-dependencies = [
- "cc",
- "libc",
- "libz-sys",
- "openssl-sys",
- "pkg-config",
- "vcpkg",
-]
[[package]]
name = "libz-sys"
diff -up rustc-beta-src/src/tools/cargo/Cargo.toml.orig rustc-beta-src/src/tools/cargo/Cargo.toml
--- rustc-beta-src/src/tools/cargo/Cargo.toml.orig 2024-02-14 14:06:10.400226884 +0100
+++ rustc-beta-src/src/tools/cargo/Cargo.toml 2024-02-14 14:06:51.225785086 +0100
@@ -44,7 +44,7 @@ curl = "0.4.44"
curl-sys = "0.4.70"
filetime = "0.2.23"
flate2 = { version = "1.0.28", default-features = false, features = ["zlib"] }
-git2 = "0.18.2"
+git2 = { version = "0.18.2", default-features = false, features = ["https"] }
git2-curl = "0.19.0"
gix = { version = "0.57.1", default-features = false, features = ["blocking-http-transport-curl", "progress-tree", "revision"] }
gix-features-for-configuration-only = { version = "0.37.1", package = "gix-features", features = [ "parallel" ] }

View File

@ -0,0 +1,16 @@
-----BEGIN PGP SIGNATURE-----
wsFcBAABCgAQBQJl/CkOCRCFq5bm+hvl/gAAuN4P/AxpjflIRg2vOkzczcrTlQYU
fe9c75ru0IH5RpKZ4sTVaG+qoJqsTD/08Dzv06KzNqiShXFBGsSaZ3f46n7jZW8f
bYQFNeCU8jz2DxxvoAty38Zlk5ib/38Cu95ckSoXBDuycXrFTY9ojc6NWSu2vNE4
JXv2yRkW6hiNdO87/KV5H8eshklOGudWVkcoRRZw91X2DopsdqTMiCHzPOWGK3J1
mdz9DjkVj6DKDetrbuX/7N1zosI49Zmg5Eb15JE30pG43l7pyCfKtB2IKpLmugNn
hSi9QqpL0/qKHWVNJ2E2ZkVrCtdX8crxlN8iE/U+VNVa7ZpzsIv7w7SYI4e15HEd
pPWfurYy0gKNpOABiROebqfAfPgDUyU9sufvDnQJD5jv0LWqrBibm2fekIc4xC1B
hvXU46xfXiVqwIgR5FjmwVEwphZoGmju4WrMLQ/bVjfMC8MInISQv4MiFw/0JY/B
f0ePnVQ2kRU/ls1VxidXnKalTNSoR1ORGVDNR3wJV0Ju9xROzWWO0b9p4m5ciyO+
uwMTQcyxyCtNfnxpXTB3XY2YD1ZjqIzop9D3+aRMajxa/PmlxhgXveUjDUc6tc+v
9rQODuxbKHKbg4BlVrtMWIVDV0zArASTuTI3u74+aPCht7Dq3AsnWHhAydeGKwoT
hM+dv4sh161mi7G6WMgN
=eWLu
-----END PGP SIGNATURE-----