Block-Structured AMR Software Framework
Loading...
Searching...
No Matches
AMReX_BLBackTrace.H
Go to the documentation of this file.
1#ifndef AMREX_BL_BACKTRACE_H_
2#define AMREX_BL_BACKTRACE_H_
3#include <AMReX_Config.H>
4#include <AMReX_Extension.H>
5
6#ifdef AMREX_USE_OMP
7#include <omp.h>
8// threadprivate doesn't work with Cray, Intel, PGI/NVHPC, and Fujitsu
9#if !defined(_CRAYC) && !defined(__INTEL_COMPILER) && !defined(__PGI) && !defined(__NVCOMPILER) && !defined(__FUJITSU)
10#define AMREX_BT_STACK_THREADPRIVATE 1
11#endif
12#endif
13
19#include <stack>
20#include <string>
21#include <utility>
22#include <cstdlib>
23
25#define BL_PASTE2(x, y) x##y
26#define BL_PASTE(x, y) BL_PASTE2(x, y)
28
37#define BL_BACKTRACE_PUSH( S ) \
38 AMREX_WARNING_PUSH_COUNTER \
39 amrex::BLBTer BL_PASTE( bl_bter, __COUNTER__ )( S, __FILE__, __LINE__ ) \
40 AMREX_WARNING_POP
48#define BL_BACKTRACE_POP() amrex::BLBackTrace::bt_stack.pop()
49
50namespace amrex {
51
53{
58 static void handler(int s);
63 static void print_backtrace_info (FILE* f);
68 static void print_backtrace_info (const std::string& filename);
69
70 static std::stack<std::pair<std::string, std::string> > bt_stack;
71#ifdef AMREX_BT_STACK_THREADPRIVATE
72#pragma omp threadprivate(bt_stack)
73#endif
74};
75
76class BLBTer
77{
78public:
86 BLBTer(const std::string& s, const char* file, int line);
87 BLBTer (BLBTer const&) = delete;
88 BLBTer (BLBTer &&) = delete;
89 BLBTer& operator= (BLBTer const&) = delete;
90 BLBTer& operator= (BLBTer &&) = delete;
91 ~BLBTer();
92private:
93 std::string line_file;
100 void pop_bt_stack();
101};
102
103}
104
105#endif
Compiler- and backend-specific extension macros (e.g., restrict, SIMD, inline).
Definition AMReX_BLBackTrace.H:77
~BLBTer()
Definition AMReX_BLBackTrace.cpp:412
BLBTer & operator=(BLBTer const &)=delete
BLBTer(BLBTer const &)=delete
BLBTer(BLBTer &&)=delete
Definition AMReX_Amr.cpp:50
Definition AMReX_BLBackTrace.H:53
static void handler(int s)
Signal handler that prints and aborts on fatal signals.
Definition AMReX_BLBackTrace.cpp:50
static void print_backtrace_info(FILE *f)
Print backtrace details to f for abort handling.
Definition AMReX_BLBackTrace.cpp:199
static std::stack< std::pair< std::string, std::string > > bt_stack
Definition AMReX_BLBackTrace.H:70