This is the mail archive of the ecos-patches@sources.redhat.com mailing list for the eCos project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]