[rtems-testing commit] gcc/rtems_gcc_main.c: Add signal() workaround

Sebastian Huber sebh at rtems.org
Mon Feb 24 12:38:02 UTC 2014


Module:    rtems-testing
Branch:    master
Commit:    fac5697318cb36135fc2df3dc3e0c2631983cd7a
Changeset: http://git.rtems.org/rtems-testing/commit/?id=fac5697318cb36135fc2df3dc3e0c2631983cd7a

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Thu Feb  6 09:25:23 2014 +0100

gcc/rtems_gcc_main.c: Add signal() workaround

---

 gcc/rtems_gcc_main.c |   16 ++++++++++++++++
 1 files changed, 16 insertions(+), 0 deletions(-)

diff --git a/gcc/rtems_gcc_main.c b/gcc/rtems_gcc_main.c
index 6f56a11..b5b3d38 100644
--- a/gcc/rtems_gcc_main.c
+++ b/gcc/rtems_gcc_main.c
@@ -12,6 +12,7 @@
 #include <bsp.h>
 #include <sys/stat.h>
 #include <sys/types.h>
+#include <pthread.h>
 
 /*
  * Set up first argument
@@ -22,8 +23,23 @@ static char *argv[20] = { arg0 };
 
 int main(int argc, char **argv, char **environp);
 
+/*
+ * Tests like "gcc.c-torture/execute/20101011-1.c" use signal() and raise().
+ * RTEMS ignores signals installed via signal() by default.  Enable SIGFPE for
+ * the initialization thread as a workaround.
+ */
+static void signal_workaround(void)
+{
+  sigset_t set;
+
+  sigemptyset(&set);
+  sigaddset(&set, SIGFPE);
+  pthread_sigmask(SIG_UNBLOCK, &set, NULL);
+}
+
 rtems_task Init(rtems_task_argument ignored)
 {
+  signal_workaround();
   mkdir( "/tmp", 0777 );
   main(argc, argv, NULL);
 }




More information about the vc mailing list