[flang-commits] [flang] Backtrace support for flang (PR #118179)
via flang-commits
flang-commits at lists.llvm.org
Mon Dec 9 08:31:10 PST 2024
================
@@ -152,11 +157,36 @@ void RTNAME(PauseStatementText)(const char *code, std::size_t length) {
std::exit(status);
}
+static void PrintBacktrace() {
+#ifdef HAVE_BACKTRACE
+ // TODO: Need to parse DWARF information to print function line numbers
+ constexpr int MAX_CALL_STACK{999};
+ void *buffer[MAX_CALL_STACK];
+ int nptrs{backtrace(buffer, MAX_CALL_STACK)};
+
+ if (char **symbols{backtrace_symbols(buffer, nptrs)}) {
+ for (int i = 0; i < nptrs; i++) {
+ Fortran::runtime::Terminator{}.PrintCrashArgs("#%d %s\n", i, symbols[i]);
+ }
+ free(symbols);
+ }
+
+#else
+
+ // TODO: Need to implement the version for other platforms.
+ Fortran::runtime::Terminator{}.PrintCrashArgs(
+ "Handle the case when a backtrace is not available\n");
+
+#endif
+}
+
[[noreturn]] void RTNAME(Abort)() {
- // TODO: Add backtrace call, unless with `-fno-backtrace`.
+ PrintBacktrace();
----------------
dty2 wrote:
You are right, thanks for pointing this out.
https://github.com/llvm/llvm-project/pull/118179
More information about the flang-commits
mailing list