Closes abrt/satyr#88.
Signed-off-by: Martin Milata mmilata@redhat.com --- configure.ac | 14 +- doc/abrt-action-generate-core-backtrace.txt | 50 +----- src/daemon/abrt-handle-event.c | 81 +++++----- src/include/Makefile.am | 1 - src/include/satyr-compat.h | 171 -------------------- src/plugins/abrt-action-analyze-backtrace.c | 41 +++-- src/plugins/abrt-action-generate-core-backtrace.c | 180 ++-------------------- src/plugins/koops_event.conf | 1 - src/plugins/python_event.conf | 1 - src/plugins/vmcore_event.conf | 1 - 10 files changed, 92 insertions(+), 449 deletions(-) delete mode 100644 src/include/satyr-compat.h
diff --git a/configure.ac b/configure.ac index ccd3901..7b32618 100644 --- a/configure.ac +++ b/configure.ac @@ -92,11 +92,6 @@ PYTHON_LIBS=`python-config --libs 2> /dev/null` AC_SUBST(PYTHON_CFLAGS) AC_SUBST(PYTHON_LIBS)
-AC_ARG_WITH([satyr], - AS_HELP_STRING([--with-satyr], - [use satyr instead of btparser (default is no)]), - [], [with_satyr=no]) - PKG_CHECK_MODULES([GTK], [gtk+-3.0]) PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.21]) PKG_CHECK_MODULES([DBUS], [dbus-1]) @@ -109,14 +104,7 @@ PKG_CHECK_MODULES([LIBREPORT_GTK], [libreport-gtk]) PKG_CHECK_MODULES([LIBREPORT_WEB], [libreport-web]) PKG_CHECK_MODULES([POLKIT], [polkit-gobject-1]) PKG_CHECK_MODULES([GIO], [gio-2.0]) - -[if test "$with_satyr" = "yes"] -[then] - PKG_CHECK_MODULES([SATYR], [satyr]) - AC_DEFINE([USE_SATYR], [1], [Use satyr instead of btparser]) -[else] - PKG_CHECK_MODULES([SATYR], [btparser]) -[fi] +PKG_CHECK_MODULES([SATYR], [satyr])
PKG_PROG_PKG_CONFIG AC_ARG_WITH([systemdsystemunitdir], diff --git a/doc/abrt-action-generate-core-backtrace.txt b/doc/abrt-action-generate-core-backtrace.txt index 0e68031..988327f 100644 --- a/doc/abrt-action-generate-core-backtrace.txt +++ b/doc/abrt-action-generate-core-backtrace.txt @@ -3,12 +3,11 @@ abrt-action-generate-core-backtrace(1)
NAME ---- -abrt-action-generate-core-backtrace - Generates coredump-level (debuginfo-free) -backtrace +abrt-action-generate-core-backtrace - Generates coredump-level backtrace
SYNOPSIS -------- -'abrt-action-generate-core-backtrace' [-v] [-d DIR] +'abrt-action-generate-core-backtrace' [-v] [-r] [-d DIR]
DESCRIPTION ----------- @@ -22,8 +21,7 @@ However, it only contains information that can be obtained from the coredump without debugging symbols available - mainly relative addresses of the stored instruction pointers. Such backtrace can still be useful for reporting and reproducing the bug and does not require debugging -information files to be installed. See <<X1,*FILE FORMAT*>> for the -description of the generated file. +information files to be installed.
The result is saved in the problem directory in a file named 'core_backtrace'. @@ -45,48 +43,12 @@ OPTIONS -d DIR:: Path to problem directory.
+-r:: + Do not hash function fingerprints. Useful for debugging. + -v:: Be more verbose. Can be given multiple times.
-[[X1]] -FILE FORMAT ------------ - -The generated file is a text file containing one line for each stack frame of -the thread that most likely caused the crash. The line has following format: - ------------- -BUILD_ID OFFSET SYMBOL MODNAME FINGERPRINT ------------- - -Where: - -*BUILD_ID*:: - Build ID of the binary file the address is mapped to as a hexadecimal string. - -*OFFSET*:: - Offset from the start of the executable section of aforementioned file the - stored instruction pointer points to. Number in hexadecimal format. - -*SYMBOL*:: - Name of the function if it is present in the binary (which is often the case - for shared libraries). - -*MODNAME*:: - Name of the module. Contains name of a library or *[exe]* if it is the - executable. - -*FINGERPRINT*:: - Fingerprint of the function the instruction pointer points to (x86-64 only). - The fingerprint is generated from various aspects of the machine code of the - function in question. Its purpose is to supplant the BUILD_ID and OFFSET - pair in case they are not present and to allow for comparison of - coredump-level backtraces produced by two slightly different versions of a - program. - -Dash in place of any of the parts indicates that the part is unknown. - -
AUTHORS ------- diff --git a/src/daemon/abrt-handle-event.c b/src/daemon/abrt-handle-event.c index a426566..eadb058 100644 --- a/src/daemon/abrt-handle-event.c +++ b/src/daemon/abrt-handle-event.c @@ -16,22 +16,42 @@ with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ +#include <satyr/thread.h> +#include <satyr/stacktrace.h> +#include <satyr/distance.h> +#include <satyr/abrt.h>
#include "libabrt.h" #include <libreport/run_event.h> -#include "satyr-compat.h" + +/* 70 % similarity */ +#define BACKTRACE_DUP_THRESHOLD 0.3
static char *uid = NULL; static char *uuid = NULL; -static struct sr_core_stacktrace *corebt = NULL; +static struct sr_stacktrace *corebt = NULL; +static char *analyzer = NULL; static char *crash_dump_dup_name = NULL;
-static int core_backtrace_is_duplicate(struct sr_core_stacktrace *bt1, +static char* load_backtrace(const struct dump_dir *dd) +{ + const char *filename = FILENAME_BACKTRACE; + if (strcmp(analyzer, "CCpp") == 0) + { + filename = FILENAME_CORE_BACKTRACE; + } + + return dd_load_text_ext(dd, filename, + DD_FAIL_QUIETLY_ENOENT|DD_LOAD_TEXT_RETURN_NULL_ON_FAILURE); +} + +static int core_backtrace_is_duplicate(struct sr_stacktrace *bt1, const char *bt2_text) { int result; char *error_message; - struct sr_core_stacktrace *bt2 = sr_core_stacktrace_from_json_text(bt2_text, &error_message); + struct sr_stacktrace *bt2 = sr_stacktrace_parse(sr_abrt_type_from_analyzer(analyzer), + bt2_text, &error_message); if (bt2 == NULL) { VERB1 log("Failed to parse backtrace, considering it not duplicate: %s", error_message); @@ -39,10 +59,10 @@ static int core_backtrace_is_duplicate(struct sr_core_stacktrace *bt1, return 0; }
- struct sr_core_thread *thread1 = sr_core_stacktrace_find_crash_thread(bt1); - struct sr_core_thread *thread2 = sr_core_stacktrace_find_crash_thread(bt2); + struct sr_thread *thread1 = sr_stacktrace_find_crash_thread(bt1); + struct sr_thread *thread2 = sr_stacktrace_find_crash_thread(bt2);
- int length2 = sr_core_thread_get_frame_count(thread2); + int length2 = sr_thread_frame_count(thread2);
if (length2 <= 0) { @@ -52,7 +72,7 @@ static int core_backtrace_is_duplicate(struct sr_core_stacktrace *bt1, }
/* This is an ugly workaround for https://github.com/abrt/btparser/issues/6 */ -#ifndef USE_SATYR + /* int length1 = sr_core_thread_get_frame_count(thread1);
if (length1 <= 2 || length2 <= 2) @@ -61,23 +81,14 @@ static int core_backtrace_is_duplicate(struct sr_core_stacktrace *bt1, result = (sr_core_thread_cmp(thread1, thread2) == 0); goto end; } -#endif - - float distance = sr_distance_core(SR_DISTANCE_DAMERAU_LEVENSHTEIN, - thread1, thread2); + */
- if (distance == -1) - { - result = 0; - } - else - { - VERB2 log("Distance between backtraces: %f", distance); - result = (distance <= BACKTRACE_DUP_THRESHOLD); - } + float distance = sr_distance(SR_DISTANCE_DAMERAU_LEVENSHTEIN, thread1, thread2); + VERB2 log("Distance between backtraces: %f", distance); + result = (distance <= BACKTRACE_DUP_THRESHOLD);
end: - sr_core_stacktrace_free(bt2); + sr_stacktrace_free(bt2);
return result; } @@ -126,22 +137,17 @@ static void dup_uuid_fini(void)
static void dup_corebt_init(const struct dump_dir *dd) { - char *corebt_text; - if (corebt) return; /* already checked */
- corebt_text = dd_load_text_ext(dd, FILENAME_CORE_BACKTRACE, - DD_FAIL_QUIETLY_ENOENT | DD_LOAD_TEXT_RETURN_NULL_ON_FAILURE - ); - + char *corebt_text = load_backtrace(dd); if (!corebt_text) return; /* no backtrace */
+ /* sr_stacktrace_parse moves the pointer */ char *error_message; - corebt = sr_core_stacktrace_from_json_text(corebt_text, - &error_message); - + corebt = sr_stacktrace_parse(sr_abrt_type_from_analyzer(analyzer), + corebt_text, &error_message); if (!corebt) { VERB1 log("Failed to load core stacktrace: %s", error_message); @@ -157,9 +163,8 @@ static int dup_corebt_compare(const struct dump_dir *dd) return 0;
int isdup; - char *dd_corebt = dd_load_text_ext(dd, FILENAME_CORE_BACKTRACE, - DD_FAIL_QUIETLY_ENOENT | DD_LOAD_TEXT_RETURN_NULL_ON_FAILURE);
+ char *dd_corebt = load_backtrace(dd); if (!dd_corebt) return 0;
@@ -174,7 +179,7 @@ static int dup_corebt_compare(const struct dump_dir *dd)
static void dup_corebt_fini(void) { - sr_core_stacktrace_free(corebt); + sr_stacktrace_free(corebt); corebt = NULL; }
@@ -208,13 +213,13 @@ static int is_crash_a_dup(const char *dump_dir_name, void *param) if (!dd) return 0; /* wtf? (error, but will be handled elsewhere later) */
- dup_uuid_init(dd); - dup_corebt_init(dd); - - char *analyzer = dd_load_text(dd, FILENAME_ANALYZER); + analyzer = dd_load_text(dd, FILENAME_ANALYZER); /* dump_dir_name can be relative */ dump_dir_name = realpath(dump_dir_name, NULL);
+ dup_uuid_init(dd); + dup_corebt_init(dd); + dd_close(dd);
DIR *dir = opendir(g_settings_dump_location); diff --git a/src/include/Makefile.am b/src/include/Makefile.am index addbaa5..49a6f5c 100644 --- a/src/include/Makefile.am +++ b/src/include/Makefile.am @@ -5,5 +5,4 @@ libabrt_include_HEADERS = \ libabrt.h \ abrt-dbus.h \ hooklib.h \ - satyr-compat.h \ problem_api.h diff --git a/src/include/satyr-compat.h b/src/include/satyr-compat.h deleted file mode 100644 index 23f6bb7..0000000 --- a/src/include/satyr-compat.h +++ /dev/null @@ -1,171 +0,0 @@ -/* - Copyright (C) 2013 RedHat inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ -/* - * Compatibility header for transition from btparser to satyr. When the - * possibility to compile abrt against btparser is removed, delete this file - * and include the relevant satyr headers instead. - */ -#ifndef SATYR_COMPAT_H_ -#define SATYR_COMPAT_H_ - -#include "config.h" - -#ifdef USE_SATYR -/* Satyr is used, nothing to do, just include everything we may need. */ - -#include <satyr/core_frame.h> -#include <satyr/core_stacktrace.h> -#include <satyr/core_thread.h> -#include <satyr/distance.h> -#include <satyr/gdb_frame.h> -#include <satyr/gdb_stacktrace.h> -#include <satyr/location.h> -#include <satyr/metrics.h> -#include <satyr/normalize.h> -#include <satyr/sha1.h> -#include <satyr/utils.h> - -#define BACKTRACE_DUP_THRESHOLD 0.3 - -#else /* USE_SATYR */ -/* We use btparser. Wrap the calls to btparser in a satyr-compatible interface. */ - -#include <btparser/frame.h> -#include <btparser/thread.h> -#include <btparser/normalize.h> -#include <btparser/metrics.h> -#include <btparser/core-backtrace.h> -#include <btparser/backtrace.h> -#include <btparser/frame.h> -#include <btparser/location.h> -#include "libabrt.h" /* xstrdup */ - -#define BACKTRACE_DUP_THRESHOLD 2.0 - -/* abrt-handle-event.c */ -#define sr_core_stacktrace btp_thread -#define sr_core_thread btp_thread - -enum sr_distance_type -{ - SR_DISTANCE_DAMERAU_LEVENSHTEIN -}; - -/* The functions should be static but that generates unused function warnings. - * We don't include this header in two compilation units that are then linked - * together anyway, so this should work. And this file should be gone soon ... - */ -struct sr_core_stacktrace * -sr_core_stacktrace_from_json_text(const char *text, - char **error_message) -{ - struct btp_thread *thread = btp_load_core_backtrace(text); - if (!thread) - { - *error_message = xstrdup( - "Failed to parse backtrace, considering it not duplicate"); - return NULL; - } - return btp_load_core_backtrace(text); -} - -struct sr_core_thread * -sr_core_stacktrace_find_crash_thread(struct sr_core_stacktrace *stacktrace) -{ - return stacktrace; -} - -int -sr_core_thread_get_frame_count(struct sr_core_thread *thread) -{ - return btp_thread_get_frame_count(thread); -} - -int -sr_core_thread_cmp(struct sr_core_thread *thread1, - struct sr_core_thread *thread2) -{ - return btp_thread_cmp(thread1, thread2); -} - -float -sr_distance_core(enum sr_distance_type distance_type, - struct sr_core_thread *thread1, - struct sr_core_thread *thread2) -{ - return btp_thread_levenshtein_distance_custom(thread1, thread2, true, - btp_core_backtrace_frame_cmp); -} - -void -sr_core_stacktrace_free(struct sr_core_stacktrace *stacktrace) -{ - btp_free_core_backtrace(stacktrace); -} - -/* abrt-action-analyze-backtrace.c */ -#define sr_location btp_location -#define sr_gdb_stacktrace btp_backtrace -#define sr_gdb_frame btp_frame - -void -sr_location_init(struct sr_location *location) -{ - btp_location_init(location); -} - -struct sr_gdb_stacktrace * -sr_gdb_stacktrace_parse(const char **input, - struct sr_location *location) -{ - return btp_backtrace_parse(input, location); -} - -char * -sr_gdb_stacktrace_get_duplication_hash(struct sr_gdb_stacktrace *stacktrace) -{ - return btp_backtrace_get_duplication_hash(stacktrace); -} - -float -sr_gdb_stacktrace_quality_complex(struct sr_gdb_stacktrace *stacktrace) -{ - return btp_backtrace_quality_complex(stacktrace); -} - -struct sr_gdb_frame * -sr_gdb_stacktrace_get_crash_frame(struct sr_gdb_stacktrace *stacktrace) -{ - return btp_backtrace_get_crash_frame(stacktrace); -} - -void -sr_gdb_frame_free(struct sr_gdb_frame *frame) -{ - btp_frame_free(frame); -} - -void -sr_gdb_stacktrace_free(struct sr_gdb_stacktrace *stacktrace) -{ - btp_backtrace_free(stacktrace); -} - -#endif /* USE_SATYR */ - -#endif /* SATYR_COMPAT_H_ */ diff --git a/src/plugins/abrt-action-analyze-backtrace.c b/src/plugins/abrt-action-analyze-backtrace.c index a980213..9348195 100644 --- a/src/plugins/abrt-action-analyze-backtrace.c +++ b/src/plugins/abrt-action-analyze-backtrace.c @@ -15,7 +15,11 @@ with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#include "satyr-compat.h" +#include <satyr/location.h> +#include <satyr/thread.h> +#include <satyr/gdb/frame.h> +#include <satyr/gdb/stacktrace.h> + #include "libabrt.h"
static const char *dump_dir_name = "."; @@ -130,18 +134,29 @@ int main(int argc, char **argv) }
/* Compute duplication hash. */ - char *str_hash_core = sr_gdb_stacktrace_get_duplication_hash(backtrace); - struct strbuf *str_hash = strbuf_new(); - strbuf_append_str(str_hash, component); - strbuf_append_str(str_hash, str_hash_core); - - VERB3 log("Generating duphash: %s", str_hash->buf); - char hash_str[SHA1_RESULT_LEN*2 + 1]; - create_hash(hash_str, str_hash->buf); - - dd_save_text(dd, FILENAME_DUPHASH, hash_str); - strbuf_free(str_hash); - free(str_hash_core); + struct sr_thread *crash_thread = + (struct sr_thread *)sr_gdb_stacktrace_find_crash_thread(backtrace); + + if (crash_thread) + { + char *hash_str; + + if (g_verbose >= 3) + { + hash_str = sr_thread_get_duphash(crash_thread, 3, component, + SR_DUPHASH_NOHASH); + log("Generating duphash: %s", hash_str); + free(hash_str); + } + + hash_str = sr_thread_get_duphash(crash_thread, 3, component, + SR_DUPHASH_NORMAL); + dd_save_text(dd, FILENAME_DUPHASH, hash_str); + free(hash_str); + } + else + log(_("Crash thread not found")); +
/* Compute the backtrace rating. */ float quality = sr_gdb_stacktrace_quality_complex(backtrace); diff --git a/src/plugins/abrt-action-generate-core-backtrace.c b/src/plugins/abrt-action-generate-core-backtrace.c index 24d69cb..a549a53 100644 --- a/src/plugins/abrt-action-generate-core-backtrace.c +++ b/src/plugins/abrt-action-generate-core-backtrace.c @@ -16,74 +16,10 @@ with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#include "libabrt.h" - -#ifdef USE_SATYR -/* If satyr is used, just run "satyr abrt-create-core-stacktrace" on the dump directory. - */ - -#include <unistd.h> - -int main(int argc, char **argv) -{ - VERB1 log("Running 'satyr abrt-create-core-stacktrace .'"); - execlp("satyr", "satyr", "abrt-create-core-stacktrace", ".", NULL); - perror_msg_and_die("Can't execute satyr"); - - return 0; -} - -#else /* USE_SATYR */ -/* Btparser is used. Once the support is removed, this whole file can be - * deleted and ccpp_event.conf modified accordingly. - */ +#include <satyr/abrt.h> +#include <satyr/utils.h>
-#include <btparser/hash_sha1.h> -#include <btparser/utils.h> -#include <btparser/core-backtrace.h> -#include <btparser/core-backtrace-python.h> -#include <btparser/core-backtrace-oops.h> - -static bool raw_fingerprints = false; - -/* add the information about '?' flag to fingerprint field - fingerprint is otherwise always empty for kerneloops */ -static void oops_add_question_marks(GList *backtrace) -{ - GList *elem = backtrace; - struct backtrace_entry *entry; - while (elem) - { - entry = (struct backtrace_entry *)elem->data; - if (entry->function_initial_loc) - entry->fingerprint = btp_strdup("?"); - - elem = g_list_next(elem); - } -} - -static void hash_fingerprints(GList *backtrace) -{ - GList *elem = backtrace; - struct backtrace_entry *entry; - char bin_hash[BTP_SHA1_RESULT_BIN_LEN], hash[BTP_SHA1_RESULT_LEN]; - btp_sha1_ctx_t ctx; - while (elem) - { - entry = (struct backtrace_entry *)elem->data; - if (entry->fingerprint) - { - btp_sha1_begin(&ctx); - btp_sha1_hash(&ctx, entry->fingerprint, strlen(entry->fingerprint)); - btp_sha1_end(&ctx, bin_hash); - btp_bin2hex(hash, bin_hash, sizeof(bin_hash))[0] = '\0'; - - free(entry->fingerprint); - entry->fingerprint = btp_strndup(hash, sizeof(hash)); - } - elem = g_list_next(elem); - } -} +#include "libabrt.h"
int main(int argc, char **argv) { @@ -97,12 +33,11 @@ int main(int argc, char **argv) abrt_init(argv);
const char *dump_dir_name = "."; - /* 60 seconds was too limiting on slow machines */ - const int exec_timeout_sec = 240; + bool raw_fingerprints = false;
/* Can't keep these strings/structs static: _() doesn't support that */ const char *program_usage_string = _( - "& [-v] -d DIR\n" + "& [-v] [-r] -d DIR\n" "\n" "Creates coredump-level backtrace from core dump and corresponding binary" ); @@ -123,109 +58,22 @@ int main(int argc, char **argv) export_abrt_envvars(0);
if (g_verbose > 1) - btp_debug_parser = true; + sr_debug_parser = true;
/* Let user know what's going on */ log(_("Generating core_backtrace"));
- /* Get the executable name -- unstrip doesn't know it. */ - struct dump_dir *dd = dd_opendir(dump_dir_name, DD_OPEN_READONLY); - if (!dd) - xfunc_die(); /* dd_opendir already printed error msg */ - char *analyzer = dd_load_text(dd, FILENAME_ANALYZER); - char *executable = dd_load_text_ext(dd, FILENAME_EXECUTABLE, - DD_FAIL_QUIETLY_ENOENT); - char *txt_backtrace = dd_load_text_ext(dd, FILENAME_BACKTRACE, - DD_FAIL_QUIETLY_ENOENT); - char *kernel = dd_load_text_ext(dd, FILENAME_KERNEL, - DD_FAIL_QUIETLY_ENOENT | - DD_LOAD_TEXT_RETURN_NULL_ON_FAILURE); - dd_close(dd); - - /* Parse addresses and eventual symbols from the output */ - GList *backtrace; - if (strcmp(analyzer, "CCpp") == 0) - { - char *gdb_out = get_backtrace(dump_dir_name, exec_timeout_sec, NULL); - if (gdb_out == NULL) - xfunc_die(); - - /* We observed a case when we were stuck for 36 minutes after emitting - * "Generating backtrace" message (in get_backtrace). - * We don't know whether we finished bt generation - * and were stuck somewhere below this point, or we were stuck - * in get_backtrace(). For now, we emit this message - * even in non-verbose mode to aid in future debugging: - */ - log(_("Backtrace is generated, %u bytes"), (int)strlen(gdb_out)); - - backtrace = btp_backtrace_extract_addresses(gdb_out); - VERB1 log("Extracted %d frames from the backtrace", g_list_length(backtrace)); - free(gdb_out); + char *error_message = NULL; + bool success = sr_abrt_create_core_stacktrace(dump_dir_name, + !raw_fingerprints, + &error_message);
- VERB1 log("Running eu-unstrip -n to obtain build ids"); - /* Run eu-unstrip -n to obtain the ids. This should be rewritten to read - * them directly from the core. */ - char *unstrip_output = run_unstrip_n(dump_dir_name, /*timeout_sec:*/ 30); - if (unstrip_output == NULL) - error_msg_and_die("Running eu-unstrip failed"); - btp_core_assign_build_ids(backtrace, unstrip_output, executable); - free(unstrip_output); - - /* Remove empty lines from the backtrace. */ - GList *loop = backtrace; - while (loop != NULL) - { - struct backtrace_entry *entry = loop->data; - GList *const tmp_next = g_list_next(loop); - if (!entry->build_id && !entry->filename && !entry->modname) - backtrace = g_list_delete_link(backtrace, loop); - loop = tmp_next; - } - - /* Extract address ranges from all the executables in the backtrace */ - VERB1 log("Computing function fingerprints"); - btp_core_backtrace_fingerprint(backtrace); - if (!raw_fingerprints) - hash_fingerprints(backtrace); - } - else if (strcmp(analyzer, "Python") == 0) - backtrace = btp_parse_python_backtrace(txt_backtrace); - else if (strcmp(analyzer, "Kerneloops") == 0 || strcmp(analyzer, "vmcore") == 0) + if (!success) { - /* btp_parse_kerneloops() accepts NULL in the kernelver argument. It is not - * documented, but it is true. */ - if (kernel != NULL) - { - char *space = strchr(kernel, ' '); - if (space) - *space = '\0'; - } - - backtrace = btp_parse_kerneloops(txt_backtrace, kernel); - oops_add_question_marks(backtrace); + log(_("Error: %s"), error_message); + free(error_message); + return 1; } - else - error_msg_and_die(_("Core-backtraces are not supported for '%s'"), analyzer); - - free(txt_backtrace); - free(kernel); - free(executable); - free(analyzer);
- char *formatted_backtrace = btp_core_backtrace_fmt(backtrace); - - dd = dd_opendir(dump_dir_name, /*flags:*/ 0); - if (!dd) - xfunc_die(); - dd_save_text(dd, FILENAME_CORE_BACKTRACE, formatted_backtrace); - dd_close(dd); - - log(_("Core backtrace is generated and saved, %u bytes"), (int)strlen(formatted_backtrace)); - - free(formatted_backtrace); - btp_core_backtrace_free(backtrace); return 0; } - -#endif /* USE_SATYR */ diff --git a/src/plugins/koops_event.conf b/src/plugins/koops_event.conf index 7409922..9966775 100644 --- a/src/plugins/koops_event.conf +++ b/src/plugins/koops_event.conf @@ -3,7 +3,6 @@ EVENT=post-create analyzer=Kerneloops # >> instead of > is due to bugzilla.redhat.com/show_bug.cgi?id=854266 abrt-action-analyze-oops && dmesg >>dmesg && - abrt-action-generate-core-backtrace abrt-action-save-kernel-data
# If you want behavior similar to one provided by kerneloops daemon diff --git a/src/plugins/python_event.conf b/src/plugins/python_event.conf index 1aa0e99..3a45373 100644 --- a/src/plugins/python_event.conf +++ b/src/plugins/python_event.conf @@ -8,7 +8,6 @@ EVENT=post-create analyzer=Python exit 1 fi abrt-action-analyze-python - abrt-action-generate-core-backtrace
EVENT=report_Bugzilla analyzer=Python component!=anaconda test -f component || abrt-action-save-package-data diff --git a/src/plugins/vmcore_event.conf b/src/plugins/vmcore_event.conf index f6e260e..5d2d099 100644 --- a/src/plugins/vmcore_event.conf +++ b/src/plugins/vmcore_event.conf @@ -2,7 +2,6 @@ EVENT=analyze_VMcore analyzer=vmcore abrt-action-analyze-vmcore && abrt-action-analyze-oops && - abrt-action-generate-core-backtrace && abrt-action-save-kernel-data
# If you want behavior similar to one provided by kerneloops daemon