Initialize backtrace state once
authorJanne Blomqvist <jb@gcc.gnu.org>
Fri, 30 Nov 2018 16:44:27 +0000 (18:44 +0200)
committerJanne Blomqvist <jb@gcc.gnu.org>
Fri, 30 Nov 2018 16:44:27 +0000 (18:44 +0200)
commit854cedfd40f14e974060dd3ce4463712ed18274b
tree40de8bda791fc96b25048a081dc59b2d314e2f8a
parent5bd624fbde5f6307fb71041a38aa0914eab9f6f9
Initialize backtrace state once

From backtrace.h for backtrace_create_state:

   Calling this function allocates resources that can not be freed.
   There is no backtrace_free_state function.  The state is used to
   cache information that is expensive to recompute.  Programs are
   expected to call this function at most once and to save the return
   value for all later calls to backtrace functions.

So instead of calling backtrace_create_state every time we wish to
show a backtrace, do it once and store the result in a static
variable.  libbacktrace allows multiple threads to access the state,
so no need to use TLS.

Regtested on x86_64-pc-linux-gnu.

libgfortran/ChangeLog:

2018-11-30  Janne Blomqvist  <jb@gcc.gnu.org>

PR libfortran/88137
* runtime/backtrace.c (show_backtrace): Make lbstate a static
variable, initialize once.

From-SVN: r266677
libgfortran/ChangeLog
libgfortran/runtime/backtrace.c