On Sat, May 07, 2011 at 10:52:13PM +0300, Janne Blomqvist wrote:
> 
> this simple bug led me to rethink normal and error termination and
> thus the patch changes some other related stuff as well. So the
> original problem was that when -fdump-core was enabled, STOP with a
> numeric stop code made the program terminate with an incorrect return
> code, since the core dump generation is done by the program killing
> itself.
> 
> The real problem is that previously, we were mixing up normal
> termination with a non-zero exit status (e.g. file not found) with
> aborting the program (e.g. some serious error detected). The attached
> patch reworks this so that normal termination (with a zero or non-zero
> exit code) is done with exit(), and no backtrace or core dump is
> generated in any circumstance. For serious errors, a backtrace and
> core dump are generated.
> 
> Since OS'es contain widely used ways to control core dump generation
> (e.g. ulimit -c), and we no longer "frivolously" try to generate a
> core dump just because we're exiting with non-zero status, there is
> IMHO no longer any need for a gfortran-specific option; if we hit a
> serious error, we call abort() and a core dump is always generated if
> the user environment is so configured (and the system supports core
> dumps).
> 
> Also, since backtraces and core dumps are now only generated for
> serious errors (not e.g. file not found). -fbacktrace is enabled by
> default.
> 
> Regtested on x86_64-unknown-linux-gnu, Ok for trunk?
> 
> frontend ChangeLog:
> 
> 2011-05-07  Janne Blomqvist  <j...@gcc.gnu.org>
> 
>       PR libfortran/48915
>       * gfortran.h (gfc_option_t): Remove flag_dump_core.
>       * gfortran.texi (GFORTRAN_ERROR_DUMPCORE): Remove section.
>       (GFORTRAN_ERROR_BACKTRACE): Document that it's enabled by default.
>       * intrinsic.texi (ABORT): Remove explanation of -fdump-core.
>       * invoke.texi: Remove -fdump-core, document that -fbacktrace is
>       enabled by default.
>       * lang.opt: Remove -fdump-core.
>       * options.c (gfc_init_options): Make backtrace default to enabled,
>       remove dump_core.
>       (gfc_handle_option): Remove OPT_fdump-core.
>       * trans-decl.c: Pass a 0 to preserve ABI.
> 
> library ChangeLog:
> 
> 2011-05-07  Janne Blomqvist  <j...@gcc.gnu.org>
> 
>       PR libfortran/48915
>       * intrinsics/abort.c (abort): Call sys_abort().
>       * io/unix.c (st_vprintf): Call sys_abort().
>       * libgfortran.h (options_t): Remove dump_core member.
>       (handler): Rename to backtrace_handler.
>       (compile_options_t): Remove dump_core member.
>       (sys_exit): Remove.
>       (sys_abort): New function.
>       * runtime/backtrace.c (show_backtrace): Print a message if
>       backtrace is not available on target.
>       * runtime/compile_options.c (backtrace_handler): New
>       implementation based on example in Glibc manual.
>       (set_options): Remove dump_core handling, make signal handler
>       handle more signals.
>       (init_compile_options): Remove dump_core.
>       * runtime/environ.c (variable_table[]): Remove
>       GFORTRAN_ERROR_DUMPCORE element.
>       (show_variables): Update name, call exit().
>       * runtime/error.c (sys_exit): Remove.
>       (sys_abort): New function.
>       (recursion_check): Call sys_abort().
>       (os_error): Call exit().
>       (runtime_error): Likewise.
>       (runtime_error_at): Likewise.
>       (internal_error): Likewise.
>       (generate_error): Likewise.
>       (notify_std): Likewise.
>       * runtime/stop.c (stop_numeric): Call exit().
>       (stop_numeric_f08): Likewise.
>       (stop_string): Likewise.
>       (error_stop_string): Call sys_abort().
>       (error_stop_numeric): Print backtrace, exit with provided code.
> 

OK.

I suspect that there may be some out given that you're dealing
with signals and gfortran runs on so many different OS's.

-- 
Steve

Reply via email to