summaryrefslogtreecommitdiff
path: root/libstdc++-v3/src
diff options
context:
space:
mode:
authorGabriel Dos Reis <gdr@merlin.codesourcery.com>2001-07-19 03:06:01 +0000
committerGabriel Dos Reis <gdr@gcc.gnu.org>2001-07-19 03:06:01 +0000
commitb2a4c43c0db0c7878b5e74271d9a658857454b92 (patch)
tree0676b7ed67fef27a6f5966b14ddec759b2455c53 /libstdc++-v3/src
parent27ffc806c4fb1354fb40cb2e5148098ea85e9dcf (diff)
downloadgcc-b2a4c43c0db0c7878b5e74271d9a658857454b92.tar.gz
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
Diffstat (limited to 'libstdc++-v3/src')
-rw-r--r--libstdc++-v3/src/gen-num-limits.cc19
1 files changed, 13 insertions, 6 deletions
diff --git a/libstdc++-v3/src/gen-num-limits.cc b/libstdc++-v3/src/gen-num-limits.cc
index 1ea01bd2ebc..e52f67dc435 100644
--- a/libstdc++-v3/src/gen-num-limits.cc
+++ b/libstdc++-v3/src/gen-num-limits.cc
@@ -157,15 +157,23 @@ template<typename T>
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
template<typename T> void traps()
{
fflush(NULL);
- signal_adapter (signal, SIGFPE, signal_handler);
- signal_adapter (signal, SIGTRAP, signal_handler);
+ set_signals_handler();
bool trap_flag = trapping(division_by_zero<T>());
- signal_adapter (signal, SIGFPE, signal_handler);
- signal_adapter (signal, SIGTRAP, signal_handler);
+ set_signals_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);
@@ -175,8 +183,7 @@ template<typename T> void traps()
template<> void traps< T >() \
{ \
fflush(NULL); \
- signal_adapter (signal, SIGFPE, signal_handler); \
- signal_adapter (signal, SIGTRAP, signal_handler); \
+ set_signals_handler(); \
const char* p = bool_alpha[trapping(division_by_zero<T>())]; \
printf("%s%s = %s;\n", tab2, "static const bool traps", p); \
}