This is the mail archive of the
ecos-patches@sources.redhat.com
mailing list for the eCos project.
Avoid gcc 3.2 bug with signals
- From: Jonathan Larmour <jlarmour at jifvik dot org>
- To: ecos-patches at sources dot redhat dot com
- Date: Thu, 13 Feb 2003 00:02:46 GMT
- Subject: Avoid gcc 3.2 bug with signals
Index: ChangeLog
===================================================================
RCS file: /cvs/ecos/ecos/packages/language/c/libc/signals/current/ChangeLog,v
retrieving revision 1.6
diff -u -5 -p -r1.6 ChangeLog
--- ChangeLog 23 May 2002 23:07:08 -0000 1.6
+++ ChangeLog 13 Feb 2003 00:02:46 -0000
@@ -1,5 +1,10 @@
+2003-02-13 Jonathan Larmour <jifl@eCosCentric.com>
+
+ * include/signal.inl (raise): Use if/else rather than switch to
+ avoid GCC 3.2 bug.
+
2002-05-23 Jesper Skov <jskov@redhat.com>
* cdl/signals.cdl: Don't build signal2 test when it'll N/A
anyway.
Index: include/signal.inl
===================================================================
RCS file: /cvs/ecos/ecos/packages/language/c/libc/signals/current/include/signal.inl,v
retrieving revision 1.3
diff -u -5 -p -r1.3 signal.inl
--- include/signal.inl 23 May 2002 23:07:09 -0000 1.3
+++ include/signal.inl 13 Feb 2003 00:02:46 -0000
@@ -231,37 +231,29 @@ raise(int __sig)
return -1;
} // if
__sigfun = cyg_libc_signal_handlers[__sig];
- switch ( (CYG_ADDRESS)__sigfun ) {
-
- case (CYG_ADDRESS)SIG_DFL:
+ if ( __sigfun == SIG_DFL {
CYG_TRACE0(cyg_libc_signals_raise_trace_level,
"signal handler returned is SIG_DFL");
cyg_libc_signals_unlock();
cyg_libc_signals_default_handler(__sig);
- break;
-
- case (CYG_ADDRESS)SIG_IGN:
+ } else if ( __sigfun == SIG_IGN ) {
CYG_TRACE0(cyg_libc_signals_raise_trace_level,
"signal handler returned is SIG_IGN");
cyg_libc_signals_unlock();
-
- break;
-
- default:
+ } else {
CYG_TRACE1(cyg_libc_signals_raise_trace_level,
"signal handler returned is at %08x", __sigfun);
// call the signal handler directly
cyg_libc_signal_handlers[__sig] = SIG_DFL;
cyg_libc_signals_unlock();
CYG_CHECK_FUNC_PTR( __sigfun, "returned signal handler invalid!");
(*__sigfun)(__sig);
- break;
}
CYG_REPORT_RETVAL( __ret );
return __ret;