+2020-05-14 Szabolcs Nagy <szabolcs.nagy@arm.com>
+
+ Backport from mainline.
+ 2020-04-23 Szabolcs Nagy <szabolcs.nagy@arm.com>
+
+ PR target/94514
+ * g++.target/aarch64/pr94514.C: Require lp64.
+ * gcc.target/aarch64/pr94514.c: Likewise.
+
+ Backport from mainline.
+ 2020-04-21 Szabolcs Nagy <szabolcs.nagy@arm.com>
+
+ PR target/94514
+ * g++.target/aarch64/pr94514.C: New test.
+ * gcc.target/aarch64/pr94514.c: New test.
+
2020-05-13 Mark Eggleston <markeggleston@gcc.gnu.org>
Backported from master
--- /dev/null
+/* PR target/94514. Unwind across mixed pac-ret and non-pac-ret frames. */
+/* { dg-do run } */
+/* { dg-require-effective-target lp64 } */
+
+__attribute__((noinline, target("branch-protection=pac-ret")))
+static void do_throw (void)
+{
+ throw 42;
+ __builtin_abort ();
+}
+
+__attribute__((noinline, target("branch-protection=none")))
+static void no_pac_ret (void)
+{
+ do_throw ();
+ __builtin_abort ();
+}
+
+int main ()
+{
+ try {
+ no_pac_ret ();
+ } catch (...) {
+ return 0;
+ }
+ __builtin_abort ();
+}
--- /dev/null
+/* PR target/94514. Unwind across mixed pac-ret and non-pac-ret frames. */
+/* { dg-do run } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-options "-fexceptions -O2" } */
+
+#include <unwind.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+#define die() \
+ do { \
+ printf ("%s:%d: reached unexpectedly.\n", __FILE__, __LINE__); \
+ fflush (stdout); \
+ abort (); \
+ } while (0)
+
+static struct _Unwind_Exception exc;
+
+static _Unwind_Reason_Code
+force_unwind_stop (int version, _Unwind_Action actions,
+ _Unwind_Exception_Class exc_class,
+ struct _Unwind_Exception *exc_obj,
+ struct _Unwind_Context *context,
+ void *stop_parameter)
+{
+ printf ("%s: CFA: %p PC: %p actions: %d\n",
+ __func__,
+ (void *)_Unwind_GetCFA (context),
+ (void *)_Unwind_GetIP (context),
+ (int)actions);
+ if (actions & _UA_END_OF_STACK)
+ die ();
+ return _URC_NO_REASON;
+}
+
+static void force_unwind (void)
+{
+#ifndef __USING_SJLJ_EXCEPTIONS__
+ _Unwind_ForcedUnwind (&exc, force_unwind_stop, 0);
+#else
+ _Unwind_SjLj_ForcedUnwind (&exc, force_unwind_stop, 0);
+#endif
+}
+
+__attribute__((noinline, target("branch-protection=pac-ret")))
+static void f2_pac_ret (void)
+{
+ force_unwind ();
+ die ();
+}
+
+__attribute__((noinline, target("branch-protection=none")))
+static void f1_no_pac_ret (void)
+{
+ f2_pac_ret ();
+ die ();
+}
+
+__attribute__((noinline, target("branch-protection=pac-ret")))
+static void f0_pac_ret (void)
+{
+ f1_no_pac_ret ();
+ die ();
+}
+
+static void cleanup_handler (void *p)
+{
+ printf ("%s: Success.\n", __func__);
+ exit (0);
+}
+
+int main ()
+{
+ char dummy __attribute__((cleanup (cleanup_handler)));
+ f0_pac_ret ();
+ die ();
+}
+2020-05-14 Szabolcs Nagy <szabolcs.nagy@arm.com>
+
+ Backport from mainline.
+ 2020-04-21 Szabolcs Nagy <szabolcs.nagy@arm.com>
+
+ PR target/94514
+ * config/aarch64/aarch64-unwind.h (aarch64_frob_update_context):
+ Update context->flags accroding to the frame state.
+
2020-04-22 Andre Vieira <andre.simoesdiasvieira@arm.com>
Backport from mainline.