diff options
| author | Karel Klic <kklic@redhat.com> | 2010-10-14 16:36:12 +0200 |
|---|---|---|
| committer | Karel Klic <kklic@redhat.com> | 2010-10-14 16:36:12 +0200 |
| commit | 43c74514d0faa39d343a26f39f31ec7689334b7b (patch) | |
| tree | 700b3a6a06e3dc02ea94e558cdf46f25144915de /src/btparser/normalize.c | |
| parent | 704a86ddf32df845f7eca34bcb727e398dce8fa2 (diff) | |
| download | abrt-43c74514d0faa39d343a26f39f31ec7689334b7b.tar.gz abrt-43c74514d0faa39d343a26f39f31ec7689334b7b.tar.xz abrt-43c74514d0faa39d343a26f39f31ec7689334b7b.zip | |
btparser integration: merge it into ABRT's directory hierarchy
Diffstat (limited to 'src/btparser/normalize.c')
| -rw-r--r-- | src/btparser/normalize.c | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/src/btparser/normalize.c b/src/btparser/normalize.c new file mode 100644 index 00000000..4bbee99c --- /dev/null +++ b/src/btparser/normalize.c @@ -0,0 +1,68 @@ +/* + normalize.c + + Copyright (C) 2010 Red Hat, 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. +*/ +#include "normalize.h" +#include "frame.h" +#include "thread.h" +#include "backtrace.h" +#include <string.h> + +void +btp_normalize_thread(struct btp_thread *thread) +{ + btp_normalize_dbus_thread(thread); + btp_normalize_gdk_thread(thread); + btp_normalize_glib_thread(thread); + btp_normalize_glibc_thread(thread); + btp_normalize_libstdcpp_thread(thread); + btp_normalize_linux_thread(thread); + btp_normalize_xorg_thread(thread); + + /* If the last frame has address 0x0000 and its name is '??', + * remove it. This frame is not really invalid, and it affects + * backtrace quality rating. See Red Hat Bugzilla bug #592523. + * @code + * #2 0x00007f4dcebbd62d in clone () + * at ../sysdeps/unix/sysv/linux/x86_64/clone.S:112 + * No locals. + * #3 0x0000000000000000 in ?? () + * @endcode + */ + struct btp_frame *last = thread->frames; + while (last && last->next) + last = last->next; + if (last && + last->address == 0x0000 && + last->function_name && + 0 == strcmp(last->function_name, "??")) + { + btp_thread_remove_frame(thread, last); + } +} + +void +btp_normalize_backtrace(struct btp_backtrace *backtrace) +{ + struct btp_thread *thread = backtrace->threads; + while (thread) + { + btp_normalize_thread(thread); + thread = thread->next; + } +} |
