diff options
author | Gabriel Dos Reis <gdr@merlin.codesourcery.com> | 2001-07-19 03:06:01 +0000 |
---|---|---|
committer | Gabriel Dos Reis <gdr@gcc.gnu.org> | 2001-07-19 03:06:01 +0000 |
commit | b2a4c43c0db0c7878b5e74271d9a658857454b92 (patch) | |
tree | 0676b7ed67fef27a6f5966b14ddec759b2455c53 /libstdc++-v3/src | |
parent | 27ffc806c4fb1354fb40cb2e5148098ea85e9dcf (diff) | |
download | gcc-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.cc | 19 |
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); \ } |