coredump: display libdw fail string on stack trace fail
authorUmut Tezduyar Lindskog <umut.tezduyar@axis.com>
Tue, 8 Jul 2014 14:16:14 +0000 (16:16 +0200)
committerLennart Poettering <lennart@poettering.net>
Fri, 15 Aug 2014 01:10:20 +0000 (03:10 +0200)
- systemd[1]: hello.service: main process exited, code= dumped, status=3/QUIT
- systemd-coredump[2541]: Failed to generate stack trace: Unwinding not supported for this architecture
- systemd-coredump[2541]: Process 1024 (hello) of user 154 dumped core.

src/journal/coredump.c

index db51098..79f51d1 100644 (file)
 #include <sys/types.h>
 #include <sys/xattr.h>
 
+#ifdef HAVE_ELFUTILS
+#  include <dwarf.h>
+#  include <elfutils/libdwfl.h>
+#endif
+
 #include "systemd/sd-journal.h"
 #include "systemd/sd-login.h"
 
@@ -686,6 +691,8 @@ int main(int argc, char* argv[]) {
                 r = coredump_make_stack_trace(coredump_fd, exe, &stacktrace);
                 if (r >= 0)
                         core_message = strjoin("MESSAGE=Process ", info[INFO_PID], " (", comm, ") of user ", info[INFO_UID], " dumped core.\n\n", stacktrace, NULL);
+                else if (r == -EINVAL)
+                        log_warning("Failed to generate stack trace: %s", dwfl_errmsg(dwfl_errno()));
                 else
                         log_warning("Failed to generate stack trace: %s", strerror(-r));
         }