Commit b2a4c43c by Gabriel Dos Reis Committed by Gabriel Dos Reis

gen-num-limits.cc (set_signals_handler): New function.

        * src/gen-num-limits.cc (set_signals_handler): New function.
        Factor out signals setting.  Set signal handler for SIGILL.

Co-Authored-By: Bert De Knuydt <Bert.Deknuydt@esat.kuleuven.ac.be>

From-SVN: r44139
parent 27ffc806
2001-07-19 Gabriel Dos Reis <gdr@merlin.codesourcery.com>
Bert De Knuydt <Bert.Deknuydt@esat.kuleuven.ac.be>
* src/gen-num-limits.cc (set_signals_handler): New function.
Factor out signals setting. Set signal handler for SIGILL.
2001-07-18 Phil Edwards <pme@sources.redhat.com> 2001-07-18 Phil Edwards <pme@sources.redhat.com>
* docs/html/27_io/howto.html: Fix typo. * docs/html/27_io/howto.html: Fix typo.
......
...@@ -157,15 +157,23 @@ template<typename T> ...@@ -157,15 +157,23 @@ template<typename T>
template<typename T> struct underflow { }; template<typename T> struct underflow { };
// Set various signals handler for trapping aritmetic ops.
void set_signals_handler()
{
signal_adapter(signal, SIGFPE, signal_handler);
signal_adapter(signal, SIGTRAP, signal_handler);
// This is necessary for Linux/SPARC.
signal_adapter(signal, SIGILL, signal_handler);
}
// traps // traps
template<typename T> void traps() template<typename T> void traps()
{ {
fflush(NULL); fflush(NULL);
signal_adapter (signal, SIGFPE, signal_handler); set_signals_handler();
signal_adapter (signal, SIGTRAP, signal_handler);
bool trap_flag = trapping(division_by_zero<T>()); bool trap_flag = trapping(division_by_zero<T>());
signal_adapter (signal, SIGFPE, signal_handler); set_signals_handler();
signal_adapter (signal, SIGTRAP, signal_handler);
trap_flag = trap_flag || trapping(overflow<T>()); trap_flag = trap_flag || trapping(overflow<T>());
const char* p = bool_alpha[trap_flag]; const char* p = bool_alpha[trap_flag];
printf("%s%s = %s;\n", tab2, "static const bool traps", p); printf("%s%s = %s;\n", tab2, "static const bool traps", p);
...@@ -175,8 +183,7 @@ template<typename T> void traps() ...@@ -175,8 +183,7 @@ template<typename T> void traps()
template<> void traps< T >() \ template<> void traps< T >() \
{ \ { \
fflush(NULL); \ fflush(NULL); \
signal_adapter (signal, SIGFPE, signal_handler); \ set_signals_handler(); \
signal_adapter (signal, SIGTRAP, signal_handler); \
const char* p = bool_alpha[trapping(division_by_zero<T>())]; \ const char* p = bool_alpha[trapping(division_by_zero<T>())]; \
printf("%s%s = %s;\n", tab2, "static const bool traps", p); \ printf("%s%s = %s;\n", tab2, "static const bool traps", p); \
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment