Fix compiletest with newer (local-rebuild) libtest

Fix ARM EHABI unwinding
This commit is contained in:
Josh Stone 2020-01-08 09:02:41 -08:00
parent f88be12b0c
commit f1f40ebcbe
4 changed files with 97 additions and 14 deletions

View File

@ -0,0 +1,32 @@
From f6832adadb84364ce0c81fa02910b3706f441abc Mon Sep 17 00:00:00 2001
From: Mark Rousskov <mark.simulacrum@gmail.com>
Date: Wed, 6 Nov 2019 15:17:02 -0500
Subject: [PATCH] Compiletest bump to stage0 bootstrap libtest
---
src/tools/compiletest/src/main.rs | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/tools/compiletest/src/main.rs b/src/tools/compiletest/src/main.rs
index 34435819a2c4..b115539b4af3 100644
--- a/src/tools/compiletest/src/main.rs
+++ b/src/tools/compiletest/src/main.rs
@@ -568,6 +568,7 @@ pub fn test_opts(config: &Config) -> test::TestOpts {
skip: vec![],
list: false,
options: test::Options::new(),
+ time_options: None,
}
}
@@ -703,6 +704,7 @@ pub fn make_test(config: &Config, testpaths: &TestPaths) -> Vec<test::TestDescAn
ignore,
should_panic,
allow_fail: false,
+ test_type: test::TestType::Unknown,
},
testfn: make_test_closure(config, early_props.ignore, testpaths, revision),
}
--
2.24.1

View File

@ -0,0 +1,52 @@
From b6fd4598c5367e78b5841fd99412484f0e86fc21 Mon Sep 17 00:00:00 2001
From: Amanieu d'Antras <amanieu@gmail.com>
Date: Wed, 1 Jan 2020 17:11:45 +0100
Subject: [PATCH] Update the barrier cache during ARM EHABI unwinding
---
src/libpanic_unwind/gcc.rs | 8 +++++++-
src/libunwind/libunwind.rs | 2 ++
2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/src/libpanic_unwind/gcc.rs b/src/libpanic_unwind/gcc.rs
index 4f572fe21b30..328d0d4ce7be 100644
--- a/src/libpanic_unwind/gcc.rs
+++ b/src/libpanic_unwind/gcc.rs
@@ -187,7 +187,13 @@ cfg_if::cfg_if! {
match eh_action {
EHAction::None |
EHAction::Cleanup(_) => return continue_unwind(exception_object, context),
- EHAction::Catch(_) => return uw::_URC_HANDLER_FOUND,
+ EHAction::Catch(_) => {
+ // EHABI requires the personality routine to update the
+ // SP value in the barrier cache of the exception object.
+ (*exception_object).private[5] =
+ uw::_Unwind_GetGR(context, uw::UNWIND_SP_REG);
+ return uw::_URC_HANDLER_FOUND;
+ }
EHAction::Terminate => return uw::_URC_FAILURE,
}
} else {
diff --git a/src/libunwind/libunwind.rs b/src/libunwind/libunwind.rs
index 0b39503c0d03..30658ce328d8 100644
--- a/src/libunwind/libunwind.rs
+++ b/src/libunwind/libunwind.rs
@@ -23,6 +23,7 @@ pub type _Unwind_Word = uintptr_t;
pub type _Unwind_Ptr = uintptr_t;
pub type _Unwind_Trace_Fn = extern "C" fn(ctx: *mut _Unwind_Context, arg: *mut c_void)
-> _Unwind_Reason_Code;
+
#[cfg(target_arch = "x86")]
pub const unwinder_private_data_size: usize = 5;
@@ -151,6 +152,7 @@ if #[cfg(all(any(target_os = "ios", target_os = "netbsd", not(target_arch = "arm
use _Unwind_VRS_DataRepresentation::*;
pub const UNWIND_POINTER_REG: c_int = 12;
+ pub const UNWIND_SP_REG: c_int = 13;
pub const UNWIND_IP_REG: c_int = 15;
#[cfg_attr(all(feature = "llvm-libunwind",
--
2.24.1

View File

@ -1,10 +0,0 @@
--- rustc-beta-src/src/test/run-make-fulldeps/foreign-exceptions/Makefile.orig 2019-12-07 18:36:56.000000000 -0800
+++ rustc-beta-src/src/test/run-make-fulldeps/foreign-exceptions/Makefile 2019-12-12 15:49:24.655515206 -0800
@@ -1,3 +1,7 @@
+# ignore-arm
+# ignore-armeb
+# https://github.com/rust-lang/rust/issues/67242
+
-include ../tools.mk
all: foo

View File

@ -49,7 +49,7 @@
Name: rust
Version: 1.40.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)
@ -71,9 +71,13 @@ Patch1: rust-pr57840-llvm7-debuginfo-variants.patch
# https://github.com/rust-lang/rust/pull/66317
Patch2: rust-pr66317-bindir-relative.patch
# ARM loops when C++ tries to catch and rethrow a Rust exception
# https://github.com/rust-lang/rust/issues/67242
Patch3: rust-issue-67242-ignore-arm-foreign-exceptions.patch
# Fix compiletest with newer (local-rebuild) libtest
# https://github.com/rust-lang/rust/pull/66156/commits/f6832adadb84364ce0c81fa02910b3706f441abc
Patch3: 0001-Compiletest-bump-to-stage0-bootstrap-libtest.patch
# Fix ARM unwinding for foreign-exceptions
# https://github.com/rust-lang/rust/pull/67779
Patch4: 0001-Update-the-barrier-cache-during-ARM-EHABI-unwinding.patch
# Get the Rust triple for any arch.
%{lua: function rust_triple(arch)
@ -407,6 +411,7 @@ test -f '%{local_rust_root}/bin/rustc'
%patch1 -p1 -R
%patch2 -p1
%patch3 -p1
%patch4 -p1
%if "%{python}" == "python3"
sed -i.try-py3 -e '/try python2.7/i try python3 "$@"' ./configure
@ -713,6 +718,10 @@ rm -f %{buildroot}%{rustlibdir}/etc/lldb_*.py*
%changelog
* Tue Jan 07 2020 Josh Stone <jistone@redhat.com> - 1.40.0-2
- Fix compiletest with newer (local-rebuild) libtest
- Fix ARM EHABI unwinding
* Thu Dec 19 2019 Josh Stone <jistone@redhat.com> - 1.40.0-1
- Update to 1.40.0.