[PATCH] cdtest: Restrict exceptions during sysinit

Sebastian Huber sebastian.huber at embedded-brains.de
Wed Jul 13 11:41:58 UTC 2022


Exceptions during system initialization work only on targets which do not need
a registration of exception frames during the global construction.  In
particular, targets which use the DWARF2 unwinder cannot use exceptions during
system initialization.
---
 testsuites/samples/cdtest/main.cc | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/testsuites/samples/cdtest/main.cc b/testsuites/samples/cdtest/main.cc
index 44cdaf84bb..d5530a657d 100644
--- a/testsuites/samples/cdtest/main.cc
+++ b/testsuites/samples/cdtest/main.cc
@@ -238,6 +238,17 @@ rtems_task main_task(
     exit(0);
 }
 
+/*
+ * Exceptions during system initialization work only on targets which do not
+ * need a registration of exception frames during the global construction.  In
+ * particular, targets which use the DWARF2 unwinder cannot use exceptions
+ * during system initialization.
+ */
+#if defined(__arm__) || defined(__aarch64__)
+#define CAN_DO_EXCEPTIONS_DURING_SYSINIT
+#endif
+
+#ifdef CAN_DO_EXCEPTIONS_DURING_SYSINIT
 static void early_exception()
 {
     try
@@ -250,11 +261,13 @@ static void early_exception()
       throw "early exception 2";
     }
 }
+#endif
 
 static void test_exceptions_during_system_init()
 {
     TEST_BEGIN();
 
+#ifdef CAN_DO_EXCEPTIONS_DURING_SYSINIT
     try
     {
       early_exception();
@@ -263,6 +276,7 @@ static void test_exceptions_during_system_init()
     {
       rtems_test_assert(strcmp(e, "early exception 2") == 0);
     }
+#endif
 }
 
 RTEMS_SYSINIT_ITEM(
-- 
2.35.3



More information about the devel mailing list