Projects
Mega:24.09
rust
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 6
View file
_service:tar_scm:rust.spec
Changed
@@ -12,7 +12,7 @@ Name: rust Version: 1.79.0 -Release: 1 +Release: 2 Summary: The Rust Programming Language License: Apache-2.0 OR MIT URL: https://www.rust-lang.org @@ -31,10 +31,6 @@ Patch0002: rustc-1.70.0-rust-gdb-substitute-path.patch Patch0003: 0001-add-support-for-ppc64le.patch -%ifarch riscv64 -Patch1000: embed-riscv64-target-abi-in-bc-when-plugin-_-lto-is-used.patch -%endif - %{lua: function rust_triple(arch) local abi = "gnu" if arch == "armv7hl" then @@ -520,6 +516,9 @@ %{_mandir}/man1/cargo*.1* %changelog +* Thu Jul 18 2024 jchzhou <zhoujiacheng@iscas.ac.cn> - 1.79.0-2 +- Drop obsolete patch for riscv64 (rust-lang/rust#123612 landed in 1.79.0) + * Wed Jun 19 2024 wangkai <13474090681@163.com> - 1.79.0-1 - Update to 1.79.0
View file
_service:tar_scm:embed-riscv64-target-abi-in-bc-when-plugin-_-lto-is-used.patch
Deleted
@@ -1,296 +0,0 @@ -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;
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.
浙ICP备2022010568号-2