diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-02-06 09:25:23 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-02-24 13:44:30 +0100 |
commit | fac5697318cb36135fc2df3dc3e0c2631983cd7a (patch) | |
tree | 7ff15d60e0b3aec651cad302955dab80f994664d | |
parent | xilinx_zynq_a9_qemu: Avoid non-portable /dev/null (diff) | |
download | rtems-testing-fac5697318cb36135fc2df3dc3e0c2631983cd7a.tar.bz2 |
gcc/rtems_gcc_main.c: Add signal() workaround
-rw-r--r-- | 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); } |