This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
Re: gcc-20001218 IRIX 5.3 installation
- To: werner dot mausshardt at bruker dot de
- Subject: Re: gcc-20001218 IRIX 5.3 installation
- From: Alexandre Oliva <aoliva at redhat dot com>
- Date: 08 Jan 2001 19:05:33 -0200
- Cc: gcc-bugs at gcc dot gnu dot org, libstdc++ at gcc dot gnu dot org
- Organization: GCC Team, Red Hat
- References: <m14FV8w-00i1RUC@nike.software.bruker.de>
On Jan 8, 2001, wem@bruker.de (Werner Mausshardt) wrote:
> building snapshot gcc-20001218 under IRIX 5.3 (make bootstrap) stops
> with following error message:
> make[4]: *** No rule to make target `limitsMEMBERS.cc', needed by `limitsMEMBERS.lo'. Stop.
I posted a patch that fixes this problem. It was posted about two
weeks ago, but it wasn't reviewed it. Here it is again, for
reference:
Index: libstdc++-v3/ChangeLog
from Alexandre Oliva <aoliva@redhat.com>
* src/gen-num-limits.cc (signal_adapter): New template function.
(signal_handler): Use it, instead of signal.
(traps<T>): Likewise. Install SIGTRAP handler too. Don't
require both tests to trap to set trap_flag.
Index: libstdc++-v3/src/gen-num-limits.cc
===================================================================
RCS file: /cvs/gcc/egcs/libstdc++-v3/src/gen-num-limits.cc,v
retrieving revision 1.4
diff -u -p -r1.4 gen-num-limits.cc
--- libstdc++-v3/src/gen-num-limits.cc 2000/10/30 13:15:24 1.4
+++ libstdc++-v3/src/gen-num-limits.cc 2000/12/25 21:02:44
@@ -92,11 +92,23 @@ const int integer_base_rep = 2;
jmp_buf env;
+/* The prototype of signal() may vary. Accomodate variations such as
+ void(*)(int) and void(*)(...). */
+template <typename signal_handler_type, typename signal_number_type>
+inline void (*signal_adapter (signal_handler_type
+ (*signal_func)(signal_number_type,
+ signal_handler_type),
+ signal_number_type arg,
+ void (*handler)(int)))(int)
+{
+ return (void (*)(int))(*signal_func)(arg, (signal_handler_type)handler);
+}
+
void signal_handler(int sig)
{
#ifdef __CYGWIN__
static sigset_t x;
- signal (sig, signal_handler);
+ signal_adapter (signal, sig, signal_handler);
sigemptyset (&x);
sigprocmask(SIG_SETMASK, &x, NULL);
#endif /* __CYGWIN__ */
@@ -137,10 +149,12 @@ template<typename T> struct underflow {}
// traps
template<typename T> void traps()
{
- signal(SIGFPE, signal_handler);
+ signal_adapter (signal, SIGFPE, signal_handler);
+ signal_adapter (signal, SIGTRAP, signal_handler);
bool trap_flag = trapping(division_by_zero<T>());
- signal(SIGFPE, signal_handler);
- trap_flag = trap_flag && trapping(overflow<T>());
+ signal_adapter (signal, SIGFPE, signal_handler);
+ signal_adapter (signal, SIGTRAP, signal_handler);
+ trap_flag = trap_flag || trapping(overflow<T>());
const char* p = bool_alpha[trap_flag];
printf("%s%s = %s;\n", tab2, "static const bool traps", p);
}
@@ -148,7 +162,8 @@ template<typename T> void traps()
#define SPECIALIZE_TRAPPING(T) \
template<> void traps< T >() \
{ \
- signal(SIGFPE, signal_handler); \
+ signal_adapter (signal, SIGFPE, signal_handler); \
+ signal_adapter (signal, SIGTRAP, signal_handler); \
const char* p = bool_alpha[trapping(division_by_zero<T>())]; \
printf("%s%s = %s;\n", tab2, "static const bool traps", p); \
}
--
Alexandre Oliva Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/
Red Hat GCC Developer aoliva@{cygnus.com, redhat.com}
CS PhD student at IC-Unicamp oliva@{lsd.ic.unicamp.br, gnu.org}
Free Software Evangelist *Please* write to mailing lists, not to me