From 41fd9d78988e1fd1a9238cb67d8a96070bf72698 Mon Sep 17 00:00:00 2001 From: Josh Stone Date: Mon, 1 May 2023 10:07:31 -0700 Subject: [PATCH 1/5] Build with LLVM 15 on Fedora 38+ --- rust.spec | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/rust.spec b/rust.spec index 4c7031e..cf35d33 100644 --- a/rust.spec +++ b/rust.spec @@ -85,7 +85,7 @@ Name: rust Version: 1.69.0 -Release: 1%{?dist} +Release: 2%{?dist} Summary: The Rust Programming Language License: (ASL 2.0 or MIT) and (BSD and MIT) # ^ written as: (rust itself) and (bundled libraries) @@ -222,6 +222,12 @@ BuildRequires: ninja-build Provides: bundled(llvm) = %{bundled_llvm_version} %else BuildRequires: cmake >= 2.8.11 +# LLVM 16 is breaking firefox with "error: Cannot represent a difference across sections" +# https://bugzilla.redhat.com/show_bug.cgi?id=2189964 +# https://github.com/llvm/llvm-project/issues/61932 +%if 0%{?fedora} >= 38 +%global llvm llvm15 +%endif %if 0%{?epel} == 7 %global llvm llvm14 %endif @@ -1053,6 +1059,9 @@ end} %changelog +* Mon May 01 2023 Josh Stone - 1.69.0-2 +- Build with LLVM 15 on Fedora 38+ + * Thu Apr 20 2023 Josh Stone - 1.69.0-1 - Update to 1.69.0. - Obsolete rust-analysis. From 777115da9e2892eb47502c8afcbe2b7742b14879 Mon Sep 17 00:00:00 2001 From: Josh Stone Date: Fri, 5 May 2023 13:28:08 -0700 Subject: [PATCH 2/5] Fix debuginfo with LLVM 16 --- ...it-method-declaration-and-definition.patch | 254 ++++++++++++++++++ rust.spec | 15 +- 2 files changed, 262 insertions(+), 7 deletions(-) create mode 100644 0001-debuginfo-split-method-declaration-and-definition.patch diff --git a/0001-debuginfo-split-method-declaration-and-definition.patch b/0001-debuginfo-split-method-declaration-and-definition.patch new file mode 100644 index 0000000..03a4937 --- /dev/null +++ b/0001-debuginfo-split-method-declaration-and-definition.patch @@ -0,0 +1,254 @@ +From 1476ebe761884e0cfc92f3f16809011663eb33f0 Mon Sep 17 00:00:00 2001 +From: Josh Stone +Date: Wed, 3 May 2023 15:52:31 -0700 +Subject: [PATCH] debuginfo: split method declaration and definition + +When we're adding a method to a type DIE, we only want a DW_AT_declaration +there, because LLVM LTO can't unify type definitions when a child DIE is a +full subprogram definition. Now the subprogram definition gets added at the +CU level with a specification link back to the abstract declaration. + +(cherry picked from commit 10b69dde3fd15334ea2382d2dc9e9a261de1afaf) +--- + .../rustc_codegen_llvm/src/debuginfo/mod.rs | 86 +++++++++++-------- + compiler/rustc_codegen_llvm/src/llvm/ffi.rs | 15 ++++ + .../rustc_llvm/llvm-wrapper/RustWrapper.cpp | 22 +++++ + .../issue-109934-lto-debuginfo/Makefile | 12 +++ + .../issue-109934-lto-debuginfo/lib.rs | 9 ++ + 5 files changed, 110 insertions(+), 34 deletions(-) + create mode 100644 tests/run-make-fulldeps/issue-109934-lto-debuginfo/Makefile + create mode 100644 tests/run-make-fulldeps/issue-109934-lto-debuginfo/lib.rs + +diff --git a/compiler/rustc_codegen_llvm/src/debuginfo/mod.rs b/compiler/rustc_codegen_llvm/src/debuginfo/mod.rs +index 5392534cfcb7..11426b150b6c 100644 +--- a/compiler/rustc_codegen_llvm/src/debuginfo/mod.rs ++++ b/compiler/rustc_codegen_llvm/src/debuginfo/mod.rs +@@ -322,7 +322,7 @@ fn dbg_scope_fn( + let tcx = self.tcx; + + let def_id = instance.def_id(); +- let containing_scope = get_containing_scope(self, instance); ++ let (containing_scope, is_method) = get_containing_scope(self, instance); + let span = tcx.def_span(def_id); + let loc = self.lookup_debug_loc(span.lo()); + let file_metadata = file_metadata(self, &loc.file); +@@ -378,8 +378,29 @@ fn dbg_scope_fn( + } + } + +- unsafe { +- return llvm::LLVMRustDIBuilderCreateFunction( ++ // When we're adding a method to a type DIE, we only want a DW_AT_declaration there, because ++ // LLVM LTO can't unify type definitions when a child DIE is a full subprogram definition. ++ // When we use this `decl` below, the subprogram definition gets created at the CU level ++ // with a DW_AT_specification pointing back to the type's declaration. ++ let decl = is_method.then(|| unsafe { ++ llvm::LLVMRustDIBuilderCreateMethod( ++ DIB(self), ++ containing_scope, ++ name.as_ptr().cast(), ++ name.len(), ++ linkage_name.as_ptr().cast(), ++ linkage_name.len(), ++ file_metadata, ++ loc.line, ++ function_type_metadata, ++ flags, ++ spflags & !DISPFlags::SPFlagDefinition, ++ template_parameters, ++ ) ++ }); ++ ++ return unsafe { ++ llvm::LLVMRustDIBuilderCreateFunction( + DIB(self), + containing_scope, + name.as_ptr().cast(), +@@ -394,9 +415,9 @@ fn dbg_scope_fn( + spflags, + maybe_definition_llfn, + template_parameters, +- None, +- ); +- } ++ decl, ++ ) ++ }; + + fn get_function_signature<'ll, 'tcx>( + cx: &CodegenCx<'ll, 'tcx>, +@@ -495,14 +516,16 @@ fn get_parameter_names(cx: &CodegenCx<'_, '_>, generics: &ty::Generics) -> Vec( + cx: &CodegenCx<'ll, 'tcx>, + instance: Instance<'tcx>, +- ) -> &'ll DIScope { ++ ) -> (&'ll DIScope, bool) { + // First, let's see if this is a method within an inherent impl. Because + // if yes, we want to make the result subroutine DIE a child of the + // subroutine's self-type. +- let self_type = cx.tcx.impl_of_method(instance.def_id()).and_then(|impl_def_id| { ++ if let Some(impl_def_id) = cx.tcx.impl_of_method(instance.def_id()) { + // If the method does *not* belong to a trait, proceed + if cx.tcx.trait_id_of_impl(impl_def_id).is_none() { + let impl_self_ty = cx.tcx.subst_and_normalize_erasing_regions( +@@ -513,39 +536,34 @@ fn get_containing_scope<'ll, 'tcx>( + + // Only "class" methods are generally understood by LLVM, + // so avoid methods on other types (e.g., `<*mut T>::null`). +- match impl_self_ty.kind() { +- ty::Adt(def, ..) if !def.is_box() => { +- // Again, only create type information if full debuginfo is enabled +- if cx.sess().opts.debuginfo == DebugInfo::Full +- && !impl_self_ty.needs_subst() +- { +- Some(type_di_node(cx, impl_self_ty)) +- } else { +- Some(namespace::item_namespace(cx, def.did())) +- } ++ if let ty::Adt(def, ..) = impl_self_ty.kind() && !def.is_box() { ++ // Again, only create type information if full debuginfo is enabled ++ if cx.sess().opts.debuginfo == DebugInfo::Full ++ && !impl_self_ty.needs_subst() ++ { ++ return (type_di_node(cx, impl_self_ty), true); ++ } else { ++ return (namespace::item_namespace(cx, def.did()), false); + } +- _ => None, + } + } else { + // For trait method impls we still use the "parallel namespace" + // strategy +- None + } +- }); ++ } + +- self_type.unwrap_or_else(|| { +- namespace::item_namespace( +- cx, +- DefId { +- krate: instance.def_id().krate, +- index: cx +- .tcx +- .def_key(instance.def_id()) +- .parent +- .expect("get_containing_scope: missing parent?"), +- }, +- ) +- }) ++ let scope = namespace::item_namespace( ++ cx, ++ DefId { ++ krate: instance.def_id().krate, ++ index: cx ++ .tcx ++ .def_key(instance.def_id()) ++ .parent ++ .expect("get_containing_scope: missing parent?"), ++ }, ++ ); ++ (scope, false) + } + } + +diff --git a/compiler/rustc_codegen_llvm/src/llvm/ffi.rs b/compiler/rustc_codegen_llvm/src/llvm/ffi.rs +index 253c2ca7c768..9dd6db1929fc 100644 +--- a/compiler/rustc_codegen_llvm/src/llvm/ffi.rs ++++ b/compiler/rustc_codegen_llvm/src/llvm/ffi.rs +@@ -1968,6 +1968,21 @@ pub fn LLVMRustDIBuilderCreateFunction<'a>( + Decl: Option<&'a DIDescriptor>, + ) -> &'a DISubprogram; + ++ pub fn LLVMRustDIBuilderCreateMethod<'a>( ++ Builder: &DIBuilder<'a>, ++ Scope: &'a DIDescriptor, ++ Name: *const c_char, ++ NameLen: size_t, ++ LinkageName: *const c_char, ++ LinkageNameLen: size_t, ++ File: &'a DIFile, ++ LineNo: c_uint, ++ Ty: &'a DIType, ++ Flags: DIFlags, ++ SPFlags: DISPFlags, ++ TParam: &'a DIArray, ++ ) -> &'a DISubprogram; ++ + pub fn LLVMRustDIBuilderCreateBasicType<'a>( + Builder: &DIBuilder<'a>, + Name: *const c_char, +diff --git a/compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp b/compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp +index e3493caaaf74..c4a97af1f0f4 100644 +--- a/compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp ++++ b/compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp +@@ -841,6 +841,28 @@ extern "C" LLVMMetadataRef LLVMRustDIBuilderCreateFunction( + return wrap(Sub); + } + ++extern "C" LLVMMetadataRef LLVMRustDIBuilderCreateMethod( ++ LLVMRustDIBuilderRef Builder, LLVMMetadataRef Scope, ++ const char *Name, size_t NameLen, ++ const char *LinkageName, size_t LinkageNameLen, ++ LLVMMetadataRef File, unsigned LineNo, ++ LLVMMetadataRef Ty, LLVMRustDIFlags Flags, ++ LLVMRustDISPFlags SPFlags, LLVMMetadataRef TParam) { ++ DITemplateParameterArray TParams = ++ DITemplateParameterArray(unwrap(TParam)); ++ DISubprogram::DISPFlags llvmSPFlags = fromRust(SPFlags); ++ DINode::DIFlags llvmFlags = fromRust(Flags); ++ DISubprogram *Sub = Builder->createMethod( ++ unwrapDI(Scope), ++ StringRef(Name, NameLen), ++ StringRef(LinkageName, LinkageNameLen), ++ unwrapDI(File), LineNo, ++ unwrapDI(Ty), ++ 0, 0, nullptr, // VTable params aren't used ++ llvmFlags, llvmSPFlags, TParams); ++ return wrap(Sub); ++} ++ + extern "C" LLVMMetadataRef LLVMRustDIBuilderCreateBasicType( + LLVMRustDIBuilderRef Builder, const char *Name, size_t NameLen, + uint64_t SizeInBits, unsigned Encoding) { +diff --git a/tests/run-make-fulldeps/issue-109934-lto-debuginfo/Makefile b/tests/run-make-fulldeps/issue-109934-lto-debuginfo/Makefile +new file mode 100644 +index 000000000000..3b7a99d3dbc6 +--- /dev/null ++++ b/tests/run-make-fulldeps/issue-109934-lto-debuginfo/Makefile +@@ -0,0 +1,12 @@ ++# ignore-cross-compile ++include ../tools.mk ++ ++# With the upgrade to LLVM 16, this was getting: ++# ++# error: Cannot represent a difference across sections ++# ++# The error stemmed from DI function definitions under type scopes, fixed by ++# only declaring in type scope and defining the subprogram elsewhere. ++ ++all: ++ $(RUSTC) lib.rs --test -C lto=fat -C debuginfo=2 -C incremental=$(TMPDIR)/inc-fat +diff --git a/tests/run-make-fulldeps/issue-109934-lto-debuginfo/lib.rs b/tests/run-make-fulldeps/issue-109934-lto-debuginfo/lib.rs +new file mode 100644 +index 000000000000..c405928bd182 +--- /dev/null ++++ b/tests/run-make-fulldeps/issue-109934-lto-debuginfo/lib.rs +@@ -0,0 +1,9 @@ ++extern crate alloc; ++ ++#[cfg(test)] ++mod tests { ++ #[test] ++ fn something_alloc() { ++ assert_eq!(Vec::::new(), Vec::::new()); ++ } ++} +-- +2.40.1 + diff --git a/rust.spec b/rust.spec index cf35d33..b9f2455 100644 --- a/rust.spec +++ b/rust.spec @@ -85,7 +85,7 @@ Name: rust Version: 1.69.0 -Release: 2%{?dist} +Release: 3%{?dist} Summary: The Rust Programming Language License: (ASL 2.0 or MIT) and (BSD and MIT) # ^ written as: (rust itself) and (bundled libraries) @@ -107,6 +107,9 @@ Patch1: 0001-Use-lld-provided-by-system-for-wasm.patch # Set a substitute-path in rust-gdb for standard library sources. Patch2: rustc-1.61.0-rust-gdb-substitute-path.patch +# https://github.com/rust-lang/rust/pull/111167 +Patch3: 0001-debuginfo-split-method-declaration-and-definition.patch + ### RHEL-specific patches below ### # Simple rpm macros for rust-toolset (as opposed to full rust-packaging) @@ -222,12 +225,6 @@ BuildRequires: ninja-build Provides: bundled(llvm) = %{bundled_llvm_version} %else BuildRequires: cmake >= 2.8.11 -# LLVM 16 is breaking firefox with "error: Cannot represent a difference across sections" -# https://bugzilla.redhat.com/show_bug.cgi?id=2189964 -# https://github.com/llvm/llvm-project/issues/61932 -%if 0%{?fedora} >= 38 -%global llvm llvm15 -%endif %if 0%{?epel} == 7 %global llvm llvm14 %endif @@ -586,6 +583,7 @@ test -f '%{local_rust_root}/bin/rustc' %patch -P1 -p1 %patch -P2 -p1 +%patch -P3 -p1 %if %with disabled_libssh2 %patch -P100 -p1 @@ -1059,6 +1057,9 @@ end} %changelog +* Fri May 05 2023 Josh Stone - 1.69.0-3 +- Fix debuginfo with LLVM 16 + * Mon May 01 2023 Josh Stone - 1.69.0-2 - Build with LLVM 15 on Fedora 38+ From 8745dbe4c6ca56ccf4e98fe7e13c757770b0656b Mon Sep 17 00:00:00 2001 From: Jesus Checa Hidalgo Date: Thu, 4 May 2023 17:13:51 +0200 Subject: [PATCH 3/5] Add rpminspect.yaml config file Added suppresion for reduced debuginfo in i386 builds. --- rpminspect.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 rpminspect.yaml diff --git a/rpminspect.yaml b/rpminspect.yaml new file mode 100644 index 0000000..15b680b --- /dev/null +++ b/rpminspect.yaml @@ -0,0 +1,8 @@ +--- +debuginfo: + ignore: + # i686 has limited debuginfo. From rust.spec + # full debuginfo is exhausting memory; just do libstd for now + # https://github.com/rust-lang/rust/issues/45854 + - /usr/lib/debug/usr/bin/rustc-*.i386.debug + From ff66501ce917bd1c3a0e05935bed1ac615f6fd59 Mon Sep 17 00:00:00 2001 From: Josh Stone Date: Tue, 9 May 2023 20:02:43 -0700 Subject: [PATCH 4/5] Apply set_build_flags on rhel --- rust.spec | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/rust.spec b/rust.spec index b9f2455..3f23180 100644 --- a/rust.spec +++ b/rust.spec @@ -787,6 +787,9 @@ for triple in %{?mingw_targets} %{?wasm_targets}; do done %install +%if 0%{?rhel} && 0%{?rhel} <= 9 +%{?set_build_flags} +%endif %{export_rust_env} DESTDIR=%{buildroot} %{__python3} ./x.py install @@ -874,6 +877,9 @@ rm -f %{buildroot}%{rustlibdir}/%{rust_triple}/bin/rust-ll* %check +%if 0%{?rhel} && 0%{?rhel} <= 9 +%{?set_build_flags} +%endif %{export_rust_env} # Sanity-check the installed binaries, debuginfo-stripped and all. From 6fff218b1962d9a7a85ca61b3c9fbcc9a54dba4f Mon Sep 17 00:00:00 2001 From: Josh Stone Date: Thu, 1 Jun 2023 12:46:43 -0700 Subject: [PATCH 5/5] Update to 1.70.0. --- .gitignore | 2 + ...it-method-declaration-and-definition.patch | 254 ------------------ rust.spec | 65 ++--- rustc-1.61.0-rust-gdb-substitute-path.patch | 18 -- rustc-1.65.0-no-default-pie.patch | 43 --- ....patch => rustc-1.70.0-disable-http2.patch | 42 +-- ...atch => rustc-1.70.0-disable-libssh2.patch | 18 +- rustc-1.70.0-rust-gdb-substitute-path.patch | 21 ++ sources | 4 +- 9 files changed, 82 insertions(+), 385 deletions(-) delete mode 100644 0001-debuginfo-split-method-declaration-and-definition.patch delete mode 100644 rustc-1.61.0-rust-gdb-substitute-path.patch delete mode 100644 rustc-1.65.0-no-default-pie.patch rename rustc-1.69.0-disable-http2.patch => rustc-1.70.0-disable-http2.patch (70%) rename rustc-1.65.0-disable-libssh2.patch => rustc-1.70.0-disable-libssh2.patch (55%) create mode 100644 rustc-1.70.0-rust-gdb-substitute-path.patch diff --git a/.gitignore b/.gitignore index 0b1ecb7..51331ef 100644 --- a/.gitignore +++ b/.gitignore @@ -418,3 +418,5 @@ /rustc-1.68.2-src.tar.xz /rustc-1.69.0-src.tar.xz /wasi-libc-1dfe5c302d1c5ab621f7abf04620fae92700fd22.tar.gz +/rustc-1.70.0-src.tar.xz +/wasi-libc-wasi-sdk-20.tar.gz diff --git a/0001-debuginfo-split-method-declaration-and-definition.patch b/0001-debuginfo-split-method-declaration-and-definition.patch deleted file mode 100644 index 03a4937..0000000 --- a/0001-debuginfo-split-method-declaration-and-definition.patch +++ /dev/null @@ -1,254 +0,0 @@ -From 1476ebe761884e0cfc92f3f16809011663eb33f0 Mon Sep 17 00:00:00 2001 -From: Josh Stone -Date: Wed, 3 May 2023 15:52:31 -0700 -Subject: [PATCH] debuginfo: split method declaration and definition - -When we're adding a method to a type DIE, we only want a DW_AT_declaration -there, because LLVM LTO can't unify type definitions when a child DIE is a -full subprogram definition. Now the subprogram definition gets added at the -CU level with a specification link back to the abstract declaration. - -(cherry picked from commit 10b69dde3fd15334ea2382d2dc9e9a261de1afaf) ---- - .../rustc_codegen_llvm/src/debuginfo/mod.rs | 86 +++++++++++-------- - compiler/rustc_codegen_llvm/src/llvm/ffi.rs | 15 ++++ - .../rustc_llvm/llvm-wrapper/RustWrapper.cpp | 22 +++++ - .../issue-109934-lto-debuginfo/Makefile | 12 +++ - .../issue-109934-lto-debuginfo/lib.rs | 9 ++ - 5 files changed, 110 insertions(+), 34 deletions(-) - create mode 100644 tests/run-make-fulldeps/issue-109934-lto-debuginfo/Makefile - create mode 100644 tests/run-make-fulldeps/issue-109934-lto-debuginfo/lib.rs - -diff --git a/compiler/rustc_codegen_llvm/src/debuginfo/mod.rs b/compiler/rustc_codegen_llvm/src/debuginfo/mod.rs -index 5392534cfcb7..11426b150b6c 100644 ---- a/compiler/rustc_codegen_llvm/src/debuginfo/mod.rs -+++ b/compiler/rustc_codegen_llvm/src/debuginfo/mod.rs -@@ -322,7 +322,7 @@ fn dbg_scope_fn( - let tcx = self.tcx; - - let def_id = instance.def_id(); -- let containing_scope = get_containing_scope(self, instance); -+ let (containing_scope, is_method) = get_containing_scope(self, instance); - let span = tcx.def_span(def_id); - let loc = self.lookup_debug_loc(span.lo()); - let file_metadata = file_metadata(self, &loc.file); -@@ -378,8 +378,29 @@ fn dbg_scope_fn( - } - } - -- unsafe { -- return llvm::LLVMRustDIBuilderCreateFunction( -+ // When we're adding a method to a type DIE, we only want a DW_AT_declaration there, because -+ // LLVM LTO can't unify type definitions when a child DIE is a full subprogram definition. -+ // When we use this `decl` below, the subprogram definition gets created at the CU level -+ // with a DW_AT_specification pointing back to the type's declaration. -+ let decl = is_method.then(|| unsafe { -+ llvm::LLVMRustDIBuilderCreateMethod( -+ DIB(self), -+ containing_scope, -+ name.as_ptr().cast(), -+ name.len(), -+ linkage_name.as_ptr().cast(), -+ linkage_name.len(), -+ file_metadata, -+ loc.line, -+ function_type_metadata, -+ flags, -+ spflags & !DISPFlags::SPFlagDefinition, -+ template_parameters, -+ ) -+ }); -+ -+ return unsafe { -+ llvm::LLVMRustDIBuilderCreateFunction( - DIB(self), - containing_scope, - name.as_ptr().cast(), -@@ -394,9 +415,9 @@ fn dbg_scope_fn( - spflags, - maybe_definition_llfn, - template_parameters, -- None, -- ); -- } -+ decl, -+ ) -+ }; - - fn get_function_signature<'ll, 'tcx>( - cx: &CodegenCx<'ll, 'tcx>, -@@ -495,14 +516,16 @@ fn get_parameter_names(cx: &CodegenCx<'_, '_>, generics: &ty::Generics) -> Vec( - cx: &CodegenCx<'ll, 'tcx>, - instance: Instance<'tcx>, -- ) -> &'ll DIScope { -+ ) -> (&'ll DIScope, bool) { - // First, let's see if this is a method within an inherent impl. Because - // if yes, we want to make the result subroutine DIE a child of the - // subroutine's self-type. -- let self_type = cx.tcx.impl_of_method(instance.def_id()).and_then(|impl_def_id| { -+ if let Some(impl_def_id) = cx.tcx.impl_of_method(instance.def_id()) { - // If the method does *not* belong to a trait, proceed - if cx.tcx.trait_id_of_impl(impl_def_id).is_none() { - let impl_self_ty = cx.tcx.subst_and_normalize_erasing_regions( -@@ -513,39 +536,34 @@ fn get_containing_scope<'ll, 'tcx>( - - // Only "class" methods are generally understood by LLVM, - // so avoid methods on other types (e.g., `<*mut T>::null`). -- match impl_self_ty.kind() { -- ty::Adt(def, ..) if !def.is_box() => { -- // Again, only create type information if full debuginfo is enabled -- if cx.sess().opts.debuginfo == DebugInfo::Full -- && !impl_self_ty.needs_subst() -- { -- Some(type_di_node(cx, impl_self_ty)) -- } else { -- Some(namespace::item_namespace(cx, def.did())) -- } -+ if let ty::Adt(def, ..) = impl_self_ty.kind() && !def.is_box() { -+ // Again, only create type information if full debuginfo is enabled -+ if cx.sess().opts.debuginfo == DebugInfo::Full -+ && !impl_self_ty.needs_subst() -+ { -+ return (type_di_node(cx, impl_self_ty), true); -+ } else { -+ return (namespace::item_namespace(cx, def.did()), false); - } -- _ => None, - } - } else { - // For trait method impls we still use the "parallel namespace" - // strategy -- None - } -- }); -+ } - -- self_type.unwrap_or_else(|| { -- namespace::item_namespace( -- cx, -- DefId { -- krate: instance.def_id().krate, -- index: cx -- .tcx -- .def_key(instance.def_id()) -- .parent -- .expect("get_containing_scope: missing parent?"), -- }, -- ) -- }) -+ let scope = namespace::item_namespace( -+ cx, -+ DefId { -+ krate: instance.def_id().krate, -+ index: cx -+ .tcx -+ .def_key(instance.def_id()) -+ .parent -+ .expect("get_containing_scope: missing parent?"), -+ }, -+ ); -+ (scope, false) - } - } - -diff --git a/compiler/rustc_codegen_llvm/src/llvm/ffi.rs b/compiler/rustc_codegen_llvm/src/llvm/ffi.rs -index 253c2ca7c768..9dd6db1929fc 100644 ---- a/compiler/rustc_codegen_llvm/src/llvm/ffi.rs -+++ b/compiler/rustc_codegen_llvm/src/llvm/ffi.rs -@@ -1968,6 +1968,21 @@ pub fn LLVMRustDIBuilderCreateFunction<'a>( - Decl: Option<&'a DIDescriptor>, - ) -> &'a DISubprogram; - -+ pub fn LLVMRustDIBuilderCreateMethod<'a>( -+ Builder: &DIBuilder<'a>, -+ Scope: &'a DIDescriptor, -+ Name: *const c_char, -+ NameLen: size_t, -+ LinkageName: *const c_char, -+ LinkageNameLen: size_t, -+ File: &'a DIFile, -+ LineNo: c_uint, -+ Ty: &'a DIType, -+ Flags: DIFlags, -+ SPFlags: DISPFlags, -+ TParam: &'a DIArray, -+ ) -> &'a DISubprogram; -+ - pub fn LLVMRustDIBuilderCreateBasicType<'a>( - Builder: &DIBuilder<'a>, - Name: *const c_char, -diff --git a/compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp b/compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp -index e3493caaaf74..c4a97af1f0f4 100644 ---- a/compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp -+++ b/compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp -@@ -841,6 +841,28 @@ extern "C" LLVMMetadataRef LLVMRustDIBuilderCreateFunction( - return wrap(Sub); - } - -+extern "C" LLVMMetadataRef LLVMRustDIBuilderCreateMethod( -+ LLVMRustDIBuilderRef Builder, LLVMMetadataRef Scope, -+ const char *Name, size_t NameLen, -+ const char *LinkageName, size_t LinkageNameLen, -+ LLVMMetadataRef File, unsigned LineNo, -+ LLVMMetadataRef Ty, LLVMRustDIFlags Flags, -+ LLVMRustDISPFlags SPFlags, LLVMMetadataRef TParam) { -+ DITemplateParameterArray TParams = -+ DITemplateParameterArray(unwrap(TParam)); -+ DISubprogram::DISPFlags llvmSPFlags = fromRust(SPFlags); -+ DINode::DIFlags llvmFlags = fromRust(Flags); -+ DISubprogram *Sub = Builder->createMethod( -+ unwrapDI(Scope), -+ StringRef(Name, NameLen), -+ StringRef(LinkageName, LinkageNameLen), -+ unwrapDI(File), LineNo, -+ unwrapDI(Ty), -+ 0, 0, nullptr, // VTable params aren't used -+ llvmFlags, llvmSPFlags, TParams); -+ return wrap(Sub); -+} -+ - extern "C" LLVMMetadataRef LLVMRustDIBuilderCreateBasicType( - LLVMRustDIBuilderRef Builder, const char *Name, size_t NameLen, - uint64_t SizeInBits, unsigned Encoding) { -diff --git a/tests/run-make-fulldeps/issue-109934-lto-debuginfo/Makefile b/tests/run-make-fulldeps/issue-109934-lto-debuginfo/Makefile -new file mode 100644 -index 000000000000..3b7a99d3dbc6 ---- /dev/null -+++ b/tests/run-make-fulldeps/issue-109934-lto-debuginfo/Makefile -@@ -0,0 +1,12 @@ -+# ignore-cross-compile -+include ../tools.mk -+ -+# With the upgrade to LLVM 16, this was getting: -+# -+# error: Cannot represent a difference across sections -+# -+# The error stemmed from DI function definitions under type scopes, fixed by -+# only declaring in type scope and defining the subprogram elsewhere. -+ -+all: -+ $(RUSTC) lib.rs --test -C lto=fat -C debuginfo=2 -C incremental=$(TMPDIR)/inc-fat -diff --git a/tests/run-make-fulldeps/issue-109934-lto-debuginfo/lib.rs b/tests/run-make-fulldeps/issue-109934-lto-debuginfo/lib.rs -new file mode 100644 -index 000000000000..c405928bd182 ---- /dev/null -+++ b/tests/run-make-fulldeps/issue-109934-lto-debuginfo/lib.rs -@@ -0,0 +1,9 @@ -+extern crate alloc; -+ -+#[cfg(test)] -+mod tests { -+ #[test] -+ fn something_alloc() { -+ assert_eq!(Vec::::new(), Vec::::new()); -+ } -+} --- -2.40.1 - diff --git a/rust.spec b/rust.spec index 3f23180..f029807 100644 --- a/rust.spec +++ b/rust.spec @@ -8,9 +8,9 @@ # To bootstrap from scratch, set the channel and date from src/stage0.json # e.g. 1.59.0 wants rustc: 1.58.0-2022-01-13 # or nightly wants some beta-YYYY-MM-DD -%global bootstrap_version 1.68.2 -%global bootstrap_channel 1.68.2 -%global bootstrap_date 2023-03-28 +%global bootstrap_version 1.69.0 +%global bootstrap_channel 1.69.0 +%global bootstrap_date 2023-04-20 # Only the specified arches will use bootstrap binaries. # NOTE: Those binaries used to be uploaded with every new release, but that was @@ -35,8 +35,7 @@ # src/ci/docker/host-x86_64/dist-various-2/build-wasi-toolchain.sh # (updated per https://github.com/rust-lang/rust/pull/96907) %global wasi_libc_url https://github.com/WebAssembly/wasi-libc -#global wasi_libc_ref wasi-sdk-20 -%global wasi_libc_ref 1dfe5c302d1c5ab621f7abf04620fae92700fd22 +%global wasi_libc_ref wasi-sdk-20 %global wasi_libc_name wasi-libc-%{wasi_libc_ref} %global wasi_libc_source %{wasi_libc_url}/archive/%{wasi_libc_ref}/%{wasi_libc_name}.tar.gz %global wasi_libc_dir %{_builddir}/%{wasi_libc_name} @@ -47,14 +46,14 @@ # We can also choose to just use Rust's bundled LLVM, in case the system LLVM # is insufficient. Rust currently requires LLVM 14.0+. %global min_llvm_version 14.0.0 -%global bundled_llvm_version 15.0.7 +%global bundled_llvm_version 16.0.2 %bcond_with bundled_llvm -# Requires stable libgit2 1.5, and not the next minor soname change. +# Requires stable libgit2 1.6, and not the next minor soname change. # This needs to be consistent with the bindings in vendor/libgit2-sys. -%global min_libgit2_version 1.5.0 -%global next_libgit2_version 1.6.0~ -%global bundled_libgit2_version 1.5.0 +%global min_libgit2_version 1.6.0 +%global next_libgit2_version 1.7.0~ +%global bundled_libgit2_version 1.6.3 %if 0%{?fedora} >= 38 %bcond_with bundled_libgit2 %else @@ -84,8 +83,8 @@ %endif Name: rust -Version: 1.69.0 -Release: 3%{?dist} +Version: 1.70.0 +Release: 1%{?dist} Summary: The Rust Programming Language License: (ASL 2.0 or MIT) and (BSD and MIT) # ^ written as: (rust itself) and (bundled libraries) @@ -105,10 +104,7 @@ Source1: %{wasi_libc_source} Patch1: 0001-Use-lld-provided-by-system-for-wasm.patch # Set a substitute-path in rust-gdb for standard library sources. -Patch2: rustc-1.61.0-rust-gdb-substitute-path.patch - -# https://github.com/rust-lang/rust/pull/111167 -Patch3: 0001-debuginfo-split-method-declaration-and-definition.patch +Patch2: rustc-1.70.0-rust-gdb-substitute-path.patch ### RHEL-specific patches below ### @@ -116,16 +112,11 @@ Patch3: 0001-debuginfo-split-method-declaration-and-definition.patch Source100: macros.rust-toolset # Disable cargo->libgit2->libssh2 on RHEL, as it's not approved for FIPS (rhbz1732949) -Patch100: rustc-1.65.0-disable-libssh2.patch +Patch100: rustc-1.70.0-disable-libssh2.patch # libcurl on RHEL7 doesn't have http2, but since cargo requests it, curl-sys # will try to build it statically -- instead we turn off the feature. -Patch101: rustc-1.69.0-disable-http2.patch - -# kernel rh1410097 causes too-small stacks for PIE. -# (affects RHEL6 kernels when building for RHEL7) -Patch102: rustc-1.65.0-no-default-pie.patch - +Patch101: rustc-1.70.0-disable-http2.patch # Get the Rust triple for any arch. %{lua: function rust_triple(arch) @@ -583,7 +574,6 @@ test -f '%{local_rust_root}/bin/rustc' %patch -P1 -p1 %patch -P2 -p1 -%patch -P3 -p1 %if %with disabled_libssh2 %patch -P100 -p1 @@ -591,11 +581,7 @@ test -f '%{local_rust_root}/bin/rustc' %if %without curl_http2 %patch -P101 -p1 -rm -rf vendor/libnghttp2-sys/ -%endif - -%if 0%{?rhel} && 0%{?rhel} < 8 -%patch -P102 -p1 +rm -rf vendor/libnghttp2-sys*/ %endif # Use our explicit python3 first @@ -610,21 +596,21 @@ mkdir -p src/llvm-project/libunwind/ %endif # Remove other unused vendored libraries -rm -rf vendor/curl-sys/curl/ +rm -rf vendor/curl-sys*/curl/ rm -rf vendor/*jemalloc-sys*/jemalloc/ -rm -rf vendor/libmimalloc-sys/c_src/mimalloc/ -rm -rf vendor/libssh2-sys/libssh2/ -rm -rf vendor/libz-sys/src/zlib/ -rm -rf vendor/libz-sys/src/zlib-ng/ -rm -rf vendor/lzma-sys/xz-*/ -rm -rf vendor/openssl-src/openssl/ +rm -rf vendor/libffi-sys*/libffi/ +rm -rf vendor/libmimalloc-sys*/c_src/mimalloc/ +rm -rf vendor/libssh2-sys*/libssh2/ +rm -rf vendor/libz-sys*/src/zlib{,-ng}/ +rm -rf vendor/lzma-sys*/xz-*/ +rm -rf vendor/openssl-src*/openssl/ %if %without bundled_libgit2 -rm -rf vendor/libgit2-sys/libgit2/ +rm -rf vendor/libgit2-sys*/libgit2/ %endif %if %with disabled_libssh2 -rm -rf vendor/libssh2-sys/ +rm -rf vendor/libssh2-sys*/ %endif # This only affects the transient rust-installer, but let it use our dynamic xz-libs @@ -1063,6 +1049,9 @@ end} %changelog +* Thu Jun 01 2023 Josh Stone - 1.70.0-1 +- Update to 1.70.0. + * Fri May 05 2023 Josh Stone - 1.69.0-3 - Fix debuginfo with LLVM 16 diff --git a/rustc-1.61.0-rust-gdb-substitute-path.patch b/rustc-1.61.0-rust-gdb-substitute-path.patch deleted file mode 100644 index b94e23e..0000000 --- a/rustc-1.61.0-rust-gdb-substitute-path.patch +++ /dev/null @@ -1,18 +0,0 @@ ---- rustc-1.61.0-src/src/etc/rust-gdb.orig 2022-05-17 18:29:36.000000000 -0700 -+++ rustc-1.61.0-src/src/etc/rust-gdb 2022-05-18 11:18:13.732709661 -0700 -@@ -14,6 +14,9 @@ fi - RUSTC_SYSROOT="$("$RUSTC" --print=sysroot)" - GDB_PYTHON_MODULE_DIRECTORY="$RUSTC_SYSROOT/lib/rustlib/etc" - -+RUST_STD_BUILD="@BUILDDIR@/library/" -+RUST_STD_SRC="$RUSTC_SYSROOT/lib/rustlib/src/rust/library/" -+ - # Run GDB with the additional arguments that load the pretty printers - # Set the environment variable `RUST_GDB` to overwrite the call to a - # different/specific command (defaults to `gdb`). -@@ -21,4 +24,5 @@ RUST_GDB="${RUST_GDB:-gdb}" - PYTHONPATH="$PYTHONPATH:$GDB_PYTHON_MODULE_DIRECTORY" exec ${RUST_GDB} \ - --directory="$GDB_PYTHON_MODULE_DIRECTORY" \ - -iex "add-auto-load-safe-path $GDB_PYTHON_MODULE_DIRECTORY" \ -+ -iex "set substitute-path $RUST_STD_BUILD $RUST_STD_SRC" \ - "$@" diff --git a/rustc-1.65.0-no-default-pie.patch b/rustc-1.65.0-no-default-pie.patch deleted file mode 100644 index 2a69611..0000000 --- a/rustc-1.65.0-no-default-pie.patch +++ /dev/null @@ -1,43 +0,0 @@ ---- rustc-beta-src/compiler/rustc_codegen_ssa/src/back/link.rs.orig 2022-09-24 10:20:14.000000000 -0700 -+++ rustc-beta-src/compiler/rustc_codegen_ssa/src/back/link.rs 2022-10-05 11:24:21.759564185 -0700 -@@ -755,7 +755,7 @@ - && cmd.get_args().iter().any(|e| e.to_string_lossy() == "-no-pie") - { - info!("linker output: {:?}", out); -- warn!("Linker does not support -no-pie command line option. Retrying without."); -+ info!("Linker does not support -no-pie command line option. Retrying without."); - for arg in cmd.take_args() { - if arg.to_string_lossy() != "-no-pie" { - cmd.arg(arg); -@@ -774,7 +774,7 @@ - && cmd.get_args().iter().any(|e| e.to_string_lossy() == "-static-pie") - { - info!("linker output: {:?}", out); -- warn!( -+ info!( - "Linker does not support -static-pie command line option. Retrying with -static instead." - ); - // Mirror `add_(pre,post)_link_objects` to replace CRT objects. -@@ -1520,15 +1520,15 @@ - } - - fn link_output_kind(sess: &Session, crate_type: CrateType) -> LinkOutputKind { -- let kind = match (crate_type, sess.crt_static(Some(crate_type)), sess.relocation_model()) { -+ // Only use PIE if explicitly specified. -+ #[allow(rustc::bad_opt_access)] -+ let explicit_pic = -+ matches!(sess.opts.cg.relocation_model, Some(RelocModel::Pic | RelocModel::Pie)); -+ let kind = match (crate_type, sess.crt_static(Some(crate_type)), explicit_pic) { - (CrateType::Executable, _, _) if sess.is_wasi_reactor() => LinkOutputKind::WasiReactorExe, -- (CrateType::Executable, false, RelocModel::Pic | RelocModel::Pie) => { -- LinkOutputKind::DynamicPicExe -- } -+ (CrateType::Executable, false, true) => LinkOutputKind::DynamicPicExe, - (CrateType::Executable, false, _) => LinkOutputKind::DynamicNoPicExe, -- (CrateType::Executable, true, RelocModel::Pic | RelocModel::Pie) => { -- LinkOutputKind::StaticPicExe -- } -+ (CrateType::Executable, true, true) => LinkOutputKind::StaticPicExe, - (CrateType::Executable, true, _) => LinkOutputKind::StaticNoPicExe, - (_, true, _) => LinkOutputKind::StaticDylib, - (_, false, _) => LinkOutputKind::DynamicDylib, diff --git a/rustc-1.69.0-disable-http2.patch b/rustc-1.70.0-disable-http2.patch similarity index 70% rename from rustc-1.69.0-disable-http2.patch rename to rustc-1.70.0-disable-http2.patch index 09e7930..0e779b3 100644 --- a/rustc-1.69.0-disable-http2.patch +++ b/rustc-1.70.0-disable-http2.patch @@ -1,6 +1,6 @@ ---- rustc-beta-src/Cargo.lock.orig 2023-03-23 17:10:30.810989345 -0700 -+++ rustc-beta-src/Cargo.lock 2023-03-23 17:10:30.812989303 -0700 -@@ -1142,7 +1142,6 @@ +--- rustc-beta-src/Cargo.lock.orig 2023-05-24 16:49:05.242510531 -0700 ++++ rustc-beta-src/Cargo.lock 2023-05-24 16:51:11.741865603 -0700 +@@ -1197,7 +1197,6 @@ checksum = "14d05c10f541ae6f3bc5b3d923c2 dependencies = [ "cc", "libc", @@ -8,7 +8,7 @@ "libz-sys", "openssl-sys", "pkg-config", -@@ -2375,16 +2374,6 @@ +@@ -2989,16 +2988,6 @@ source = "registry+https://github.com/ru checksum = "7fc7aa29613bd6a620df431842069224d8bc9011086b1db4c0e0cd47fa03ec9a" [[package]] @@ -25,20 +25,20 @@ name = "libz-sys" version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" ---- rustc-beta-src/src/tools/cargo/Cargo.toml.orig 2023-03-23 17:10:30.812989303 -0700 -+++ rustc-beta-src/src/tools/cargo/Cargo.toml 2023-03-23 17:11:26.242836664 -0700 -@@ -23,7 +23,7 @@ - cargo-util = { path = "crates/cargo-util", version = "0.2.3" } - clap = "4.1.3" +--- rustc-beta-src/src/tools/cargo/Cargo.toml.orig 2023-05-24 16:49:05.244510489 -0700 ++++ rustc-beta-src/src/tools/cargo/Cargo.toml 2023-05-24 16:51:04.683013189 -0700 +@@ -23,7 +23,7 @@ cargo-platform = { path = "crates/cargo- + cargo-util = { path = "crates/cargo-util", version = "0.2.4" } + clap = "4.2.0" crates-io = { path = "crates/crates-io", version = "0.36.0" } -curl = { version = "0.4.44", features = ["http2"] } +curl = { version = "0.4.44", features = [] } - curl-sys = "0.4.59" + curl-sys = "0.4.61" env_logger = "0.10.0" filetime = "0.2.9" ---- rustc-beta-src/src/tools/cargo/src/cargo/core/package.rs.orig 2023-03-19 00:20:55.000000000 -0700 -+++ rustc-beta-src/src/tools/cargo/src/cargo/core/package.rs 2023-03-23 17:10:30.812989303 -0700 -@@ -401,16 +401,9 @@ +--- rustc-beta-src/src/tools/cargo/src/cargo/core/package.rs.orig 2023-05-19 19:05:42.000000000 -0700 ++++ rustc-beta-src/src/tools/cargo/src/cargo/core/package.rs 2023-05-24 16:49:05.244510489 -0700 +@@ -407,16 +407,9 @@ impl<'cfg> PackageSet<'cfg> { sources: SourceMap<'cfg>, config: &'cfg Config, ) -> CargoResult> { @@ -58,9 +58,9 @@ Ok(PackageSet { packages: package_ids ---- rustc-beta-src/src/tools/cargo/src/cargo/sources/registry/http_remote.rs.orig 2023-03-19 00:20:55.000000000 -0700 -+++ rustc-beta-src/src/tools/cargo/src/cargo/sources/registry/http_remote.rs 2023-03-23 17:10:30.813989282 -0700 -@@ -220,16 +220,8 @@ +--- rustc-beta-src/src/tools/cargo/src/cargo/sources/registry/http_remote.rs.orig 2023-05-24 16:49:05.245510468 -0700 ++++ rustc-beta-src/src/tools/cargo/src/cargo/sources/registry/http_remote.rs 2023-05-24 16:51:57.916900146 -0700 +@@ -229,16 +229,8 @@ impl<'cfg> HttpRegistry<'cfg> { } self.fetch_started = true; @@ -77,11 +77,11 @@ + // Multiplexing is disabled because the system libcurl doesn't support it. + self.multiplexing = false; - self.config - .shell() ---- rustc-beta-src/src/tools/cargo/src/cargo/util/network.rs.orig 2023-03-19 00:20:55.000000000 -0700 -+++ rustc-beta-src/src/tools/cargo/src/cargo/util/network.rs 2023-03-23 17:10:30.813989282 -0700 -@@ -116,7 +116,7 @@ + if !self.quiet { + self.config +--- rustc-beta-src/src/tools/cargo/src/cargo/util/network/mod.rs.orig 2023-05-19 19:05:42.000000000 -0700 ++++ rustc-beta-src/src/tools/cargo/src/cargo/util/network/mod.rs 2023-05-24 16:49:05.245510468 -0700 +@@ -25,7 +25,7 @@ impl PollExt for Poll { macro_rules! try_old_curl { ($e:expr, $msg:expr) => { let result = $e; diff --git a/rustc-1.65.0-disable-libssh2.patch b/rustc-1.70.0-disable-libssh2.patch similarity index 55% rename from rustc-1.65.0-disable-libssh2.patch rename to rustc-1.70.0-disable-libssh2.patch index 24be1f3..f9202b4 100644 --- a/rustc-1.65.0-disable-libssh2.patch +++ b/rustc-1.70.0-disable-libssh2.patch @@ -1,6 +1,6 @@ ---- rustc-beta-src/Cargo.lock.orig 2022-09-24 10:20:14.000000000 -0700 -+++ rustc-beta-src/Cargo.lock 2022-10-04 10:26:35.490270607 -0700 -@@ -1971,7 +1971,6 @@ +--- rustc-beta-src/Cargo.lock.orig 2023-05-19 19:02:31.000000000 -0700 ++++ rustc-beta-src/Cargo.lock 2023-05-24 16:36:33.312232441 -0700 +@@ -2967,7 +2967,6 @@ dependencies = [ "cc", "libc", @@ -8,14 +8,14 @@ "libz-sys", "openssl-sys", "pkg-config", -@@ -2004,20 +2003,6 @@ +@@ -3000,20 +2999,6 @@ ] [[package]] -name = "libssh2-sys" --version = "0.2.23" +-version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "b094a36eb4b8b8c8a7b4b8ae43b2944502be3e59cd87687595cf6b0a71b3f4ca" +-checksum = "2dc8a030b787e2119a731f1951d6a773e2280c660f8ec4b0f5e1505a386e71ee" -dependencies = [ - "cc", - "libc", @@ -29,9 +29,9 @@ name = "libz-sys" version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" ---- rustc-beta-src/vendor/git2/Cargo.toml.orig 2022-10-04 10:26:35.490270607 -0700 -+++ rustc-beta-src/vendor/git2/Cargo.toml 2022-10-04 10:28:14.002187686 -0700 -@@ -58,9 +58,7 @@ +--- rustc-beta-src/vendor/git2/Cargo.toml.orig 2023-05-19 21:16:57.000000000 -0700 ++++ rustc-beta-src/vendor/git2/Cargo.toml 2023-05-24 16:33:42.043813439 -0700 +@@ -55,9 +55,7 @@ [features] default = [ diff --git a/rustc-1.70.0-rust-gdb-substitute-path.patch b/rustc-1.70.0-rust-gdb-substitute-path.patch new file mode 100644 index 0000000..e9e5e2e --- /dev/null +++ b/rustc-1.70.0-rust-gdb-substitute-path.patch @@ -0,0 +1,21 @@ +diff --git a/src/etc/rust-gdb b/src/etc/rust-gdb +index 9abed30ea6f7..e4bf55df3688 100755 +--- a/src/etc/rust-gdb ++++ b/src/etc/rust-gdb +@@ -13,8 +13,6 @@ fi + # Find out where the pretty printer Python module is + RUSTC_SYSROOT="$("$RUSTC" --print=sysroot)" + GDB_PYTHON_MODULE_DIRECTORY="$RUSTC_SYSROOT/lib/rustlib/etc" +-# Get the commit hash for path remapping +-RUSTC_COMMIT_HASH="$("$RUSTC" -vV | sed -n 's/commit-hash: \([a-zA-Z0-9_]*\)/\1/p')" + + # Run GDB with the additional arguments that load the pretty printers + # Set the environment variable `RUST_GDB` to overwrite the call to a +@@ -23,6 +21,6 @@ RUST_GDB="${RUST_GDB:-gdb}" + PYTHONPATH="$PYTHONPATH:$GDB_PYTHON_MODULE_DIRECTORY" exec ${RUST_GDB} \ + --directory="$GDB_PYTHON_MODULE_DIRECTORY" \ + -iex "add-auto-load-safe-path $GDB_PYTHON_MODULE_DIRECTORY" \ +- -iex "set substitute-path /rustc/$RUSTC_COMMIT_HASH $RUSTC_SYSROOT/lib/rustlib/src/rust" \ ++ -iex "set substitute-path @BUILDDIR@ $RUSTC_SYSROOT/lib/rustlib/src/rust" \ + "$@" + diff --git a/sources b/sources index 577db98..eac2d5d 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ -SHA512 (rustc-1.69.0-src.tar.xz) = 724398fc208ec18adbd8ba81a445e23d1001b746990f36b869126be8a45f1cdfa75f5b9cbdd0abbab506f91a56d3736ab247677699ebd69525245558cfc01a60 -SHA512 (wasi-libc-1dfe5c302d1c5ab621f7abf04620fae92700fd22.tar.gz) = 6f813bc7822746c161932de6b84fb965111400a1a38c25dd0981209d588b9ccafe1a5923349110c536f1b7cda707dfa2d0be42c92b2fa6fd89c957eda27bda27 +SHA512 (rustc-1.70.0-src.tar.xz) = 21b35185fdcc35a059ee5ef6dca2b68f5f1d199e97f425a571cfc318a852c36a57bccf68e7673b4cb7cd83128f30d0b3eb93009a978f3ba3909b7eee50d40631 +SHA512 (wasi-libc-wasi-sdk-20.tar.gz) = e264240dc7dbcf6398c8ca09bc108298f4a8aa955af22de5a3015fbcde81cb09dd83cd48349090082d5de0e8a3dbcf746c7b14657c67657b3f2f1ab28bb9cf05