From 6dcdb4a5cb3ed68eb7d72cc65e58055d1e4f7c65 Mon Sep 17 00:00:00 2001 From: Karel Klic Date: Thu, 9 Jun 2011 15:52:56 +0200 Subject: Embedded btparser removed --- abrt.spec.in | 4 +- configure.ac | 3 +- src/Makefile.am | 2 +- src/btparser/Makefile.am | 57 - src/btparser/backtrace.c | 445 ----- src/btparser/backtrace.h | 269 --- src/btparser/btparser.pc.in | 10 - src/btparser/frame.c | 1027 ---------- src/btparser/frame.h | 470 ----- src/btparser/location.c | 78 - src/btparser/location.h | 118 -- src/btparser/normalize.c | 88 - src/btparser/normalize.h | 74 - src/btparser/normalize_dbus.c | 44 - src/btparser/normalize_gdk.c | 44 - src/btparser/normalize_glib.c | 60 - src/btparser/normalize_glibc.c | 131 -- src/btparser/normalize_libstdcpp.c | 46 - src/btparser/normalize_linux.c | 41 - src/btparser/normalize_xorg.c | 46 - src/btparser/thread.c | 399 ---- src/btparser/thread.h | 215 --- src/btparser/utils.c | 423 ---- src/btparser/utils.h | 284 --- src/plugins/Makefile.am | 4 +- src/plugins/abrt-action-analyze-backtrace.c | 8 +- src/plugins/abrt-action-generate-backtrace.c | 6 +- tests/Makefile.am | 4 +- tests/btparser/Makefile.am | 14 - tests/btparser/backtrace.at | 152 -- tests/btparser/backtraces/621492.bt | 2668 -------------------------- tests/btparser/frame.at | 615 ------ tests/btparser/thread.at | 396 ---- tests/btparser/utils.at | 442 ----- tests/strbuf.at | 2 +- tests/testsuite.at | 4 - 36 files changed, 14 insertions(+), 8679 deletions(-) delete mode 100644 src/btparser/Makefile.am delete mode 100644 src/btparser/backtrace.c delete mode 100644 src/btparser/backtrace.h delete mode 100644 src/btparser/btparser.pc.in delete mode 100644 src/btparser/frame.c delete mode 100644 src/btparser/frame.h delete mode 100644 src/btparser/location.c delete mode 100644 src/btparser/location.h delete mode 100644 src/btparser/normalize.c delete mode 100644 src/btparser/normalize.h delete mode 100644 src/btparser/normalize_dbus.c delete mode 100644 src/btparser/normalize_gdk.c delete mode 100644 src/btparser/normalize_glib.c delete mode 100644 src/btparser/normalize_glibc.c delete mode 100644 src/btparser/normalize_libstdcpp.c delete mode 100644 src/btparser/normalize_linux.c delete mode 100644 src/btparser/normalize_xorg.c delete mode 100644 src/btparser/thread.c delete mode 100644 src/btparser/thread.h delete mode 100644 src/btparser/utils.c delete mode 100644 src/btparser/utils.h delete mode 100644 tests/btparser/Makefile.am delete mode 100644 tests/btparser/backtrace.at delete mode 100644 tests/btparser/backtraces/621492.bt delete mode 100644 tests/btparser/frame.at delete mode 100644 tests/btparser/thread.at delete mode 100644 tests/btparser/utils.at diff --git a/abrt.spec.in b/abrt.spec.in index 143e8b65..3dc4e6ed 100644 --- a/abrt.spec.in +++ b/abrt.spec.in @@ -36,6 +36,7 @@ BuildRequires: nss-devel BuildRequires: asciidoc BuildRequires: xmlto BuildRequires: libreport-devel +BuildRequires: btparser-devel # for rhel6 %if 0%{?rhel} >= 6 @@ -398,14 +399,11 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : %files libs %defattr(-,root,root,-) %{_libdir}/libabrt*.so.* -%{_libdir}/libbtparser.so.* %files devel %defattr(-,root,root,-) %{_includedir}/abrt/* %{_libdir}/libabrt*.so -%{_includedir}/btparser/* -%{_libdir}/libbtparser.so #FIXME: this should go to libreportgtk-devel package %{_libdir}/pkgconfig/* diff --git a/configure.ac b/configure.ac index 0c4e42dd..efd70234 100644 --- a/configure.ac +++ b/configure.ac @@ -67,6 +67,7 @@ PKG_CHECK_MODULES([NSS], [nss]) PKG_CHECK_MODULES([XMLRPC], [xmlrpc]) PKG_CHECK_MODULES([XMLRPC_CLIENT], [xmlrpc_client]) PKG_CHECK_MODULES([GNOME_KEYRING], [gnome-keyring-1]) +PKG_CHECK_MODULES([BTPARSER], [btparser]) PKG_CHECK_MODULES([LIBREPORT], [libreport]) PKG_CHECK_MODULES([LIBREPORT_GTK], [libreport-gtk]) # Just PKG_CHECK_MODULES([PYTHON], [python]) works only with python2.7+ @@ -137,8 +138,6 @@ AC_CONFIG_FILES([ src/lib/Makefile src/plugins/Makefile src/Makefile - src/btparser/Makefile - src/btparser/btparser.pc src/daemon/Makefile src/hooks/Makefile src/applet/Makefile diff --git a/src/Makefile.am b/src/Makefile.am index 3154d5c4..2e368af8 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1 +1 @@ -SUBDIRS = include lib hooks btparser daemon applet gui-gtk cli plugins +SUBDIRS = include lib hooks daemon applet gui-gtk cli plugins diff --git a/src/btparser/Makefile.am b/src/btparser/Makefile.am deleted file mode 100644 index bdf4d900..00000000 --- a/src/btparser/Makefile.am +++ /dev/null @@ -1,57 +0,0 @@ -lib_LTLIBRARIES = libbtparser.la -libbtparser_la_SOURCES = \ - backtrace.h backtrace.c \ - frame.h frame.c \ - location.h location.c \ - normalize.h normalize.c \ - normalize_dbus.c \ - normalize_gdk.c \ - normalize_glib.c \ - normalize_glibc.c \ - normalize_libstdcpp.c \ - normalize_linux.c \ - normalize_xorg.c \ - thread.h thread.c \ - utils.h utils.c -libbtparser_la_CFLAGS = -Wall -Wwrite-strings -Werror -D_GNU_SOURCE -I../lib $(LIBREPORT_CFLAGS) -libbtparser_la_LDFLAGS = -version-info 1:1:0 -libbtparser_la_LIBADD = $(LIBREPORT_LIBS) - -libbtparser_includedir = $(includedir)/btparser -libbtparser_include_HEADERS = \ - backtrace.h \ - frame.h \ - location.h \ - normalize.h \ - thread.h \ - utils.h - -pkgconfigdir = $(libdir)/pkgconfig -pkgconfig_DATA = btparser.pc -EXTRA_DIST = btparser.pc.in - -# From http://www.seul.org/docs/autotut/ -# Version consists 3 numbers: CURRENT, REVISION, AGE. -# CURRENT is the version of the interface the library implements. -# Whenever a new function is added, or its name changed, or -# the number or type of its parameters (the prototype -- in -# libraries we call this the function signature), this number -# goes up. And it goes up exactly by one. -# -# REVISION is the revision of the implementation of this -# interface, i.e., when you change the library by only modifying -# code inside the functions (fixing bugs, optimizing internal -# behavior, or adding/removing/changing signatures of functions -# that are private to the library -- used only internally) you -# raise the revision number only. -# -# Age is the difference between the newest and oldest interface -# the library currently implements. Let's say you had 8 versions -# of your library's interface, 0 through 7. You are now on -# the 4th revision of the 8th interface, that is, 7:3:X (remember -# we start counting on zero). And when you had to make choices -# for what old interfaces you would keep support -- for backward -# compatibility purposes, you chose to keep support for -# interfaces 5, 6 and (obviously) the current, 7. The libtool -# version of your library would be 7:3:2 , because the Age -# is 7-5 = 2. diff --git a/src/btparser/backtrace.c b/src/btparser/backtrace.c deleted file mode 100644 index 139b315d..00000000 --- a/src/btparser/backtrace.c +++ /dev/null @@ -1,445 +0,0 @@ -/* - backtrace.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 "backtrace.h" -#include "thread.h" -#include "frame.h" -#include "utils.h" -#include "strbuf.h" -#include "location.h" -#include "normalize.h" -#include -#include -#include -#include - -struct btp_backtrace * -btp_backtrace_new() -{ - struct btp_backtrace *backtrace = btp_malloc(sizeof(struct btp_backtrace)); - btp_backtrace_init(backtrace); - return backtrace; -} - -void -btp_backtrace_init(struct btp_backtrace *backtrace) -{ - backtrace->threads = NULL; - backtrace->crash = NULL; -} - -void -btp_backtrace_free(struct btp_backtrace *backtrace) -{ - if (!backtrace) - return; - - while (backtrace->threads) - { - struct btp_thread *rm = backtrace->threads; - backtrace->threads = rm->next; - btp_thread_free(rm); - } - - if (backtrace->crash) - btp_frame_free(backtrace->crash); - - free(backtrace); -} - -struct btp_backtrace * -btp_backtrace_dup(struct btp_backtrace *backtrace) -{ - struct btp_backtrace *result = btp_backtrace_new(); - memcpy(result, backtrace, sizeof(struct btp_backtrace)); - - if (backtrace->crash) - backtrace->crash = btp_frame_dup(backtrace->crash, false); - if (backtrace->threads) - backtrace->threads = btp_thread_dup(backtrace->threads, true); - - return result; -} - -int -btp_backtrace_get_thread_count(struct btp_backtrace *backtrace) -{ - struct btp_thread *thread = backtrace->threads; - int count = 0; - while (thread) - { - thread = thread->next; - ++count; - } - return count; -} - -void -btp_backtrace_remove_threads_except_one(struct btp_backtrace *backtrace, - struct btp_thread *thread) -{ - while (backtrace->threads) - { - struct btp_thread *delete_thread = backtrace->threads; - backtrace->threads = delete_thread->next; - if (delete_thread != thread) - btp_thread_free(delete_thread); - } - - thread->next = NULL; - backtrace->threads = thread; -} - -/** - * Loop through all threads and if a single one contains the crash - * frame on the top, return it. Otherwise, return NULL. - * - * If require_abort is true, it is also required that the thread - * containing the crash frame contains some known "abort" function. In - * this case there can be multiple threads with the crash frame on the - * top, but only one of them might contain the abort function to - * succeed. - */ -static struct btp_thread * -btp_backtrace_find_crash_thread_from_crash_frame(struct btp_backtrace *backtrace, - bool require_abort) -{ - if (btp_debug_parser) - printf("%s(backtrace, %s)\n", __FUNCTION__, require_abort ? "true" : "false"); - - assert(backtrace->threads); /* checked by the caller */ - if (!backtrace->crash || !backtrace->crash->function_name) - return NULL; - - struct btp_thread *result = NULL; - struct btp_thread *thread = backtrace->threads; - while (thread) - { - struct btp_frame *top_frame = thread->frames; - bool same_name = top_frame && - top_frame->function_name && - 0 == strcmp(top_frame->function_name, backtrace->crash->function_name); - bool abort_requirement_satisfied = !require_abort || - btp_glibc_thread_find_exit_frame(thread); - if (btp_debug_parser) - { - printf(" - thread #%d: same_name %s, abort_satisfied %s\n", - thread->number, - same_name ? "true" : "false", - abort_requirement_satisfied ? "true" : "false"); - } - - if (same_name && abort_requirement_satisfied) - { - if (NULL == result) - result = thread; - else - { - /* Second frame with the same function. Failure. */ - return NULL; - } - } - - thread = thread->next; - } - - return result; -} - -struct btp_thread * -btp_backtrace_find_crash_thread(struct btp_backtrace *backtrace) -{ - /* If there is no thread, be silent and report NULL. */ - if (!backtrace->threads) - return NULL; - - /* If there is just one thread, it is simple. */ - if (!backtrace->threads->next) - return backtrace->threads; - - /* If we have a crash frame *and* there is just one thread which has - * this frame on the top, it is also simple. - */ - struct btp_thread *thread; - thread = btp_backtrace_find_crash_thread_from_crash_frame(backtrace, false); - if (thread) - return thread; - - /* There are multiple threads with a frame indistinguishable from - * the crash frame on the top of stack. - * Try to search for known abort functions. - */ - thread = btp_backtrace_find_crash_thread_from_crash_frame(backtrace, true); - - /* We might want to search a thread with known abort function, and - * without the crash frame here. However, it hasn't been needed so - * far. - */ - return thread; /* result or null */ -} - - -void -btp_backtrace_limit_frame_depth(struct btp_backtrace *backtrace, - int depth) -{ - assert(depth > 0); - struct btp_thread *thread = backtrace->threads; - while (thread) - { - btp_thread_remove_frames_below_n(thread, depth); - thread = thread->next; - } -} - -float -btp_backtrace_quality_simple(struct btp_backtrace *backtrace) -{ - int ok_count = 0, all_count = 0; - struct btp_thread *thread = backtrace->threads; - while (thread) - { - btp_thread_quality_counts(thread, &ok_count, &all_count); - thread = thread->next; - } - - if (all_count == 0) - return 0; - - return ok_count / (float)all_count; -} - -float -btp_backtrace_quality_complex(struct btp_backtrace *backtrace) -{ - backtrace = btp_backtrace_dup(backtrace); - - /* Find the crash thread, and then normalize the backtrace. It is - * not possible to find the crash thread after the backtrace has - * been normalized. - */ - struct btp_thread *crash_thread = btp_backtrace_find_crash_thread(backtrace); - btp_normalize_backtrace(backtrace); - - /* Get the quality q1 of the full backtrace. */ - float q1 = btp_backtrace_quality_simple(backtrace); - - if (!crash_thread) - { - btp_backtrace_free(backtrace); - return q1; - } - - /* Get the quality q2 of the crash thread. */ - float q2 = btp_thread_quality(crash_thread); - - /* Get the quality q3 of the frames around the crash. First, - * duplicate the crash thread so we can cut it. Then find an exit - * frame, and remove it and everything above it - * (__run_exit_handlers and such). Then remove all the redundant - * frames (assert calls etc.) Then limit the frame count to 5. - */ - btp_thread_remove_frames_below_n(crash_thread, 5); - float q3 = btp_thread_quality(crash_thread); - - btp_backtrace_free(backtrace); - - /* Compute and return the final backtrace quality q. */ - return 0.25f * q1 + 0.35f * q2 + 0.4f * q3; -} - -char * -btp_backtrace_to_text(struct btp_backtrace *backtrace, bool verbose) -{ - struct strbuf *str = strbuf_new(); - if (verbose) - { - strbuf_append_strf(str, "Thread count: %d\n", - btp_backtrace_get_thread_count(backtrace)); - } - - if (backtrace->crash && verbose) - { - strbuf_append_str(str, "Crash frame: "); - btp_frame_append_to_str(backtrace->crash, str, verbose); - } - - struct btp_thread *thread = backtrace->threads; - while (thread) - { - btp_thread_append_to_str(thread, str, verbose); - thread = thread->next; - } - - return strbuf_free_nobuf(str); -} - -struct btp_frame * -btp_backtrace_get_crash_frame(struct btp_backtrace *backtrace) -{ - backtrace = btp_backtrace_dup(backtrace); - - struct btp_thread *crash_thread = btp_backtrace_find_crash_thread(backtrace); - if (!crash_thread) - { - btp_backtrace_free(backtrace); - return NULL; - } - - btp_normalize_backtrace(backtrace); - struct btp_frame *crash_frame = crash_thread->frames; - crash_frame = btp_frame_dup(crash_frame, false); - btp_backtrace_free(backtrace); - return crash_frame; -} - -char * -btp_backtrace_get_duplication_hash(struct btp_backtrace *backtrace) -{ - backtrace = btp_backtrace_dup(backtrace); - struct btp_thread *crash_thread = btp_backtrace_find_crash_thread(backtrace); - if (crash_thread) - btp_backtrace_remove_threads_except_one(backtrace, crash_thread); - - btp_normalize_backtrace(backtrace); - btp_backtrace_limit_frame_depth(backtrace, 3); - char *hash = btp_backtrace_to_text(backtrace, false); - btp_backtrace_free(backtrace); - return hash; -} - -struct btp_backtrace * -btp_backtrace_parse(char **input, - struct btp_location *location) -{ - char *local_input = *input; - struct btp_backtrace *imbacktrace = btp_backtrace_new(); /* im - intermediate */ - - /* The header is mandatory, but it might contain no frame header, - * in some broken backtraces. In that case, backtrace.crash value - * is kept as NULL. - */ - if (!btp_backtrace_parse_header(&local_input, - &imbacktrace->crash, - location)) - { - btp_backtrace_free(imbacktrace); - return NULL; - } - - struct btp_thread *thread, *prevthread = NULL; - while ((thread = btp_thread_parse(&local_input, location))) - { - if (prevthread) - { - btp_thread_add_sibling(prevthread, thread); - prevthread = thread; - } - else - imbacktrace->threads = prevthread = thread; - } - if (!imbacktrace->threads) - { - btp_backtrace_free(imbacktrace); - return NULL; - } - - *input = local_input; - return imbacktrace; -} - -bool -btp_backtrace_parse_header(char **input, - struct btp_frame **frame, - struct btp_location *location) -{ - int first_thread_line, first_thread_column; - char *first_thread = btp_strstr_location(*input, - "\nThread ", - &first_thread_line, - &first_thread_column); - - /* Skip the newline. */ - if (first_thread) - { - ++first_thread; - first_thread_line += 1; - first_thread_column = 0; - } - - int first_frame_line, first_frame_column; - char *first_frame = btp_strstr_location(*input, - "\n#", - &first_frame_line, - &first_frame_column); - - /* Skip the newline. */ - if (first_frame) - { - ++first_frame; - first_frame_line += 1; - first_frame_column = 0; - } - - if (first_thread) - { - if (first_frame && first_frame < first_thread) - { - /* Common case. The crash frame is present in the input - * before the list of threads begins. - */ - *input = first_frame; - btp_location_add(location, first_frame_line, first_frame_column); - } - else - { - /* Uncommon case (caused by some kernel bug) where the - * frame is missing from the header. The backtrace - * contains just threads. We silently skip the header and - * return true. - */ - *input = first_thread; - btp_location_add(location, - first_thread_line, - first_thread_column); - *frame = NULL; - return true; - } - } - else if (first_frame) - { - /* Degenerate case when the backtrace contains no thread, but - * the frame is there. - */ - *input = first_frame; - btp_location_add(location, first_frame_line, first_frame_column); - } - else - { - /* Degenerate case where the input is empty or completely - * meaningless. Report a failure. - */ - location->message = "No frame and no thread found."; - return false; - } - - /* Parse the frame header. */ - *frame = btp_frame_parse(input, location); - return *frame; -} diff --git a/src/btparser/backtrace.h b/src/btparser/backtrace.h deleted file mode 100644 index d5de3ff3..00000000 --- a/src/btparser/backtrace.h +++ /dev/null @@ -1,269 +0,0 @@ -/* - backtrace.h - - 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. -*/ -#ifndef BTPARSER_BACKTRACE_H -#define BTPARSER_BACKTRACE_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -struct btp_thread; -struct btp_frame; -struct btp_location; - -/** - * A backtrace obtained at the time of a program crash, consisting of - * several threads which contains frames. - */ -struct btp_backtrace -{ - struct btp_thread *threads; - /** - * The frame where the crash happened according to debugger. It - * might be that we can not tell to which thread this frame - * belongs, because some threads end with mutually - * indistinguishable frames. - */ - struct btp_frame *crash; -}; - -/** - * Creates and initializes a new backtrace structure. - * @returns - * It never returns NULL. The returned pointer must be released by - * calling the function btp_backtrace_free(). - */ -struct btp_backtrace * -btp_backtrace_new(); - -/** - * Initializes all members of the backtrace structure to their default - * values. No memory is released, members are simply overwritten. - * This is useful for initializing a backtrace structure placed on the - * stack. - */ -void -btp_backtrace_init(struct btp_backtrace *backtrace); - -/** - * Releases the memory held by the backtrace, its threads and frames. - * @param backtrace - * If the backtrace is NULL, no operation is performed. - */ -void -btp_backtrace_free(struct btp_backtrace *backtrace); - -/** - * Creates a duplicate of the backtrace. - * @param backtrace - * The backtrace to be copied. It's not modified by this function. - * @returns - * This function never returns NULL. If the returned duplicate is not - * shallow, it must be released by calling the function - * btp_backtrace_free(). - */ -struct btp_backtrace * -btp_backtrace_dup(struct btp_backtrace *backtrace); - -/** - * Returns a number of threads in the backtrace. - * @param backtrace - * It's not modified by calling this function. - */ -int -btp_backtrace_get_thread_count(struct btp_backtrace *backtrace); - -/** - * Removes all threads from the backtrace and deletes them, except the - * one provided as a parameter. - * @param thread - * This function does not check whether the thread is a member of the backtrace. - * If it's not, all threads are removed from the backtrace and then deleted. - */ -void -btp_backtrace_remove_threads_except_one(struct btp_backtrace *backtrace, - struct btp_thread *thread); - -/** - * Search all threads and tries to find the one that caused the crash. - * It might return NULL if the thread cannot be determined. - * @param backtrace - * It must be non-NULL pointer. It's not modified by calling this - * function. - */ -struct btp_thread * -btp_backtrace_find_crash_thread(struct btp_backtrace *backtrace); - -/** - * Remove frames from the bottom of threads in the backtrace, until - * all threads have at most 'depth' frames. - * @param backtrace - * Must be non-NULL pointer. - */ -void -btp_backtrace_limit_frame_depth(struct btp_backtrace *backtrace, - int depth); - -/** - * Evaluates the quality of the backtrace. The quality is the ratio of - * the number of frames with function name fully known to the number - * of all frames. This function does not take into account that some - * frames are more important than others. - * @param backtrace - * It must be non-NULL pointer. It's not modified by calling this - * function. - * @returns - * A number between 0 and 1. 0 means the lowest quality, 1 means full - * backtrace is known. - */ -float -btp_backtrace_quality_simple(struct btp_backtrace *backtrace); - -/** - * Evaluates the quality of the backtrace. The quality is determined - * depending on the ratio of frames with function name fully known to - * all frames. - * @param backtrace - * It must be non-NULL pointer. It's not modified by calling this - * function. - * @returns - * A number between 0 and 1. 0 means the lowest quality, 1 means full - * backtrace is known. The returned value takes into account that the - * thread which caused the crash is more important than the other - * threads, and the frames around the crash frame are more important - * than distant frames. - */ -float -btp_backtrace_quality_complex(struct btp_backtrace *backtrace); - -/** - * Returns textual representation of the backtrace. - * @param backtrace - * It must be non-NULL pointer. It's not modified by calling this - * function. - * @returns - * This function never returns NULL. The caller is responsible for - * releasing the returned memory using function free(). - */ -char * -btp_backtrace_to_text(struct btp_backtrace *backtrace, - bool verbose); - -/** - * Analyzes the backtrace to get the frame where a crash occurred. - * @param backtrace - * It must be non-NULL pointer. It's not modified by calling this - * function. - * @returns - * The returned value must be released by calling btp_frame_free(), - * when it's no longer needed. NULL is returned if the crash frame is - * not found. - */ -struct btp_frame * -btp_backtrace_get_crash_frame(struct btp_backtrace *backtrace); - -/** - * Calculates the duplication hash string of the backtrace. - * @param backtrace - * It must be non-NULL pointer. It's not modified by calling this - * function. - * @returns - * This function never returns NULL. The caller is responsible for - * releasing the returned memory using function free(). - */ -char * -btp_backtrace_get_duplication_hash(struct btp_backtrace *backtrace); - -/** - * Parses a textual backtrace and puts it into a structure. If - * parsing fails, the input parameter is not changed and NULL is - * returned. - * @code - * struct btp_location location; - * btp_location_init(&location); - * char *input = "..."; - * struct btp_backtrace *backtrace = btp_backtrace_parse(input, location; - * if (!backtrace) - * { - * fprintf(stderr, - * "Failed to parse the backtrace.\n" - * "Line %d, column %d: %s\n", - * location.line, - * location.column, - * location.message); - * exit(-1); - * } - * btp_backtrace_free(backtrace); - * @endcode - * @param input - * Pointer to the string with the backtrace. If this function returns - * true, this pointer is modified to point after the backtrace that - * was just parsed. - * @param location - * The caller must provide a pointer to an instance of btp_location - * here. The line and column members of the location are gradually - * increased as the parser handles the input, so the location should - * be initialized before calling this function to get reasonable - * values. When this function returns false (an error occurred), the - * structure will contain the error line, column, and message. - * @returns - * A newly allocated backtrace structure or NULL. A backtrace struct - * is returned when at least one thread was parsed from the input and - * no error occurred. The returned structure should be released by - * btp_backtrace_free(). - */ -struct btp_backtrace * -btp_backtrace_parse(char **input, - struct btp_location *location); - -/** - * Parse backtrace header if it is available in the backtrace. The - * header usually contains frame where the program crashed. - * @param input - * Pointer moved to point behind the header if the header is - * successfully detected and parsed. - * @param frame - * If this function succeeds and returns true, *frame contains the - * crash frame that is usually a part of the header. If no frame is - * detected in the header, *frame is set to NULL. - * @code - * [New Thread 11919] - * [New Thread 11917] - * Core was generated by `evince file:///tmp/Factura04-05-2010.pdf'. - * Program terminated with signal 8, Arithmetic exception. - * #0 0x000000322a2362b9 in repeat (image=, - * mask=, mask_bits=) - * at pixman-bits-image.c:145 - * 145 pixman-bits-image.c: No such file or directory. - * in pixman-bits-image.c - * @endcode - */ -bool -btp_backtrace_parse_header(char **input, - struct btp_frame **frame, - struct btp_location *location); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/src/btparser/btparser.pc.in b/src/btparser/btparser.pc.in deleted file mode 100644 index 58cfa400..00000000 --- a/src/btparser/btparser.pc.in +++ /dev/null @@ -1,10 +0,0 @@ -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir=@includedir@ - -Name: btparser -Description: Library to parse and analyze backtraces produced by the GNU Project Debugger -Version: @PACKAGE_VERSION@ -Libs: -L${libdir} -lbtparser -Cflags: -I${includedir} diff --git a/src/btparser/frame.c b/src/btparser/frame.c deleted file mode 100644 index 2bfae070..00000000 --- a/src/btparser/frame.c +++ /dev/null @@ -1,1027 +0,0 @@ -/* - frame.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 "frame.h" -#include "strbuf.h" -#include "utils.h" -#include "location.h" -#include -#include -#include - -struct btp_frame * -btp_frame_new() -{ - struct btp_frame *frame = btp_malloc(sizeof(struct btp_frame)); - btp_frame_init(frame); - return frame; -} - -void -btp_frame_init(struct btp_frame *frame) -{ - frame->function_name = NULL; - frame->function_type = NULL; - frame->number = 0; - frame->source_file = NULL; - frame->source_line = -1; - frame->signal_handler_called = false; - frame->address = -1; - frame->next = NULL; -} - -void -btp_frame_free(struct btp_frame *frame) -{ - if (!frame) - return; - free(frame->function_name); - free(frame->function_type); - free(frame->source_file); - free(frame); -} - -struct btp_frame * -btp_frame_dup(struct btp_frame *frame, bool siblings) -{ - struct btp_frame *result = btp_frame_new(); - memcpy(result, frame, sizeof(struct btp_frame)); - - /* Handle siblings. */ - if (siblings) - { - if (result->next) - result->next = btp_frame_dup(result->next, true); - } - else - result->next = NULL; /* Do not copy that. */ - - /* Duplicate all strings if the copy is not shallow. */ - if (result->function_name) - result->function_name = btp_strdup(result->function_name); - if (result->function_type) - result->function_type = btp_strdup(result->function_type); - if (result->source_file) - result->source_file = btp_strdup(result->source_file); - - return result; -} - -bool -btp_frame_calls_func(struct btp_frame *frame, - const char *function_name) -{ - return frame->function_name && - 0 == strcmp(frame->function_name, function_name); -} - -bool -btp_frame_calls_func_in_file(struct btp_frame *frame, - const char *function_name, - const char *source_file) -{ - return frame->function_name && - 0 == strcmp(frame->function_name, function_name) && - frame->source_file && - NULL != strstr(frame->source_file, source_file); -} - -bool -btp_frame_calls_func_in_file2(struct btp_frame *frame, - const char *function_name, - const char *source_file0, - const char *source_file1) -{ - return frame->function_name && - 0 == strcmp(frame->function_name, function_name) && - frame->source_file && - (NULL != strstr(frame->source_file, source_file0) || - NULL != strstr(frame->source_file, source_file1)); -} - -bool -btp_frame_calls_func_in_file3(struct btp_frame *frame, - const char *function_name, - const char *source_file0, - const char *source_file1, - const char *source_file2) -{ - return frame->function_name && - 0 == strcmp(frame->function_name, function_name) && - frame->source_file && - (NULL != strstr(frame->source_file, source_file0) || - NULL != strstr(frame->source_file, source_file1) || - NULL != strstr(frame->source_file, source_file2)); -} - -bool -btp_frame_calls_func_in_file4(struct btp_frame *frame, - const char *function_name, - const char *source_file0, - const char *source_file1, - const char *source_file2, - const char *source_file3) -{ - return frame->function_name && - 0 == strcmp(frame->function_name, function_name) && - frame->source_file && - (NULL != strstr(frame->source_file, source_file0) || - NULL != strstr(frame->source_file, source_file1) || - NULL != strstr(frame->source_file, source_file2) || - NULL != strstr(frame->source_file, source_file3)); -} - -int -btp_frame_cmp(struct btp_frame *f1, - struct btp_frame *f2, - bool compare_number) -{ - /* Singnal handler. */ - if (f1->signal_handler_called) - { - if (!f2->signal_handler_called) - return 1; - - /* Both contain signal handler called. */ - return 0; - } - else - { - if (f2->signal_handler_called) - return -1; - /* No signal handler called, continue. */ - } - - /* Function. */ - int function_name = btp_strcmp0(f1->function_name, f2->function_name); - if (function_name != 0) - return function_name; - int function_type = btp_strcmp0(f1->function_type, f2->function_type); - if (function_type != 0) - return function_type; - - /* Sourcefile. */ - int source_file = btp_strcmp0(f1->source_file, f2->source_file); - if (source_file != 0) - return source_file; - - /* Sourceline. */ - int source_line = f1->source_line - f2->source_line; - if (source_line != 0) - return source_line; - - /* Frame number. */ - if (compare_number) - { - int number = f1->number - f2->number; - if (number != 0) - return number; - } - - return 0; -} - -void -btp_frame_add_sibling(struct btp_frame *a, struct btp_frame *b) -{ - struct btp_frame *aa = a; - while (aa->next) - aa = aa->next; - - aa->next = b; -} - -void -btp_frame_append_to_str(struct btp_frame *frame, - struct strbuf *str, - bool verbose) -{ - if (verbose) - strbuf_append_strf(str, " #%d", frame->number); - else - strbuf_append_str(str, " "); - - if (frame->function_type) - strbuf_append_strf(str, " %s", frame->function_type); - if (frame->function_name) - strbuf_append_strf(str, " %s", frame->function_name); - if (verbose && frame->source_file) - { - if (frame->function_name) - strbuf_append_str(str, " at"); - strbuf_append_strf(str, " %s", frame->source_file); - } - - if (frame->signal_handler_called) - strbuf_append_str(str, " "); - - strbuf_append_str(str, "\n"); -} - -/** - * Find string a or b in input, whatever comes first. - * If no string is found, return the \0 character at the end of input. - */ -static char * -findfirstabnul(char *input, const char *a, const char *b) -{ - size_t alen = strlen(a); - size_t blen = strlen(b); - char *p = input; - while (*p) - { - if (strncmp(p, a, alen) == 0) - return p; - if (strncmp(p, b, blen) == 0) - return p; - ++p; - } - return p; -} - -struct btp_frame * -btp_frame_parse(char **input, - struct btp_location *location) -{ - char *local_input = *input; - struct btp_frame *header = btp_frame_parse_header(input, location); - if (!header) - return NULL; - - /* Skip the variables section for now. */ - /* Todo: speedup by implementing strstrnul. */ - local_input = findfirstabnul(local_input, "\n#", "\nThread"); - if (*local_input != '\0') - ++local_input; /* ++ skips the newline */ - - if (btp_debug_parser) - { - printf("frame #%u %s\n", - header->number, - header->function_name ? header->function_name : "signal handler called"); - } - - *input = local_input; - return header; -} - -int -btp_frame_parse_frame_start(char **input, unsigned *number) -{ - char *local_input = *input; - - /* Read the hash sign. */ - if (!btp_skip_char(&local_input, '#')) - return 0; - int count = 1; - - /* Read the frame position. */ - int digits = btp_parse_unsigned_integer(&local_input, number); - count += digits; - if (0 == digits) - return 0; - - /* Read all the spaces after the positon. */ - int spaces = btp_skip_char_sequence(&local_input, ' '); - count += spaces; - if (0 == spaces) - return 0; - - *input = local_input; - return count; -} - -int -btp_frame_parseadd_operator(char **input, struct strbuf *target) -{ - char *local_input = *input; - if (0 == btp_skip_string(&local_input, "operator")) - return 0; - -#define OP(x) \ - if (0 < btp_skip_string(&local_input, x)) \ - { \ - strbuf_append_str(target, "operator"); \ - strbuf_append_str(target, x); \ - int length = local_input - *input; \ - *input = local_input; \ - return length; \ - } - - OP(">>=")OP(">>")OP(">=")OP(">"); - OP("<<=")OP("<<")OP("<=")OP("<"); - OP("->*")OP("->")OP("-"); - OP("==")OP("="); - OP("&&")OP("&=")OP("&"); - OP("||")OP("|=")OP("|"); - OP("++")OP("+=")OP("+"); - OP("--")OP("-=")OP("-"); - OP("/=")OP("/"); - OP("*=")OP("*"); - OP("%=")OP("%"); - OP("!=")OP("!"); - OP("~"); - OP("()"); - OP("[]"); - OP(","); - OP("^=")OP("^"); - OP(" new[]")OP(" new"); - OP(" delete[]")OP(" delete"); - /* User defined operators are not parsed. - Should they be? */ -#undef OP - return 0; -} - -#define FUNCTION_NAME_CHARS BTP_alnum "@.:=!*+-[]~&/%^|,_" - -int -btp_frame_parse_function_name_chunk(char **input, - bool space_allowed, - char **target) -{ - char *local_input = *input; - struct strbuf *buf = strbuf_new(); - while (*local_input) - { - if (0 < btp_frame_parseadd_operator(&local_input, buf)) - { - /* Space is allowed after operator even when it - is not normally allowed. */ - if (btp_skip_char(&local_input, ' ')) - { - /* ...but if ( follows, it is not allowed. */ - if (btp_skip_char(&local_input, '(')) - { - /* Return back both the space and (. */ - local_input -= 2; - } - else - strbuf_append_char(buf, ' '); - } - } - - if (strchr(FUNCTION_NAME_CHARS, *local_input) == NULL) - { - if (!space_allowed || strchr(" ", *local_input) == NULL) - break; - } - - strbuf_append_char(buf, *local_input); - ++local_input; - } - - if (buf->len == 0) - { - strbuf_free(buf); - return 0; - } - - *target = strbuf_free_nobuf(buf); - int total_char_count = local_input - *input; - *input = local_input; - return total_char_count; -} - -int -btp_frame_parse_function_name_braces(char **input, char **target) -{ - char *local_input = *input; - if (!btp_skip_char(&local_input, '(')) - return 0; - - struct strbuf *buf = strbuf_new(); - strbuf_append_char(buf, '('); - while (true) - { - char *namechunk = NULL; - if (0 < btp_frame_parse_function_name_chunk(&local_input, true, &namechunk) || - 0 < btp_frame_parse_function_name_braces(&local_input, &namechunk) || - 0 < btp_frame_parse_function_name_template(&local_input, &namechunk)) - { - strbuf_append_str(buf, namechunk); - free(namechunk); - } - else - break; - } - - if (!btp_skip_char(&local_input, ')')) - { - strbuf_free(buf); - return 0; - } - - strbuf_append_char(buf, ')'); - *target = strbuf_free_nobuf(buf); - int total_char_count = local_input - *input; - *input = local_input; - return total_char_count; -} - -int -btp_frame_parse_function_name_template(char **input, char **target) -{ - char *local_input = *input; - if (!btp_skip_char(&local_input, '<')) - return 0; - - struct strbuf *buf = strbuf_new(); - strbuf_append_char(buf, '<'); - while (true) - { - char *namechunk = NULL; - if (0 < btp_frame_parse_function_name_chunk(&local_input, true, &namechunk) || - 0 < btp_frame_parse_function_name_braces(&local_input, &namechunk) || - 0 < btp_frame_parse_function_name_template(&local_input, &namechunk)) - { - strbuf_append_str(buf, namechunk); - free(namechunk); - } - else - break; - } - - if (!btp_skip_char(&local_input, '>')) - { - strbuf_free(buf); - return 0; - } - - strbuf_append_char(buf, '>'); - *target = strbuf_free_nobuf(buf); - int total_char_count = local_input - *input; - *input = local_input; - return total_char_count; -} - -bool -btp_frame_parse_function_name(char **input, - char **function_name, - char **function_type, - struct btp_location *location) -{ - /* Handle unknown function name, represended by double question - mark. */ - if (btp_parse_string(input, "??", function_name)) - { - *function_type = NULL; - location->column += 2; - return true; - } - - char *local_input = *input; - /* Up to three parts of function name. */ - struct strbuf *buf0 = strbuf_new(), *buf1 = NULL; - - /* First character: - '~' for destructor - '*' for ???? - '_a-zA-Z' for mangled/nonmangled function name - '(' to start "(anonymous namespace)::" or something - */ - char first; - char *namechunk; - if (btp_parse_char_limited(&local_input, "~*_" BTP_alpha, &first)) - { - /* If it's a start of 'o'perator, put the 'o' back! */ - if (first == 'o') - --local_input; - else - { - strbuf_append_char(buf0, first); - ++location->column; - } - } - else - { - int chars = btp_frame_parse_function_name_braces(&local_input, - &namechunk); - if (0 < chars) - { - strbuf_append_str(buf0, namechunk); - free(namechunk); - location->column += chars; - } - else - { - location->message = "Expected function name."; - strbuf_free(buf0); - return false; - } - } - - /* The rest consists of function name, braces, templates...*/ - while (true) - { - char *namechunk = NULL; - int chars = btp_frame_parse_function_name_chunk(&local_input, - false, - &namechunk); - - if (0 == chars) - { - chars = btp_frame_parse_function_name_braces(&local_input, - &namechunk); - } - - if (0 == chars) - { - chars = btp_frame_parse_function_name_template(&local_input, - &namechunk); - } - - if (0 == chars) - break; - - strbuf_append_str(buf0, namechunk); - free(namechunk); - location->column += chars; - } - - /* Function name MUST be ended by empty space. */ - char space; - if (!btp_parse_char_limited(&local_input, BTP_space, &space)) - { - strbuf_free(buf0); - location->message = "Space or newline expected after function name."; - return false; - } - - /* Some C++ function names and function types might contain suffix - " const". */ - int chars = btp_skip_string(&local_input, "const"); - if (0 < chars) - { - strbuf_append_char(buf0, space); - btp_location_eat_char(location, space); - strbuf_append_str(buf0, "const"); - location->column += chars; - - /* Check the empty space after function name again.*/ - if (!btp_parse_char_limited(&local_input, BTP_space, &space)) - { - /* Function name MUST be ended by empty space. */ - strbuf_free(buf0); - location->message = "Space or newline expected after function name."; - return false; - } - } - - /* Maybe the first series was just a type of the function, and now - the real function follows. Now, we know it must not start with - '(', nor with '<'. */ - chars = btp_frame_parse_function_name_chunk(&local_input, - false, - &namechunk); - if (0 < chars) - { - /* Eat the space separator first. */ - btp_location_eat_char(location, space); - - buf1 = strbuf_new(); - strbuf_append_str(buf1, namechunk); - free(namechunk); - location->column += chars; - - /* The rest consists of a function name parts, braces, templates...*/ - while (true) - { - char *namechunk = NULL; - chars = btp_frame_parse_function_name_chunk(&local_input, - false, - &namechunk); - if (0 == chars) - { - chars = btp_frame_parse_function_name_braces(&local_input, - &namechunk); - } - if (0 == chars) - { - chars = btp_frame_parse_function_name_template(&local_input, - &namechunk); - } - if (0 == chars) - break; - - strbuf_append_str(buf1, namechunk); - free(namechunk); - location->column += chars; - } - - /* Function name MUST be ended by empty space. */ - if (!btp_parse_char_limited(&local_input, BTP_space, &space)) - { - strbuf_free(buf0); - strbuf_free(buf1); - location->message = "Space or newline expected after function name."; - return false; - } - } - - /* Again, some C++ function names might contain suffix " const" */ - chars = btp_skip_string(&local_input, "const"); - if (0 < chars) - { - struct strbuf *buf = buf1 ? buf1 : buf0; - strbuf_append_char(buf, space); - btp_location_eat_char(location, space); - strbuf_append_str(buf, "const"); - location->column += chars; - - /* Check the empty space after function name again.*/ - if (!btp_skip_char_limited(&local_input, BTP_space)) - { - /* Function name MUST be ended by empty space. */ - strbuf_free(buf0); - strbuf_free(buf1); - location->message = "Space or newline expected after function name."; - return false; - } - } - - /* Return back to the empty space. */ - --local_input; - - if (buf1) - { - *function_name = strbuf_free_nobuf(buf1); - *function_type = strbuf_free_nobuf(buf0); - } - else - { - *function_name = strbuf_free_nobuf(buf0); - *function_type = NULL; - } - - *input = local_input; - return true; -} - -bool -btp_frame_skip_function_args(char **input, struct btp_location *location) -{ - char *local_input = *input; - if (!btp_skip_char(&local_input, '(')) - { - location->message = "Expected '(' to start function argument list."; - return false; - } - location->column += 1; - - int depth = 0; - bool string = false; - bool escape = false; - do - { - if (string) - { - if (escape) - escape = false; - else if (*local_input == '\\') - escape = true; - else if (*local_input == '"') - string = false; - } - else - { - if (*local_input == '"') - string = true; - else if (*local_input == '(') - ++depth; - else if (*local_input == ')') - { - if (depth > 0) - --depth; - else - break; - } - } - btp_location_eat_char(location, *local_input); - ++local_input; - } - while (*local_input); - - if (depth != 0 || string || escape) - { - location->message = "Unbalanced function parameter list."; - return false; - } - - if (!btp_skip_char(&local_input, ')')) - { - location->message = "Expected ')' to close the function parameter list."; - return false; - } - location->column += 1; - - *input = local_input; - return true; -} - -bool -btp_frame_parse_function_call(char **input, - char **function_name, - char **function_type, - struct btp_location *location) -{ - char *local_input = *input; - char *name = NULL, *type = NULL; - if (!btp_frame_parse_function_name(&local_input, - &name, - &type, - location)) - { - /* The location message is set by the function returning - * false, no need to update it here. */ - return false; - } - - int line, column; - if (0 == btp_skip_char_span_location(&local_input, - " \n", - &line, - &column)) - { - free(name); - free(type); - location->message = "Expected a space or newline after the function name."; - return false; - } - btp_location_add(location, line, column); - - if (!btp_frame_skip_function_args(&local_input, location)) - { - free(name); - free(type); - /* The location message is set by the function returning - * false, no need to update it here. */ - return false; - } - - *function_name = name; - *function_type = type; - *input = local_input; - return true; -} - -bool -btp_frame_parse_address_in_function(char **input, - uint64_t *address, - char **function_name, - char **function_type, - struct btp_location *location) -{ - char *local_input = *input; - - /* Read memory address in hexadecimal format. */ - int digits = btp_parse_hexadecimal_number(&local_input, address); - location->column += digits; - if (0 == digits) - { - location->message = "Hexadecimal number representing memory address expected."; - return false; - } - - /* Skip spaces. */ - int chars = btp_skip_char_sequence(&local_input, ' '); - location->column += chars; - if (0 == chars) - { - location->message = "Space expected after memory address."; - return false; - } - - /* Skip keyword "in". */ - chars = btp_skip_string(&local_input, "in"); - location->column += chars; - if (0 == chars) - { - location->message = "Keyword \"in\" expected after memory address."; - return false; - } - - /* Skip spaces. */ - chars = btp_skip_char_sequence(&local_input, ' '); - location->column += chars; - if (0 == chars) - { - location->message = "Space expected after 'in'."; - return false; - } - - /* C++ specific case for "0xfafa in vtable for function ()" */ - chars = btp_skip_string(&local_input, "vtable"); - location->column += chars; - if (0 < chars) - { - chars = btp_skip_char_sequence(&local_input, ' '); - location->column += chars; - if (0 == chars) - { - location->message = "Space expected after 'vtable'."; - return false; - } - - chars = btp_skip_string(&local_input, "for"); - location->column += chars; - if (0 == chars) - { - location->message = "Keyword \"for\" expected."; - return false; - } - - chars = btp_skip_char_sequence(&local_input, ' '); - location->column += chars; - if (0 == chars) - { - location->message = "Space expected after 'for'."; - return false; - } - } - - if (!btp_frame_parse_function_call(&local_input, - function_name, - function_type, - location)) - { - /* Do not update location here, it has been modified by the - called function. */ - return false; - } - - *input = local_input; - return true; -} - -bool -btp_frame_parse_file_location(char **input, - char **file, - unsigned *fileline, - struct btp_location *location) -{ - char *local_input = *input; - int line, column; - if (0 == btp_skip_char_span_location(&local_input, " \n", &line, &column)) - { - location->message = "Expected a space or a newline."; - return false; - } - btp_location_add(location, line, column); - - int chars = btp_skip_string(&local_input, "at"); - if (0 == chars) - { - chars = btp_skip_string(&local_input, "from"); - if (0 == chars) - { - location->message = "Expected 'at' or 'from'."; - return false; - } - } - location->column += chars; - - int spaces = btp_skip_char_sequence(&local_input, ' '); - location->column += spaces; - if (0 == spaces) - { - location->message = "Expected a space before file location."; - return false; - } - - char *file_name; - chars = btp_parse_char_span(&local_input, BTP_alnum "_/\\+.-", &file_name); - location->column += chars; - if (0 == chars) - { - location->message = "Expected a file name."; - return false; - } - - if (btp_skip_char(&local_input, ':')) - { - location->column += 1; - int digits = btp_parse_unsigned_integer(&local_input, fileline); - location->column += digits; - if (0 == digits) - { - free(file_name); - location->message = "Expected a line number."; - return false; - } - } - else - *fileline = -1; - - *file = file_name; - *input = local_input; - return true; -} - -struct btp_frame * -btp_frame_parse_header(char **input, - struct btp_location *location) -{ - char *local_input = *input; - struct btp_frame *imframe = btp_frame_new(); /* im - intermediate */ - int chars = btp_frame_parse_frame_start(&local_input, - &imframe->number); - - location->column += chars; - if (0 == chars) - { - location->message = "Frame start sequence expected."; - btp_frame_free(imframe); - return NULL; - } - - struct btp_location internal_location; - btp_location_init(&internal_location); - if (btp_frame_parse_address_in_function(&local_input, - &imframe->address, - &imframe->function_name, - &imframe->function_type, - &internal_location)) - { - btp_location_add(location, - internal_location.line, - internal_location.column); - - /* Optional section " from file.c:65" */ - /* Optional section " at file.c:65" */ - btp_location_init(&internal_location); - if (btp_frame_parse_file_location(&local_input, - &imframe->source_file, - &imframe->source_line, - &internal_location)) - { - btp_location_add(location, - internal_location.line, - internal_location.column); - } - } - else - { - btp_location_init(&internal_location); - if (btp_frame_parse_function_call(&local_input, - &imframe->function_name, - &imframe->function_type, - &internal_location)) - { - btp_location_add(location, - internal_location.line, - internal_location.column); - - /* Mandatory section " at file.c:65" */ - btp_location_init(&internal_location); - if (!btp_frame_parse_file_location(&local_input, - &imframe->source_file, - &imframe->source_line, - &internal_location)) - { - location->message = "Function call in the frame header " - "misses mandatory \"at file.c:xy\" section"; - btp_frame_free(imframe); - return NULL; - } - - btp_location_add(location, - internal_location.line, - internal_location.column); - } - else - { - int chars = btp_skip_string(&local_input, ""); - if (0 < chars) - { - location->column += chars; - imframe->signal_handler_called = true; - } - else - { - location->message = "Frame header variant not recognized."; - btp_frame_free(imframe); - return NULL; - } - } - } - - *input = local_input; - return imframe; -} diff --git a/src/btparser/frame.h b/src/btparser/frame.h deleted file mode 100644 index 966dd5d2..00000000 --- a/src/btparser/frame.h +++ /dev/null @@ -1,470 +0,0 @@ -/* - frame.h - - 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. -*/ -#ifndef BTPARSER_FRAME_H -#define BTPARSER_FRAME_H - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -struct strbuf; -struct btp_location; - -/** - * A frame representing a function call or a signal handler on a call - * stack of a thread. - */ -struct btp_frame -{ - /** - * A function name or NULL. If it's NULL, signal_handler_called is - * true. - */ - char *function_name; - /** - * A function type, or NULL if it isn't present. - */ - char *function_type; - /** - * A frame number in a thread. It does not necessarily show the - * actual position in the thread, as this number is set by the - * parser and never updated. - */ - unsigned number; - /** - * The name of the source file containing the function definition, - * or the name of the binary file (.so) with the binary code of - * the function, or NULL. - */ - char *source_file; - /** - * A line number in the source file, determining the position of - * the function definition, or -1 when unknown. - */ - unsigned source_line; - /** - * Signal handler was called on this frame. - */ - bool signal_handler_called; - /** - * The function address in the computer memory, or -1 when the - * address is unknown. - */ - uint64_t address; - /** - * A sibling frame residing below this one, or NULL if this is the - * last frame in the parent thread. - */ - struct btp_frame *next; -}; - -/** - * Creates and initializes a new frame structure. - * @returns - * It never returns NULL. The returned pointer must be released by - * calling the function btp_frame_free(). - */ -struct btp_frame * -btp_frame_new(); - -/** - * Initializes all members of the frame structure to their default - * values. No memory is released, members are simply overwritten. - * This is useful for initializing a frame structure placed on the - * stack. - */ -void -btp_frame_init(struct btp_frame *frame); - -/** - * Releases the memory held by the frame. The frame siblings are not - * released. - * @param frame - * If the frame is NULL, no operation is performed. - */ -void -btp_frame_free(struct btp_frame *frame); - -/** - * Creates a duplicate of the frame. - * @param frame - * It must be non-NULL pointer. The frame is not modified by calling - * this function. - * @param siblings - * Whether to duplicate also siblings referenced by frame->next. If - * false, frame->next is not duplicated for the new frame, but it is - * set to NULL. - * @returns - * This function never returns NULL. If the returned duplicate is not - * shallow, it must be released by calling the function - * btp_frame_free(). - */ -struct btp_frame * -btp_frame_dup(struct btp_frame *frame, - bool siblings); - -/** - * Checks whether the frame represents a call of function with certain - * function name. - */ -bool -btp_frame_calls_func(struct btp_frame *frame, - const char *function_name); - -/** - * Checks whether the frame represents a call of function with certain - * function name, which resides in a source file. - * @param source_file - * The frame's source_file is searched for the source_file as a - * substring. - */ -bool -btp_frame_calls_func_in_file(struct btp_frame *frame, - const char *function_name, - const char *source_file); - -/** - * Checks whether the frame represents a call of function with certain - * function name, which resides in one of the source files. - * @param source_file0 - * The frame's source_file is searched for the source_file0 as a - * substring. - * @returns - * True if the frame corresponds to a function with function_name, - * residing in the source_file0, or source_file1. - */ -bool -btp_frame_calls_func_in_file2(struct btp_frame *frame, - const char *function_name, - const char *source_file0, - const char *source_file1); - -/** - * Checks whether the frame represents a call of function with certain - * function name, which resides in one of the source files. - * @param source_file0 - * The frame's source_file is searched for the source_file0 as a - * substring. - * @returns - * True if the frame corresponds to a function with function_name, - * residing in the source_file0, source_file1, or source_file2. - */ -bool -btp_frame_calls_func_in_file3(struct btp_frame *frame, - const char *function_name, - const char *source_file0, - const char *source_file1, - const char *source_file2); - -/** - * Checks whether the frame represents a call of function with certain - * function name, which resides in one of the source files. - * @param source_file0 - * The frame's source_file is searched for the source_file0 as a - * substring. - * @returns - * True if the frame corresponds to a function with function_name, - * residing in the source_file0, source_file1, source_file2, or - * source_file3. - */ -bool -btp_frame_calls_func_in_file4(struct btp_frame *frame, - const char *function_name, - const char *source_file0, - const char *source_file1, - const char *source_file2, - const char *source_file3); - -/** - * Compares two frames. - * @param f1 - * It must be non-NULL pointer. It's not modified by calling this - * function. - * @param f2 - * It must be non-NULL pointer. It's not modified by calling this - * function. - * @param compare_number - * Indicates whether to include the frame numbers in the - * comparsion. If set to false, the frame numbers are ignored. - * @returns - * Returns 0 if the frames are same. Returns negative number if f1 is - * found to be 'less' than f2. Returns positive number if f1 is found - * to be 'greater' than f2. - */ -int -btp_frame_cmp(struct btp_frame *f1, - struct btp_frame *f2, - bool compare_number); - -/** - * Puts the frame 'b' to the bottom of the stack 'a'. In other words, - * it finds the last sibling of the frame 'a', and appends the frame - * 'b' to this last sibling. - */ -void -btp_frame_add_sibling(struct btp_frame *a, - struct btp_frame *b); - -/** - * Appends the textual representation of the frame to the string - * buffer. - * @param frame - * It must be non-NULL pointer. It's not modified by calling this - * function. - */ -void -btp_frame_append_to_str(struct btp_frame *frame, - struct strbuf *str, - bool verbose); - -/** - * If the input contains a complete frame, this function parses the - * frame text, returns it in a structure, and moves the input pointer - * after the frame. If the input does not contain proper, complete - * frame, the function does not modify input and returns NULL. - * @returns - * Allocated pointer with a frame structure. The pointer should be - * released by btp_frame_free(). - * @param location - * The caller must provide a pointer to an instance of btp_location - * here. When this function returns NULL, the structure will contain - * the error line, column, and message. The line and column members - * of the location are gradually increased as the parser handles the - * input, so the location should be initialized before calling this - * function to get reasonable values. - */ -struct btp_frame * -btp_frame_parse(char **input, - struct btp_location *location); - -/** - * If the input contains a proper frame start section, parse the frame - * number, and move the input pointer after this section. Otherwise do - * not modify input. - * @returns - * The number of characters parsed from input. 0 if the input does not - * contain a frame start. - * @code - * "#1 " - * "#255 " - * @endcode - */ -int -btp_frame_parse_frame_start(char **input, unsigned *number); - -/** - * Parses C++ operator on input. - * Supports even 'operator new[]' and 'operator delete[]'. - * @param target - * The parsed operator name is appened to the string buffer provided, - * if an operator is found. Otherwise the string buffer is not - * changed. - * @returns - * The number of characters parsed from input. 0 if the input does not - * contain operator. - */ -int -btp_frame_parseadd_operator(char **input, - struct strbuf *target); - -/** - * Parses a part of function name from the input. - * @param target - * Pointer to a non-allocated pointer. This function will set - * the pointer to newly allocated memory containing the name chunk, - * if it returns positive, nonzero value. - * @returns - * The number of characters parsed from input. 0 if the input does not - * contain a part of function name. - */ -int -btp_frame_parse_function_name_chunk(char **input, - bool space_allowed, - char **target); - -/** - * If the input buffer contains part of function name containing braces, - * for example "(anonymous namespace)", parse it, append the contents - * to target and move input after the braces. - * Otherwise do not modify niether the input nor the target. - * @returns - * The number of characters parsed from input. 0 if the input does not - * contain a braced part of function name. - */ -int -btp_frame_parse_function_name_braces(char **input, - char **target); - -/** - * @returns - * The number of characters parsed from input. 0 if the input does not - * contain a template part of function name. - */ -int -btp_frame_parse_function_name_template(char **input, - char **target); - -/** - * Parses the function name, which is a part of the frame header, from - * the input. If the frame header contains also the function type, - * it's also parsed. - * @param function_name - * A pointer pointing to an uninitialized pointer. This function - * allocates a string and sets the pointer to it if it parses the - * function name from the input successfully. The memory returned - * this way must be released by the caller using the function free(). - * If this function returns true, this pointer is guaranteed to be - * non-NULL. - * @param location - * The caller must provide a pointer to an instance of btp_location - * here. The line and column members of the location are gradually - * increased as the parser handles the input, so the location should - * be initialized before calling this function to get reasonable - * values. When this function returns false (an error occurred), the - * structure will contain the error line, column, and message. - * @returns - * True if the input stream contained a function name, which has been - * parsed. False otherwise. - */ -bool -btp_frame_parse_function_name(char **input, - char **function_name, - char **function_type, - struct btp_location *location); - -/** - * Skips function arguments which are a part of the frame header, in - * the input stream. - * @param location - * The caller must provide a pointer to an instance of btp_location - * here. The line and column members of the location are gradually - * increased as the parser handles the input, so the location should - * be initialized before calling this function to get reasonable - * values. When this function returns false (an error occurred), the - * structure will contain the error line, column, and message. - */ -bool -btp_frame_skip_function_args(char **input, - struct btp_location *location); - -/** - * If the input contains proper function call, parse the function - * name and store it to result, move the input pointer after whole - * function call, and return true. Otherwise do not modify the input - * and return false. - * - * If this function returns true, the caller is responsible to free - * the the function_name. - * @todo - * Parse and return the function call arguments. - * @param location - * The caller must provide a pointer to an instance of btp_location - * here. The line and column members of the location are gradually - * increased as the parser handles the input, so the location should - * be initialized before calling this function to get reasonable - * values. When this function returns false (an error occurred), the - * structure will contain the error line, column, and message. - */ -bool -btp_frame_parse_function_call(char **input, - char **function_name, - char **function_type, - struct btp_location *location); - -/** - * If the input contains address and function call, parse them, move - * the input pointer after this sequence, and return true. - * Otherwise do not modify the input and return false. - * - * If this function returns true, the caller is responsible to free - * the parameter function. - * - * @code - * 0x000000322160e7fd in fsync () - * 0x000000322222987a in write_to_temp_file ( - * filename=0x18971b0 "/home/jfclere/.recently-used.xbel", - * contents=, length=29917, error=0x7fff3cbe4110) - * @endcode - * @param location - * The caller must provide a pointer to an instance of btp_location - * here. The line and column members of the location are gradually - * increased as the parser handles the input, so the location should - * be initialized before calling this function to get reasonable - * values. When this function returns false (an error occurred), the - * structure will contain the error line, column, and message. - */ -bool -btp_frame_parse_address_in_function(char **input, - uint64_t *address, - char **function_name, - char **function_type, - struct btp_location *location); - -/** - * If the input contains sequence "from path/to/file:fileline" or "at - * path/to/file:fileline", parse it, move the input pointer after this - * sequence and return true. Otherwise do not modify the input and - * return false. - * - * The ':' followed by line number is optional. If it is not present, - * the fileline is set to -1. - * @param location - * The caller must provide a pointer to an instance of btp_location - * here. The line and column members of the location are gradually - * increased as the parser handles the input, so the location should - * be initialized before calling this function to get reasonable - * values. When this function returns false (an error occurred), the - * structure will contain the error line, column, and message. - */ -bool -btp_frame_parse_file_location(char **input, - char **file, - unsigned *fileline, - struct btp_location *location); - -/** - * If the input contains proper frame header, this function - * parses the frame header text, moves the input pointer - * after the frame header, and returns a frame struct. - * If the input does not contain proper frame header, this function - * returns NULL and does not modify input. - * @param location - * The caller must provide a pointer to an instance of btp_location - * here. The line and column members of the location are gradually - * increased as the parser handles the input, so the location should - * be initialized before calling this function to get reasonable - * values. When this function returns false (an error occurred), the - * structure will contain the error line, column, and message. - * @returns - * Newly created frame struct or NULL. The returned frame struct - * should be released by btp_frame_free(). - */ -struct btp_frame * -btp_frame_parse_header(char **input, - struct btp_location *location); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/src/btparser/location.c b/src/btparser/location.c deleted file mode 100644 index ade706f2..00000000 --- a/src/btparser/location.c +++ /dev/null @@ -1,78 +0,0 @@ -/* - location.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 "location.h" -#include /* contains NULL */ - -void -btp_location_init(struct btp_location *location) -{ - location->line = 1; - location->column = 0; - location->message = NULL; -} - -void -btp_location_add(struct btp_location *location, - int add_line, - int add_column) -{ - btp_location_add_ext(&location->line, - &location->column, - add_line, - add_column); -} - -void -btp_location_add_ext(int *line, - int *column, - int add_line, - int add_column) -{ - if (add_line > 1) - { - *line += add_line - 1; - *column = add_column; - } - else - *column += add_column; -} - -void -btp_location_eat_char(struct btp_location *location, - char c) -{ - btp_location_eat_char_ext(&location->line, - &location->column, - c); -} - -void -btp_location_eat_char_ext(int *line, - int *column, - char c) -{ - if (c == '\n') - { - *line += 1; - *column = 0; - } - else - *column += 1; -} diff --git a/src/btparser/location.h b/src/btparser/location.h deleted file mode 100644 index 0d620205..00000000 --- a/src/btparser/location.h +++ /dev/null @@ -1,118 +0,0 @@ -/* - location.h - - 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. -*/ -#ifndef BTPARSER_LOCATION_H -#define BTPARSER_LOCATION_H - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * A location in the backtrace file with an attached message. - * It's used for error reporting: the line and the column points to - * the place where a parser error occurred, and the message explains - * what the parser expected and didn't find on that place. - */ -struct btp_location -{ - /** Starts from 1. */ - int line; - /** Starts from 0. */ - int column; - /** - * Error message related to the line and column. Do not release - * the memory this pointer points to. - */ - const char *message; -}; - -/** - * Initializes all members of the location struct to their default - * values. No memory is allocated or released by this function. - */ -void -btp_location_init(struct btp_location *location); - -/** - * Adds a line and a column to specific location. - * @note - * If the line is not 1 (meaning the first line), the column in the - * location structure is overwritten by the provided add_column value. - * Otherwise the add_column value is added to the column member of the - * location structure. - * @param location - * The structure to be modified. It must be a valid pointer. - * @param add_line - * Starts from 1. It means that if add_line is 1, the line member of the - * location structure is not changed. - * @param add_column - * Starts from 0. - */ -void -btp_location_add(struct btp_location *location, - int add_line, - int add_column); - -/** - * Adds a line column pair to another line column pair. - * @note - * If the add_line is not 1 (meaning the frist line), the column is - * overwritten by the provided add_column value. Otherwise the - * add_column value is added to the column. - * @param add_line - * Starts from 1. It means that if add_line is 1, the line is not - * changed. - * @param add_column - * Starts from 0. - */ -void -btp_location_add_ext(int *line, - int *column, - int add_line, - int add_column); - -/** - * Updates the line and column of the location by moving "after" the - * char c. If c is a newline character, the line number is increased - * and the column is set to 0. Otherwise the column is increased by 1. - */ -void -btp_location_eat_char(struct btp_location *location, - char c); - -/** - * Updates the line and the column by moving "after" the char c. If c - * is a newline character, the line number is increased and the column - * is set to 0. Otherwise the column is increased. - * @param line - * Must be a valid pointer. - * @param column - * Must be a valid pointer. - */ -void -btp_location_eat_char_ext(int *line, - int *column, - char c); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/src/btparser/normalize.c b/src/btparser/normalize.c deleted file mode 100644 index 64ccada7..00000000 --- a/src/btparser/normalize.c +++ /dev/null @@ -1,88 +0,0 @@ -/* - 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 - -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 first frame has address 0x0000 and its name is '??', it - * is a dereferenced null, and we remove it. This frame is not - * really invalid, and it affects backtrace quality rating. See - * Red Hat Bugzilla bug #639038. - * @code - * #0 0x0000000000000000 in ?? () - * No symbol table info available. - * #1 0x0000000000422648 in main (argc=1, argv=0x7fffa57cf0d8) at totem.c:242 - * error = 0x0 - * totem = 0xdee070 [TotemObject] - * @endcode - */ - if (thread->frames && - thread->frames->address == 0x0000 && - thread->frames->function_name && - 0 == strcmp(thread->frames->function_name, "??")) - { - btp_thread_remove_frame(thread, thread->frames); - } - - /* 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; - } -} diff --git a/src/btparser/normalize.h b/src/btparser/normalize.h deleted file mode 100644 index 35fd2836..00000000 --- a/src/btparser/normalize.h +++ /dev/null @@ -1,74 +0,0 @@ -/* - normalize.h - - 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. -*/ -#ifndef BTPARSER_NORMALIZE_H -#define BTPARSER_NORMALIZE_H - -#ifdef __cplusplus -extern "C" { -#endif - -struct btp_thread; -struct btp_backtrace; - -void -btp_normalize_thread(struct btp_thread *thread); - -void -btp_normalize_backtrace(struct btp_backtrace *backtrace); - -/** - */ -void -btp_normalize_dbus_thread(struct btp_thread *thread); - -void -btp_normalize_gdk_thread(struct btp_thread *thread); - -void -btp_normalize_glib_thread(struct btp_thread *thread); - -/** - * Checks whether the thread it contains some function used to exit - * application. If a frame with the function is found, it is - * returned. If there are multiple frames with abort function, the - * lowest one is returned. - * @returns - * Returns NULL if such a frame is not found. - */ -struct btp_frame * -btp_glibc_thread_find_exit_frame(struct btp_thread *thread); - -void -btp_normalize_glibc_thread(struct btp_thread *thread); - -void -btp_normalize_libstdcpp_thread(struct btp_thread *thread); - -void -btp_normalize_linux_thread(struct btp_thread *thread); - -void -btp_normalize_xorg_thread(struct btp_thread *thread); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/src/btparser/normalize_dbus.c b/src/btparser/normalize_dbus.c deleted file mode 100644 index d3d6a13a..00000000 --- a/src/btparser/normalize_dbus.c +++ /dev/null @@ -1,44 +0,0 @@ -/* - normalize_dbus.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 - -void -btp_normalize_dbus_thread(struct btp_thread *thread) -{ - struct btp_frame *frame = thread->frames; - while (frame) - { - struct btp_frame *next_frame = frame->next; - - /* Remove frames which are not a cause of the crash. */ - bool removable = - btp_frame_calls_func_in_file(frame, "gerror_to_dbus_error_message", "dbus-gobject.c") || - btp_frame_calls_func_in_file(frame, "dbus_g_method_return_error", "dbus-gobject.c"); - if (removable) - { - btp_thread_remove_frame(thread, frame); - } - - frame = next_frame; - } -} diff --git a/src/btparser/normalize_gdk.c b/src/btparser/normalize_gdk.c deleted file mode 100644 index e9c4ef6a..00000000 --- a/src/btparser/normalize_gdk.c +++ /dev/null @@ -1,44 +0,0 @@ -/* - normalize_gdk.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 - -void -btp_normalize_gdk_thread(struct btp_thread *thread) -{ - struct btp_frame *frame = thread->frames; - while (frame) - { - struct btp_frame *next_frame = frame->next; - - /* Remove frames which are not a cause of the crash. */ - bool removable = - btp_frame_calls_func_in_file(frame, "gdk_x_error", "gdkmain-x11.c"); - - if (removable) - { - btp_thread_remove_frame(thread, frame); - } - - frame = next_frame; - } -} diff --git a/src/btparser/normalize_glib.c b/src/btparser/normalize_glib.c deleted file mode 100644 index b5c12b60..00000000 --- a/src/btparser/normalize_glib.c +++ /dev/null @@ -1,60 +0,0 @@ -/* - normalize_glib.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 "utils.h" -#include -#include - -void -btp_normalize_glib_thread(struct btp_thread *thread) -{ - struct btp_frame *frame = thread->frames; - while (frame) - { - struct btp_frame *next_frame = frame->next; - - /* Normalize frame names. */ - if (frame->function_name && - 0 == strncmp(frame->function_name, "IA__g_", strlen("IA__g_"))) - { - /* Remove the IA__ prefix. The strcpy function cannot be - * used for that because the source and destination - * pointers overlap. */ - char *p = frame->function_name; - while ((*p = p[4]) != '\0') - ++p; - } - - /* Remove frames which are not a cause of the crash. */ - bool removable = - btp_frame_calls_func_in_file2(frame, "g_log", "gmessages.c", "libglib") || - btp_frame_calls_func_in_file2(frame, "g_logv", "gmessages.c", "libglib") || - btp_frame_calls_func_in_file2(frame, "g_assertion_message", "gtestutils.c", "libglib") || - btp_frame_calls_func_in_file2(frame, "g_assertion_message_expr", "gtestutils.c", "libglib"); - if (removable) - { - btp_thread_remove_frame(thread, frame); - } - - frame = next_frame; - } -} diff --git a/src/btparser/normalize_glibc.c b/src/btparser/normalize_glibc.c deleted file mode 100644 index 3d0bca2b..00000000 --- a/src/btparser/normalize_glibc.c +++ /dev/null @@ -1,131 +0,0 @@ -/* - normalize_glibc.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 "utils.h" -#include -#include -#include - -struct btp_frame * -btp_glibc_thread_find_exit_frame(struct btp_thread *thread) -{ - struct btp_frame *frame = thread->frames; - struct btp_frame *result = NULL; - while (frame) - { - bool is_exit_frame = - btp_frame_calls_func_in_file(frame, "__run_exit_handlers", "exit.c") || - btp_frame_calls_func_in_file4(frame, "raise", "pt-raise.c", "libc.so", "libc-", "libpthread.so") || - btp_frame_calls_func_in_file(frame, "exit", "exit.c") || - btp_frame_calls_func_in_file3(frame, "abort", "abort.c", "libc.so", "libc-") || - /* Terminates a function in case of buffer overflow. */ - btp_frame_calls_func_in_file2(frame, "__chk_fail", "chk_fail.c", "libc.so"); - - if (is_exit_frame) - result = frame; - - frame = frame->next; - } - - return result; -} - - -void -btp_normalize_glibc_thread(struct btp_thread *thread) -{ - /* Find the exit frame and remove everything above it. */ - struct btp_frame *exit_frame = btp_glibc_thread_find_exit_frame(thread); - if (exit_frame) - { - bool success = btp_thread_remove_frames_above(thread, exit_frame); - assert(success); /* if this fails, some code become broken */ - success = btp_thread_remove_frame(thread, exit_frame); - assert(success); /* if this fails, some code become broken */ - } - - /* Standard function filtering loop. */ - struct btp_frame *frame = thread->frames; - while (frame) - { - struct btp_frame *next_frame = frame->next; - - /* Normalize frame names. */ -#define NORMALIZE_ARCH_SPECIFIC(func) \ - if (btp_frame_calls_func_in_file3(frame, "__" func "_sse2", func, "/sysdeps/", "libc.so") || \ - btp_frame_calls_func_in_file3(frame, "__" func "_sse2_bsf", func, "/sysdeps/", "libc.so") || \ - btp_frame_calls_func_in_file3(frame, "__" func "_ssse3", func, "/sysdeps/", "libc.so") /* ssse3, not sse3! */ || \ - btp_frame_calls_func_in_file3(frame, "__" func "_ssse3_rep", func, "/sysdeps/", "libc.so") || \ - btp_frame_calls_func_in_file3(frame, "__" func "_sse42", func, "/sysdeps/", "libc.so") || \ - btp_frame_calls_func_in_file3(frame, "__" func "_ia32", func, "/sysdeps", "libc.so")) \ - { \ - strcpy(frame->function_name, func); \ - } - - NORMALIZE_ARCH_SPECIFIC("memchr"); - NORMALIZE_ARCH_SPECIFIC("memcmp"); - NORMALIZE_ARCH_SPECIFIC("memcpy"); - NORMALIZE_ARCH_SPECIFIC("memmove"); - NORMALIZE_ARCH_SPECIFIC("memset"); - NORMALIZE_ARCH_SPECIFIC("rawmemchr"); - NORMALIZE_ARCH_SPECIFIC("strcasecmp"); - NORMALIZE_ARCH_SPECIFIC("strcasecmp_l"); - NORMALIZE_ARCH_SPECIFIC("strcat"); - NORMALIZE_ARCH_SPECIFIC("strchr"); - NORMALIZE_ARCH_SPECIFIC("strchrnul"); - NORMALIZE_ARCH_SPECIFIC("strcmp"); - NORMALIZE_ARCH_SPECIFIC("strcpy"); - NORMALIZE_ARCH_SPECIFIC("strcspn"); - NORMALIZE_ARCH_SPECIFIC("strlen"); - NORMALIZE_ARCH_SPECIFIC("strncmp"); - NORMALIZE_ARCH_SPECIFIC("strncpy"); - NORMALIZE_ARCH_SPECIFIC("strpbrk"); - NORMALIZE_ARCH_SPECIFIC("strrchr"); - NORMALIZE_ARCH_SPECIFIC("strspn"); - NORMALIZE_ARCH_SPECIFIC("strstr"); - NORMALIZE_ARCH_SPECIFIC("strtok"); - - /* Remove frames which are not a cause of the crash. */ - bool removable = - btp_frame_calls_func(frame, "__assert_fail") || - btp_frame_calls_func(frame, "__strcat_chk") || - btp_frame_calls_func(frame, "__strcpy_chk") || - btp_frame_calls_func(frame, "__strncpy_chk") || - btp_frame_calls_func(frame, "__vsnprintf_chk") || - btp_frame_calls_func(frame, "___vsnprintf_chk") || - btp_frame_calls_func(frame, "__snprintf_chk") || - btp_frame_calls_func(frame, "___snprintf_chk") || - btp_frame_calls_func(frame, "__vasprintf_chk") || - btp_frame_calls_func_in_file(frame, "malloc_consolidate", "malloc.c") || - btp_frame_calls_func_in_file(frame, "_int_malloc", "malloc.c") || - btp_frame_calls_func_in_file(frame, "__libc_calloc", "malloc.c"); - if (removable) - { - bool success = btp_thread_remove_frames_above(thread, frame); - assert(success); - success = btp_thread_remove_frame(thread, frame); - assert(success); - } - - frame = next_frame; - } -} diff --git a/src/btparser/normalize_libstdcpp.c b/src/btparser/normalize_libstdcpp.c deleted file mode 100644 index 1f833ded..00000000 --- a/src/btparser/normalize_libstdcpp.c +++ /dev/null @@ -1,46 +0,0 @@ -/* - normalize_libstdcpp.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 - -void -btp_normalize_libstdcpp_thread(struct btp_thread *thread) -{ - struct btp_frame *frame = thread->frames; - while (frame) - { - struct btp_frame *next_frame = frame->next; - - /* Remove frames which are not a cause of the crash. */ - bool removable = - btp_frame_calls_func_in_file(frame, "__gnu_cxx::__verbose_terminate_handler", "vterminate.cc") || - btp_frame_calls_func_in_file(frame, "__cxxabiv1::__terminate", "eh_terminate.cc") || - btp_frame_calls_func_in_file(frame, "std::terminate", "eh_terminate.cc") || - btp_frame_calls_func_in_file(frame, "__cxxabiv1::__cxa_throw", "eh_throw.cc"); - if (removable) - { - btp_thread_remove_frame(thread, frame); - } - - frame = next_frame; - } -} diff --git a/src/btparser/normalize_linux.c b/src/btparser/normalize_linux.c deleted file mode 100644 index 8df9f9c2..00000000 --- a/src/btparser/normalize_linux.c +++ /dev/null @@ -1,41 +0,0 @@ -/* - normalize_linux.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 "utils.h" -#include "frame.h" -#include "thread.h" -#include - -void -btp_normalize_linux_thread(struct btp_thread *thread) -{ - struct btp_frame *frame = thread->frames; - while (frame) - { - struct btp_frame *next_frame = frame->next; - - /* Remove frames which are not a cause of the crash. */ - bool removable = btp_frame_calls_func(frame, "__kernel_vsyscall"); - if (removable) - btp_thread_remove_frame(thread, frame); - - frame = next_frame; - } -} diff --git a/src/btparser/normalize_xorg.c b/src/btparser/normalize_xorg.c deleted file mode 100644 index 11e8d624..00000000 --- a/src/btparser/normalize_xorg.c +++ /dev/null @@ -1,46 +0,0 @@ -/* - normalize_xorg.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 - -void -btp_normalize_xorg_thread(struct btp_thread *thread) -{ - struct btp_frame *frame = thread->frames; - while (frame) - { - struct btp_frame *next_frame = frame->next; - - /* Remove frames which are not a cause of the crash. */ - bool removable = - btp_frame_calls_func_in_file(frame, "_XReply", "xcb_io.c") || - btp_frame_calls_func_in_file(frame, "_XError", "XlibInt.c") || - btp_frame_calls_func_in_file(frame, "XSync", "Sync.c") || - btp_frame_calls_func_in_file(frame, "process_responses", "xcb_io.c"); - if (removable) - { - btp_thread_remove_frame(thread, frame); - } - - frame = next_frame; - } -} diff --git a/src/btparser/thread.c b/src/btparser/thread.c deleted file mode 100644 index 05f154d6..00000000 --- a/src/btparser/thread.c +++ /dev/null @@ -1,399 +0,0 @@ -/* - thread.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 "thread.h" -#include "frame.h" -#include "strbuf.h" -#include "utils.h" -#include "location.h" -#include -#include -#include - -struct btp_thread * -btp_thread_new() -{ - struct btp_thread *thread = btp_malloc(sizeof(struct btp_thread)); - btp_thread_init(thread); - return thread; -} - -void -btp_thread_init(struct btp_thread *thread) -{ - thread->number = -1; - thread->frames = NULL; - thread->next = NULL; -} - -void -btp_thread_free(struct btp_thread *thread) -{ - if (!thread) - return; - - while (thread->frames) - { - struct btp_frame *rm = thread->frames; - thread->frames = rm->next; - btp_frame_free(rm); - } - - free(thread); -} - -struct btp_thread * -btp_thread_dup(struct btp_thread *thread, bool siblings) -{ - struct btp_thread *result = btp_thread_new(); - memcpy(result, thread, sizeof(struct btp_thread)); - - /* Handle siblings. */ - if (siblings) - { - if (result->next) - result->next = btp_thread_dup(result->next, true); - } - else - result->next = NULL; /* Do not copy that. */ - - result->frames = btp_frame_dup(result->frames, true); - - return result; -} - -int -btp_thread_cmp(struct btp_thread *t1, struct btp_thread *t2) -{ - int number = t1->number - t2->number; - if (number != 0) - return number; - struct btp_frame *f1 = t1->frames, *f2 = t2->frames; - do { - if (f1 && !f2) - return 1; - else if (f2 && !f1) - return -1; - else if (f1 && f2) - { - int frames = btp_frame_cmp(f1, f2, true); - if (frames != 0) - return frames; - f1 = f1->next; - f2 = f2->next; - } - } while (f1 || f2); - - return 0; -} - -struct btp_thread * -btp_thread_add_sibling(struct btp_thread *a, struct btp_thread *b) -{ - struct btp_thread *aa = a; - while (aa->next) - aa = aa->next; - - aa->next = b; - return a; -} - -int -btp_thread_get_frame_count(struct btp_thread *thread) -{ - struct btp_frame *frame = thread->frames; - int count = 0; - while (frame) - { - frame = frame->next; - ++count; - } - return count; -} - -void -btp_thread_quality_counts(struct btp_thread *thread, - int *ok_count, - int *all_count) -{ - struct btp_frame *frame = thread->frames; - while (frame) - { - *all_count += 1; - if (frame->signal_handler_called || - (frame->function_name - && 0 != strcmp(frame->function_name, "??"))) - { - *ok_count += 1; - } - frame = frame->next; - } -} - -float -btp_thread_quality(struct btp_thread *thread) -{ - int ok_count = 0, all_count = 0; - btp_thread_quality_counts(thread, &ok_count, &all_count); - if (0 == all_count) - return 1; - return ok_count/(float)all_count; -} - -bool -btp_thread_remove_frame(struct btp_thread *thread, - struct btp_frame *frame) -{ - struct btp_frame *loop_frame = thread->frames, *prev_frame = NULL; - while (loop_frame) - { - if (loop_frame == frame) - { - if (prev_frame) - prev_frame->next = loop_frame->next; - else - thread->frames = loop_frame->next; - - btp_frame_free(loop_frame); - return true; - } - prev_frame = loop_frame; - loop_frame = loop_frame->next; - } - return false; -} - -bool -btp_thread_remove_frames_above(struct btp_thread *thread, - struct btp_frame *frame) -{ - /* Check that the frame is present in the thread. */ - struct btp_frame *loop_frame = thread->frames; - while (loop_frame) - { - if (loop_frame == frame) - break; - loop_frame = loop_frame->next; - } - - if (!loop_frame) - return false; - - /* Delete all the frames up to the frame. */ - while (thread->frames != frame) - { - loop_frame = thread->frames->next; - btp_frame_free(thread->frames); - thread->frames = loop_frame; - } - - return true; -} - -void -btp_thread_remove_frames_below_n(struct btp_thread *thread, - int n) -{ - assert(n >= 0); - - /* Skip some frames to get the required stack depth. */ - int i = n; - struct btp_frame *frame = thread->frames, *last_frame = NULL; - while (frame && i) - { - last_frame = frame; - frame = frame->next; - --i; - } - - /* Delete the remaining frames. */ - if (last_frame) - last_frame->next = NULL; - else - thread->frames = NULL; - - while (frame) - { - struct btp_frame *delete_frame = frame; - frame = frame->next; - btp_frame_free(delete_frame); - } -} - -void -btp_thread_append_to_str(struct btp_thread *thread, - struct strbuf *str, - bool verbose) -{ - int framecount = btp_thread_get_frame_count(thread); - if (verbose) - { - strbuf_append_strf(str, "Thread no. %d (%d frames)\n", - thread->number, framecount); - } - else - strbuf_append_str(str, "Thread\n"); - - struct btp_frame *frame = thread->frames; - while (frame) - { - btp_frame_append_to_str(frame, str, verbose); - frame = frame->next; - } -} - -struct btp_thread * -btp_thread_parse(char **input, - struct btp_location *location) -{ - char *local_input = *input; - - /* Read the Thread keyword, which is mandatory. */ - int chars = btp_skip_string(&local_input, "Thread"); - location->column += chars; - if (0 == chars) - { - location->message = "\"Thread\" header expected"; - return NULL; - } - - /* Skip spaces, at least one space is mandatory. */ - int spaces = btp_skip_char_sequence(&local_input, ' '); - location->column += spaces; - if (0 == spaces) - { - location->message = "Space expected after the \"Thread\" keyword."; - return NULL; - } - - /* Read thread number. */ - struct btp_thread *imthread = btp_thread_new(); - int digits = btp_parse_unsigned_integer(&local_input, &imthread->number); - location->column += digits; - if (0 == digits) - { - location->message = "Thread number expected."; - btp_thread_free(imthread); - return NULL; - } - - /* Skip spaces after the thread number and before parentheses. */ - spaces = btp_skip_char_sequence(&local_input, ' '); - location->column += spaces; - if (0 == spaces) - { - location->message = "Space expected after the thread number."; - btp_thread_free(imthread); - return NULL; - } - - /* Read the LWP section in parentheses, optional. */ - location->column += btp_thread_skip_lwp(&local_input); - - /* Read the Thread keyword in parentheses, optional. */ - chars = btp_skip_string(&local_input, "(Thread "); - location->column += chars; - if (0 != chars) - { - /* Read the thread identification number. It can be either in - * decimal or hexadecimal form. - * Examples: - * "Thread 10 (Thread 2476):" - * "Thread 8 (Thread 0xb07fdb70 (LWP 6357)):" - */ - digits = btp_skip_hexadecimal_number(&local_input); - if (0 == digits) - digits = btp_skip_unsigned_integer(&local_input); - location->column += digits; - if (0 == digits) - { - location->message = "The thread identification number expected."; - btp_thread_free(imthread); - return NULL; - } - - /* Handle the optional " (LWP [0-9]+)" section. */ - location->column += btp_skip_char_sequence(&local_input, ' '); - location->column += btp_thread_skip_lwp(&local_input); - - /* Read the end of the parenthesis. */ - if (!btp_skip_char(&local_input, ')')) - { - location->message = "Closing parenthesis for Thread expected."; - btp_thread_free(imthread); - return NULL; - } - } - - /* Read the end of the header line. */ - chars = btp_skip_string(&local_input, ":\n"); - if (0 == chars) - { - location->message = "Expected a colon followed by a newline ':\\n'."; - btp_thread_free(imthread); - return NULL; - } - /* Add the newline from the last btp_skip_string. */ - btp_location_add(location, 2, 0); - - /* Read the frames. */ - struct btp_frame *frame, *prevframe = NULL; - struct btp_location frame_location; - btp_location_init(&frame_location); - while ((frame = btp_frame_parse(&local_input, &frame_location))) - { - if (prevframe) - { - btp_frame_add_sibling(prevframe, frame); - prevframe = frame; - } - else - imthread->frames = prevframe = frame; - - btp_location_add(location, - frame_location.line, - frame_location.column); - } - if (!imthread->frames) - { - location->message = frame_location.message; - btp_thread_free(imthread); - return NULL; - } - - *input = local_input; - return imthread; -} - -int -btp_thread_skip_lwp(char **input) -{ - char *local_input = *input; - int count = btp_skip_string(&local_input, "(LWP "); - if (0 == count) - return 0; - int digits = btp_skip_unsigned_integer(&local_input); - if (0 == digits) - return 0; - count += digits; - if (!btp_skip_char(&local_input, ')')) - return 0; - *input = local_input; - return count + 1; -} diff --git a/src/btparser/thread.h b/src/btparser/thread.h deleted file mode 100644 index 47a0211b..00000000 --- a/src/btparser/thread.h +++ /dev/null @@ -1,215 +0,0 @@ -/* - thread.h - - 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. -*/ -#ifndef BTPARSER_THREAD_H -#define BTPARSER_THREAD_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -struct btp_frame; -struct strbuf; -struct btp_location; - -/** - * Represents a thread containing frames. - */ -struct btp_thread -{ - unsigned number; - /** - * Thread's frames, starting from the top of the stack. - */ - struct btp_frame *frames; - /** - * A sibling thread, or NULL if this is the last thread in a backtrace. - */ - struct btp_thread *next; -}; - -/** - * Creates and initializes a new frame structure. - * @returns - * It never returns NULL. The returned pointer must be released by - * calling the function btp_thread_free(). - */ -struct btp_thread * -btp_thread_new(); - -/** - * Initializes all members of the thread to default values. - * No memory is released, members are simply overwritten. - * This is useful for initializing a thread structure placed on the - * stack. - */ -void -btp_thread_init(struct btp_thread *thread); - -/** - * Releases the memory held by the thread. The thread siblings are not - * released. - * @param thread - * If thread is NULL, no operation is performed. - */ -void -btp_thread_free(struct btp_thread *thread); - -/** - * Creates a duplicate of the thread. - * @param thread - * It must be non-NULL pointer. The thread is not modified by calling - * this function. - * @param siblings - * Whether to duplicate also siblings referenced by thread->next. If - * false, thread->next is not duplicated for the new frame, but it is - * set to NULL. - */ -struct btp_thread * -btp_thread_dup(struct btp_thread *thread, - bool siblings); - -/** - * Compares two threads. When comparing the threads, it compares also - * their frames, including the frame numbers. - * @returns - * Returns 0 if the threads are same. Returns negative number if t1 - * is found to be 'less' than t2. Returns positive number if t1 is - * found to be 'greater' than t2. - */ -int -btp_thread_cmp(struct btp_thread *t1, struct btp_thread *t2); - -/** - * Puts the thread 'b' to the bottom of the stack 'a'. In other words, - * it finds the last sibling of the thread 'a', and appends the thread - * 'b' to this last sibling. - */ -struct btp_thread * -btp_thread_add_sibling(struct btp_thread *a, struct btp_thread *b); - -/** - * Returns the number of frames of the thread. - */ -int -btp_thread_get_frame_count(struct btp_thread *thread); - -/** - * Counts the number of 'good' frames and the number of all frames in - * a thread. Good means that the function name is known (so it's not - * just '??'). - * @param ok_count - * @param all_count - * Not zeroed. This function just adds the numbers to ok_count and - * all_count. - */ -void -btp_thread_quality_counts(struct btp_thread *thread, - int *ok_count, - int *all_count); - -/** - * Returns the quality of the thread. The quality is the ratio of the - * number of frames with function name fully known to the number of - * all frames. This function does not take into account that some - * frames are more important than others. - * @param thread - * Must be a non-NULL pointer. It's not modified in this function. - * @returns - * A number between 0 and 1. 0 means the lowest quality, 1 means full - * thread backtrace is known. If the thread contains no frames, this - * function returns 1. - */ -float -btp_thread_quality(struct btp_thread *thread); - -/** - * Removes the frame from the thread and then deletes it. - * @returns - * True if the frame was found in the thread and removed and deleted. - * False if the frame was not found in the thread. - */ -bool -btp_thread_remove_frame(struct btp_thread *thread, - struct btp_frame *frame); - -/** - * Removes all the frames from the thread that are above certain - * frame. - * @returns - * True if the frame was found, and all the frames that were above the - * frame in the thread were removed from the thread and then deleted. - * False if the frame was not found in the thread. - */ -bool -btp_thread_remove_frames_above(struct btp_thread *thread, - struct btp_frame *frame); - -/** - * Keeps only the top n frames in the thread. - */ -void -btp_thread_remove_frames_below_n(struct btp_thread *thread, - int n); - -/** - * Appends a textual representation of 'thread' to the 'str'. - */ -void -btp_thread_append_to_str(struct btp_thread *thread, - struct strbuf *str, - bool verbose); - -/** - * If the input contains proper thread with frames, parse the thread, - * move the input pointer after the thread, and return a structure - * representing the thread. Otherwise to not modify the input pointer - * and return NULL. - * @param location - * The caller must provide a pointer to struct btp_location here. The - * line and column members are gradually increased as the parser - * handles the input, keep this in mind to get reasonable values. - * When this function returns NULL (an error occurred), the structure - * will contain the error line, column, and message. - * @returns - * NULL or newly allocated structure, which should be released by - * calling btp_thread_free(). - */ -struct btp_thread * -btp_thread_parse(char **input, - struct btp_location *location); - -/** - * If the input contains a LWP section in form of "(LWP [0-9]+), move - * the input pointer after this section. Otherwise do not modify - * input. - * @returns - * The number of characters parsed from input. 0 if the input does not - * contain a LWP section. - */ -int -btp_thread_skip_lwp(char **input); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/src/btparser/utils.c b/src/btparser/utils.c deleted file mode 100644 index 1de329a7..00000000 --- a/src/btparser/utils.c +++ /dev/null @@ -1,423 +0,0 @@ -/* - utils.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 "utils.h" -#include "location.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include - -bool btp_debug_parser = false; - -void * -btp_malloc(size_t size) -{ - void *ptr = malloc(size); - if (ptr == NULL) - { - fprintf(stderr, "btp: out of memory"); - exit(1); - } - return ptr; -} - -char * -btp_vasprintf(const char *format, va_list p) -{ - int r; - char *string_ptr; - -#if 1 - // GNU extension - r = vasprintf(&string_ptr, format, p); -#else - // Bloat for systems that haven't got the GNU extension. - va_list p2; - va_copy(p2, p); - r = vsnprintf(NULL, 0, format, p); - string_ptr = xmalloc(r+1); - r = vsnprintf(string_ptr, r+1, format, p2); - va_end(p2); -#endif - - if (r < 0) - { - fprintf(stderr, "btp: out of memory"); - exit(1); - } - - return string_ptr; -} - -char * -btp_strdup(const char *s) -{ - return btp_strndup(s, strlen(s)); -} - -char * -btp_strndup(const char *s, size_t n) -{ - char *result = strndup(s, n); - if (result == NULL) - { - fprintf(stderr, "btp: out of memory"); - exit(1); - } - return result; -} - -int -btp_strcmp0(const char *s1, const char *s2) -{ - if (!s1) - { - if (s2) - return -1; - return 0; - } - else - { - if (!s2) - return 1; - /* Both are non-null. */ - return strcmp(s1, s2); - } -} - -char * -btp_strchr_location(const char *s, int c, int *line, int *column) -{ - *line = 1; - *column = 0; - - /* Scan s for the character. When this loop is finished, - s will either point to the end of the string or the - character we were looking for. */ - while (*s != '\0' && *s != (char)c) - { - btp_location_eat_char_ext(line, column, *s); - ++s; - } - return ((*s == c) ? (char*)s : NULL); -} - -char * -btp_strstr_location(const char *haystack, - const char *needle, - int *line, - int *column) -{ - *line = 1; - *column = 0; - size_t needlelen; - - /* Check for the null needle case. */ - if (*needle == '\0') - return (char*)haystack; - - needlelen = strlen(needle); - int chrline, chrcolumn; - for (;(haystack = btp_strchr_location(haystack, *needle, &chrline, &chrcolumn)) != NULL; ++haystack) - { - btp_location_add_ext(line, column, chrline, chrcolumn); - - if (strncmp(haystack, needle, needlelen) == 0) - return (char*)haystack; - - btp_location_eat_char_ext(line, column, *haystack); - } - return NULL; -} - -size_t -btp_strspn_location(const char *s, - const char *accept, - int *line, - int *column) -{ - *line = 1; - *column = 0; - const char *sc; - for (sc = s; *sc != '\0'; ++sc) - { - if (strchr(accept, *sc) == NULL) - return (sc - s); - - btp_location_eat_char_ext(line, column, *sc); - } - return sc - s; /* terminating nulls don't match */ -} - -char * -btp_file_to_string(const char *filename) -{ - /* Open input file, and parse it. */ - int fd = open(filename, O_RDONLY | O_LARGEFILE); - if (fd < 0) - { - fprintf(stderr, "Unable to open '%s': %s.\n", - filename, strerror(errno)); - return NULL; - } - - off_t size = lseek(fd, 0, SEEK_END); - if (size < 0) /* EOVERFLOW? */ - { - fprintf(stderr, "Unable to seek in '%s': %s.\n", - filename, strerror(errno)); - } - - lseek(fd, 0, SEEK_SET); /* No reason to fail. */ - - static const size_t FILE_SIZE_LIMIT = 20000000; /* ~ 20 MB */ - if (size > FILE_SIZE_LIMIT) - { - fprintf(stderr, "Input file too big (%lld). Maximum size is %zd.\n", - (long long)size, FILE_SIZE_LIMIT); - close(fd); - return NULL; - } - - char *contents = btp_malloc(size + 1); - if (size != read(fd, contents, size)) - { - fprintf(stderr, "Unable to read from '%s'.\n", filename); - close(fd); - free(contents); - return NULL; - } - - /* Just reading, so no need to check the returned value. */ - close(fd); - - contents[size] = '\0'; - return contents; -} - -bool -btp_skip_char(char **input, char c) -{ - if (**input != c) - return false; - ++*input; - return true; -} - -bool -btp_skip_char_limited(char **input, const char *allowed) -{ - if (strchr(allowed, **input) == NULL) - return false; - ++*input; - return true; -} - -bool -btp_parse_char_limited(char **input, const char *allowed, char *result) -{ - if (**input == '\0') - return false; - if (strchr(allowed, **input) == NULL) - return false; - *result = **input; - ++*input; - return true; -} - -int -btp_skip_char_sequence(char **input, char c) -{ - int count = 0; - - /* Skip all the occurences of c. */ - while (btp_skip_char(input, c)) - ++count; - - return count; -} - -int -btp_skip_char_span(char **input, const char *chars) -{ - size_t count = strspn(*input, chars); - if (0 == count) - return count; - *input += count; - return count; -} - -int -btp_skip_char_span_location(char **input, - const char *chars, - int *line, - int *column) -{ - size_t count = btp_strspn_location(*input, chars, line, column); - if (0 == count) - return count; - *input += count; - return count; -} - -int -btp_parse_char_span(char **input, const char *accept, char **result) -{ - size_t count = strspn(*input, accept); - if (count == 0) - return 0; - *result = btp_strndup(*input, count); - *input += count; - return count; -} - -bool -btp_parse_char_cspan(char **input, const char *reject, char **result) -{ - size_t count = strcspn(*input, reject); - if (count == 0) - return false; - *result = btp_strndup(*input, count); - *input += count; - return true; -} - -int -btp_skip_string(char **input, const char *string) -{ - char *local_input = *input; - const char *local_string = string; - while (*local_string && *local_input && *local_input == *local_string) - { - ++local_input; - ++local_string; - } - if (*local_string != '\0') - return 0; - int count = local_input - *input; - *input = local_input; - return count; -} - -bool -btp_parse_string(char **input, const char *string, char **result) -{ - char *local_input = *input; - const char *local_string = string; - while (*local_string && *local_input && *local_input == *local_string) - { - ++local_input; - ++local_string; - } - if (*local_string != '\0') - return false; - *result = btp_strndup(string, local_input - *input); - *input = local_input; - return true; -} - -char -btp_parse_digit(char **input) -{ - char digit = **input; - if (digit < '0' || digit > '9') - return '\0'; - ++*input; - return digit; -} - -int -btp_skip_unsigned_integer(char **input) -{ - return btp_skip_char_span(input, "0123456789"); -} - -int -btp_parse_unsigned_integer(char **input, unsigned *result) -{ - char *local_input = *input; - char *numstr; - int length = btp_parse_char_span(&local_input, - "0123456789", - &numstr); - if (0 == length) - return 0; - - char *endptr; - errno = 0; - unsigned long r = strtoul(numstr, &endptr, 10); - bool failure = (errno || numstr == endptr || *endptr != '\0' - || r > UINT_MAX); - free(numstr); - if (failure) /* number too big or some other error */ - return 0; - *result = r; - *input = local_input; - return length; -} - -int -btp_skip_hexadecimal_number(char **input) -{ - char *local_input = *input; - if (!btp_skip_char(&local_input, '0')) - return 0; - if (!btp_skip_char(&local_input, 'x')) - return 0; - int count = 2; - count += btp_skip_char_span(&local_input, "abcdef0123456789"); - if (2 == count) /* btp_skip_char_span returned 0 */ - return 0; - *input = local_input; - return count; -} - -int -btp_parse_hexadecimal_number(char **input, uint64_t *result) -{ - char *local_input = *input; - if (!btp_skip_char(&local_input, '0')) - return 0; - if (!btp_skip_char(&local_input, 'x')) - return 0; - int count = 2; - char *numstr; - count += btp_parse_char_span(&local_input, - "abcdef0123456789", - &numstr); - - if (2 == count) /* btp_parse_char_span returned 0 */ - return 0; - char *endptr; - errno = 0; - unsigned long long r = strtoull(numstr, &endptr, 16); - bool failure = (errno || numstr == endptr || *endptr != '\0'); - free(numstr); - if (failure) /* number too big or some other error */ - return 0; - *result = r; - *input = local_input; - return count; -} diff --git a/src/btparser/utils.h b/src/btparser/utils.h deleted file mode 100644 index 680e67e0..00000000 --- a/src/btparser/utils.h +++ /dev/null @@ -1,284 +0,0 @@ -/* - utils.h - - 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. -*/ -#ifndef BTPARSER_UTILS_H -#define BTPARSER_UTILS_H - -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#define BTP_lower "abcdefghijklmnopqrstuvwxyz" -#define BTP_upper "ABCDEFGHIJKLMNOPQRSTUVWXYZ" -#define BTP_alpha BTP_lower BTP_upper -#define BTP_space " \t\r\n\v\f" -#define BTP_digit "0123456789" -#define BTP_alnum BTP_alpha BTP_digit - -/** - * Debugging output to stdout while parsing. - * Default value is false. - */ -extern bool -btp_debug_parser; - -/** - * Never returns NULL. - */ -void * -btp_malloc(size_t size); - -/** - * Never returns NULL. - */ -char * -btp_vasprintf(const char *format, va_list p); - -/** - * Never returns NULL. - */ -char * -btp_strdup(const char *s); - -/** - * Never returns NULL. - */ -char * -btp_strndup(const char *s, size_t n); - -/** - * A strcmp() variant that works also with NULL parameters. NULL is - * considered to be less than a string. - */ -int -btp_strcmp0(const char *s1, const char *s2); - -/** - * A strchr() variant providing line and column in the string s - * indicating where the char c was found. - * @param line - * Starts from 1. Its value is valid only when this function does not - * return NULL. - * @param column - * Starts from 0. Its value is valid only when this function does not - * return NULL. - */ -char * -btp_strchr_location(const char *s, int c, int *line, int *column); - -/** - * A strstr() variant providing line and column of the haystick - * indicating where the needle was found. - * @param line - * Starts from 1. Its value is valid only when this function does not - * return NULL. - * @param column - * Starts from 0. Its value is valid only when this function does not - * return NULL. - */ -char * -btp_strstr_location(const char *haystack, - const char *needle, - int *line, - int *column); - -/** - * A strspn() variant providing line and column of the string s which - * corresponds to the returned length. - * @param line - * Starts from 1. - * @param column - * Starts from 0. - */ -size_t -btp_strspn_location(const char *s, - const char *accept, - int *line, - int *column); - -/** - * Loads file contents to a string. - * @returns - * File contents. If file opening/reading fails, NULL is returned. - */ -char * -btp_file_to_string(const char *filename); - -/** - * If the input contains character c in the current positon, move the - * input pointer after the character, and return true. Otherwise do - * not modify the input and return false. - */ -bool -btp_skip_char(char **input, char c); - -/** - * If the input contains one of allowed characters, move - * the input pointer after that character, and return true. - * Otherwise do not modify the input and return false. - */ -bool -btp_skip_char_limited(char **input, const char *allowed); - -/** - * If the input contains one of allowed characters, store - * the character to the result, move the input pointer after - * that character, and return true. Otherwise do not modify - * the input and return false. - */ -bool -btp_parse_char_limited(char **input, const char *allowed, char *result); - -/** - * If the input contains the character c one or more times, update it - * so that the characters are skipped. Returns the number of characters - * skipped, thus zero if **input does not contain c. - */ -int -btp_skip_char_sequence(char **input, char c); - -/** - * If the input contains one or more characters from string chars, - * move the input pointer after the sequence. Otherwise do not modify - * the input. - * @returns - * The number of characters skipped. - */ -int -btp_skip_char_span(char **input, const char *chars); - -/** - * If the input contains one or more characters from string chars, - * move the input pointer after the sequence. Otherwise do not modify - * the input. - * @param line - * Starts from 1. Corresponds to the returned number. - * @param column - * Starts from 0. Corresponds to the returned number. - * @returns - * The number of characters skipped. - */ -int -btp_skip_char_span_location(char **input, - const char *chars, - int *line, - int *column); - -/** - * If the input contains one or more characters from string accept, - * create a string from this sequence and store it to the result, move - * the input pointer after the sequence, and return the lenght of the - * sequence. Otherwise do not modify the input and return 0. - * - * If this function returns nonzero value, the caller is responsible - * to free the result. - */ -int -btp_parse_char_span(char **input, const char *accept, char **result); - -/** - * If the input contains characters which are not in string reject, - * create a string from this sequence and store it to the result, - * move the input pointer after the sequence, and return true. - * Otherwise do not modify the input and return false. - * - * If this function returns true, the caller is responsible to - * free the result. - */ -bool -btp_parse_char_cspan(char **input, const char *reject, char **result); - -/** - * If the input contains the string, move the input pointer after - * the sequence. Otherwise do not modify the input. - * @returns - * Number of characters skipped. 0 if the input does not contain the - * string. - */ -int -btp_skip_string(char **input, const char *string); - -/** - * If the input contains the string, copy the string to result, - * move the input pointer after the string, and return true. - * Otherwise do not modify the input and return false. - * - * If this function returns true, the caller is responsible to free - * the result. - */ -bool -btp_parse_string(char **input, const char *string, char **result); - -/** - * If the input contains digit 0-9, return it as a character - * and move the input pointer after it. Otherwise return - * '\0' and do not modify the input. - */ -char -btp_parse_digit(char **input); - -/** - * If the input contains [0-9]+, move the input pointer - * after the number. - * @returns - * The number of skipped characters. 0 if input does not start with a - * digit. - */ -int -btp_skip_unsigned_integer(char **input); - -/** - * If the input contains [0-9]+, parse it, move the input pointer - * after the number. - * @returns - * Number of parsed characters. 0 if input does not contain a number. - */ -int -btp_parse_unsigned_integer(char **input, unsigned *result); - -/** - * If the input contains 0x[0-9a-f]+, move the input pointer - * after that. - * @returns - * The number of characters processed from input. 0 if the input does - * not contain a hexadecimal number. - */ -int -btp_skip_hexadecimal_number(char **input); - -/** - * If the input contains 0x[0-9a-f]+, parse the number, and move the - * input pointer after it. Otherwise do not modify the input. - * @returns - * The number of characters read from input. 0 if the input does not - * contain a hexadecimal number. - */ -int -btp_parse_hexadecimal_number(char **input, uint64_t *result); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/src/plugins/Makefile.am b/src/plugins/Makefile.am index b041b060..040ade1f 100644 --- a/src/plugins/Makefile.am +++ b/src/plugins/Makefile.am @@ -247,7 +247,7 @@ abrt_action_analyze_backtrace_CPPFLAGS = \ -Wall -Wwrite-strings -Werror abrt_action_analyze_backtrace_LDADD = \ $(LIBREPORT_LIBS) \ - ../btparser/libbtparser.la + $(BTPARSER_LIBS) abrt_action_bugzilla_SOURCES = \ abrt-action-bugzilla.c rhbz.c rhbz.h @@ -405,7 +405,7 @@ abrt_retrace_client_SOURCES = \ -Wall -Wwrite-strings -Werror abrt_retrace_client_LDADD = \ $(LIBREPORT_LIBS) \ - ../btparser/libbtparser.la \ + $(BTPARSER_LIBS) \ $(NSS_LIBS) DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@ diff --git a/src/plugins/abrt-action-analyze-backtrace.c b/src/plugins/abrt-action-analyze-backtrace.c index 43293c0b..eb75d634 100644 --- a/src/plugins/abrt-action-analyze-backtrace.c +++ b/src/plugins/abrt-action-analyze-backtrace.c @@ -16,9 +16,9 @@ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "abrtlib.h" -#include "../btparser/backtrace.h" -#include "../btparser/frame.h" -#include "../btparser/location.h" +#include +#include +#include #include "parse_options.h" static const char *dump_dir_name = "."; @@ -78,7 +78,7 @@ int main(int argc, char **argv) /* Compute backtrace hash */ struct btp_location location; btp_location_init(&location); - char *backtrace_str_ptr = backtrace_str; + const char *backtrace_str_ptr = backtrace_str; struct btp_backtrace *backtrace = btp_backtrace_parse(&backtrace_str_ptr, &location); free(backtrace_str); diff --git a/src/plugins/abrt-action-generate-backtrace.c b/src/plugins/abrt-action-generate-backtrace.c index 1d06871a..b5e845bc 100644 --- a/src/plugins/abrt-action-generate-backtrace.c +++ b/src/plugins/abrt-action-generate-backtrace.c @@ -17,9 +17,9 @@ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "abrtlib.h" -#include "../btparser/backtrace.h" -#include "../btparser/frame.h" -#include "../btparser/location.h" +#include +#include +#include #include "parse_options.h" diff --git a/tests/Makefile.am b/tests/Makefile.am index 7903a30b..5a8ad222 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -1,5 +1,3 @@ -SUBDIRS = btparser - ## ------------ ## ## package.m4. ## ## ------------ ## @@ -51,6 +49,6 @@ clean-local: test ! -f '$(TESTSUITE)' || $(SHELL) '$(TESTSUITE)' --clean AUTOTEST = $(AUTOM4TE) --language=autotest -$(TESTSUITE): $(TESTSUITE_AT) $(srcdir)/package.m4 btparser/*.at +$(TESTSUITE): $(TESTSUITE_AT) $(srcdir)/package.m4 $(AUTOTEST) -I '$(srcdir)' -o $@.tmp $@.at mv $@.tmp $@ diff --git a/tests/btparser/Makefile.am b/tests/btparser/Makefile.am deleted file mode 100644 index 5dd52e2a..00000000 --- a/tests/btparser/Makefile.am +++ /dev/null @@ -1,14 +0,0 @@ -EXTRA_DIST = backtraces - -## ------------ ## -## Test suite. ## -## ------------ ## - -TESTSUITE_AT = \ - utils.at \ - frame.at \ - thread.at \ - backtrace.at - -EXTRA_DIST += $(TESTSUITE_AT) -MAINTAINERCLEANFILES = Makefile.in diff --git a/tests/btparser/backtrace.at b/tests/btparser/backtrace.at deleted file mode 100644 index d0b1467c..00000000 --- a/tests/btparser/backtrace.at +++ /dev/null @@ -1,152 +0,0 @@ -# Checking the btparser. -*- Autotest -*- - -AT_BANNER([Backtraces]) - -## --------------------------------------- ## -## btp_backtrace_remove_threads_except_one ## -## --------------------------------------- ## -AT_TESTFUN([btp_backtrace_remove_threads_except_one], -[[ -#include -#include -#include -#include - -int main(void) -{ - /* Delete the thread except the middle one. */ - struct btp_thread *thread2 = btp_thread_new(); - struct btp_thread *thread1 = btp_thread_new(); - thread1->next = thread2; - struct btp_thread *thread0 = btp_thread_new(); - thread0->next = thread1; - struct btp_backtrace *backtrace = btp_backtrace_new(); - backtrace->threads = thread0; - btp_backtrace_remove_threads_except_one(backtrace, thread1); - assert(backtrace->threads == thread1); - assert(NULL == backtrace->threads->next); - - /* Delete all threads except one when there is only one. */ - btp_backtrace_remove_threads_except_one(backtrace, thread1); - assert(backtrace->threads == thread1); - assert(NULL == backtrace->threads->next); - - /* Delete all threads except the first one. */ - thread0 = btp_thread_new(); - backtrace->threads = thread0; - thread0->next = thread1; // already exists - thread2 = btp_thread_new(); - thread1->next = thread2; - btp_backtrace_remove_threads_except_one(backtrace, thread0); - assert(backtrace->threads == thread0); - assert(NULL == backtrace->threads->next); - - /* Delete all threads except the last one. */ - thread1 = btp_thread_new(); - thread0->next = thread1; - thread2 = btp_thread_new(); - thread1->next = thread2; - btp_backtrace_remove_threads_except_one(backtrace, thread2); - assert(backtrace->threads == thread2); - assert(NULL == backtrace->threads->next); - - btp_backtrace_free(backtrace); - return 0; -} -]]) - -## ------------------------------- ## -## btp_backtrace_find_crash_thread ## -## ------------------------------- ## -AT_TESTFUN([btp_backtrace_find_crash_thread], -[[ -#include -#include -#include -#include -#include -#include - -int main(void) -{ - /* Load the backtrace from Red Hat Bugzilla bug #621492. */ - struct btp_location location; - btp_location_init(&location); - char *full_input = btp_file_to_string("../../btparser/backtraces/621492.bt"); - assert(full_input); - char *input = full_input; - struct btp_backtrace *backtrace = btp_backtrace_parse(&input, &location); - assert(backtrace); - - /* Check that the crash thread is found. */ - struct btp_thread *crash_thread = btp_backtrace_find_crash_thread(backtrace); - assert(crash_thread); - assert(0 == strcmp(crash_thread->frames->function_name, "raise")); - btp_backtrace_free(backtrace); - return 0; -} -]]) - -## ------------------------------- ## -## btp_backtrace_limit_frame_depth ## -## ------------------------------- ## -AT_TESTFUN([btp_backtrace_limit_frame_depth], -[[ -#include -#include -#include -#include -#include - -int main(void) -{ - /* Load the backtrace from Red Hat Bugzilla bug #621492. */ - struct btp_location location; - btp_location_init(&location); - char *full_input = btp_file_to_string("../../btparser/backtraces/621492.bt"); - assert(full_input); - char *input = full_input; - struct btp_backtrace *backtrace = btp_backtrace_parse(&input, &location); - assert(backtrace); - - /* Check the frame depth limit. */ - btp_backtrace_limit_frame_depth(backtrace, 5); - assert(11 == btp_backtrace_get_thread_count(backtrace)); - struct btp_thread *thread = backtrace->threads; - while (thread) - { - assert(5 == btp_thread_get_frame_count(thread)); - thread = thread->next; - } - - btp_backtrace_free(backtrace); - return 0; -} -]]) - -## ----------------------------- ## -## btp_backtrace_quality_complex ## -## ----------------------------- ## -AT_TESTFUN([btp_backtrace_quality_complex], -[[ -#include -#include -#include -#include -#include - -int main(void) -{ - /* Load the backtrace from Red Hat Bugzilla bug #621492. */ - struct btp_location location; - btp_location_init(&location); - char *full_input = btp_file_to_string("../../btparser/backtraces/621492.bt"); - assert(full_input); - char *input = full_input; - struct btp_backtrace *backtrace = btp_backtrace_parse(&input, &location); - assert(backtrace); - assert(1.0f == btp_backtrace_quality_complex(backtrace)); - btp_backtrace_free(backtrace); - return 0; -} -]]) diff --git a/tests/btparser/backtraces/621492.bt b/tests/btparser/backtraces/621492.bt deleted file mode 100644 index f1e5404e..00000000 --- a/tests/btparser/backtraces/621492.bt +++ /dev/null @@ -1,2668 +0,0 @@ -[New Thread 19947] -[New Thread 19948] -[New Thread 19949] -[New Thread 19955] -[New Thread 19962] -[New Thread 19963] -[New Thread 21889] -[New Thread 19950] -[New Thread 19951] -[New Thread 19961] -[New Thread 19965] -Core was generated by `/usr/lib64/thunderbird-3.1/thunderbird-bin'. -Program terminated with signal 11, Segmentation fault. -#0 0x0000003848c0f30b in raise (sig=) - at ../nptl/sysdeps/unix/sysv/linux/pt-raise.c:42 -42 ../nptl/sysdeps/unix/sysv/linux/pt-raise.c: No such file or directory. - in ../nptl/sysdeps/unix/sysv/linux/pt-raise.c - -Thread 11 (Thread 19965): -#0 0x00000038484d7de3 in __poll (fds=, - nfds=, timeout=) - at ../sysdeps/unix/sysv/linux/poll.c:87 - __arg2 = 2 - _a3 = -1 - _a1 = 140258994637568 - resultvar = - __arg3 = 72197854784913407 - __arg1 = 140258994637568 - _a2 = 2 - resultvar = - oldtype = 0 - result = -#1 0x00007f90879e4c0f in poll_func (ufds=0x7f90978d4b00, nfds=2, timeout=-1, - userdata=0x7f908807ec70) at pulse/thread-mainloop.c:75 - mutex = 0x7f908807ec70 - r = -1752347904 - __func__ = "poll_func" - __PRETTY_FUNCTION__ = "poll_func" -#2 0x00007f90879d4ae6 in pa_mainloop_poll (m=0x7f9088088200) - at pulse/mainloop.c:879 - __func__ = "pa_mainloop_poll" - __PRETTY_FUNCTION__ = "pa_mainloop_poll" -#3 0x00007f90879d5ec9 in pa_mainloop_iterate (m=0x7f9088088200, - block=, retval=0x0) at pulse/mainloop.c:961 - r = 0 - __func__ = "pa_mainloop_iterate" - __PRETTY_FUNCTION__ = "pa_mainloop_iterate" -#4 0x00007f90879d5f80 in pa_mainloop_run (m=0x7f9088088200, retval=0x0) - at pulse/mainloop.c:979 - r = -#5 0x00007f90879e4a0b in thread (userdata=0x7f908807ec10) - at pulse/thread-mainloop.c:94 - mask = {__val = {18446744067267100671, - 18446744073709551615 }} -#6 0x00007f90877a1878 in internal_thread_func (userdata=0x7f9088049380) - at pulsecore/thread-posix.c:72 - t = 0x7f9088049380 - __func__ = "internal_thread_func" - __PRETTY_FUNCTION__ = "internal_thread_func" -#7 0x0000003848c07761 in start_thread (arg=0x7f9082edf710) - at pthread_create.c:301 - __res = - pd = 0x7f9082edf710 - now = - unwind_buf = {cancel_jmp_buf = {{jmp_buf = {140258648651536, - -555364893392092215, 241738781088, 140258648652240, 0, 3, - 534792876637569993, -560026272429489207}, - mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, - data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}} - not_first_call = - sp = - freesize = -#8 0x00000038484e14ed in clone () - at ../sysdeps/unix/sysv/linux/x86_64/clone.S:115 -No locals. - -Thread 10 (Thread 19961): -#0 pthread_cond_wait@@GLIBC_2.3.2 () - at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:162 -No locals. -#1 0x0000003858c23cce in PR_WaitCondVar (cvar=0x7f9097c6f600, - timeout=4294967295) - at ../../../mozilla/nsprpub/pr/src/pthreads/ptsynch.c:417 - rv = - thred = 0x7f908baa5780 -#2 0x00007f908aa93fd5 in nsSSLThread::Run (this=0x7f9097c6f5c0) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/security/manager/ssl/src/nsSSLThread.cpp:980 - threadLock = { = {}, - mLock = 0x7f9097c80a80, mLocked = 1} - pending_work = 0 - busy_socket_ssl_state = - needToSetPollableEvent = - socketToDestroy = 0x0 -#3 0x0000003858c29843 in _pt_root (arg=0x7f908baa5780) - at ../../../mozilla/nsprpub/pr/src/pthreads/ptthread.c:228 - thred = 0x7f908baa5780 - detached = 0 -#4 0x0000003848c07761 in start_thread (arg=0x7f909932a710) - at pthread_create.c:301 - __res = - pd = 0x7f909932a710 - now = - unwind_buf = {cancel_jmp_buf = {{jmp_buf = {140259022251792, - -555364893392092215, 140734046858640, 140259022252496, 0, 3, - 534733149211739081, -560026272429489207}, - mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, - data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}} - not_first_call = - sp = - freesize = -#5 0x00000038484e14ed in clone () - at ../sysdeps/unix/sysv/linux/x86_64/clone.S:115 -No locals. - -Thread 9 (Thread 19951): -#0 pthread_cond_timedwait@@GLIBC_2.3.2 () - at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S:212 -No locals. -#1 0x0000003858c23049 in pt_TimedWait (cv=0x7f90a82fbd88, ml=0x7f90a82f7320, - timeout=658) at ../../../mozilla/nsprpub/pr/src/pthreads/ptsynch.c:292 - rv = - now = {tv_sec = 1281000337, tv_usec = 584686} - tmo = {tv_sec = 1281000338, tv_nsec = 242686000} - ticks = -#2 0x0000003858c23c2c in PR_WaitCondVar (cvar=0x7f90a82fbd80, timeout=658) - at ../../../mozilla/nsprpub/pr/src/pthreads/ptsynch.c:419 - rv = - thred = 0x7f90a8212360 -#3 0x0000003139a6fbea in TimerThread::Run (this=0x7f90a8222440) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/xpcom/threads/TimerThread.cpp:344 - waitFor = - lock = { = {}, - mLock = 0x7f90a82f7320, mLocked = 1} -#4 0x0000003139a6c765 in nsThread::ProcessNextEvent (this=0x7f90a0a9caa0, - mayWait=1, result=0x7f909bbfebdc) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/xpcom/threads/nsThread.cpp:527 - event = { = { - mRawPtr = 0x7f90a8222440}, } - notifyGlobalObserver = 1 - obs = { = {mRawPtr = 0x0}, } - rv = 0 -#5 0x0000003139a3db88 in NS_ProcessNextEvent_P ( - thread=, mayWait=) - at nsThreadUtils.cpp:250 - val = 1 -#6 0x0000003139a6ce3b in nsThread::ThreadFunc (arg=0x7f90a0a9caa0) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/xpcom/threads/nsThread.cpp:254 - self = 0x7f90a0a9caa0 - event = { = {mRawPtr = 0x0}, } -#7 0x0000003858c29843 in _pt_root (arg=0x7f90a8212360) - at ../../../mozilla/nsprpub/pr/src/pthreads/ptthread.c:228 - thred = 0x7f90a8212360 - detached = 0 -#8 0x0000003848c07761 in start_thread (arg=0x7f909bbff710) - at pthread_create.c:301 - __res = - pd = 0x7f909bbff710 - now = - unwind_buf = {cancel_jmp_buf = {{jmp_buf = {140259065067280, - -555364893392092215, 140734046875760, 140259065067984, 0, 3, - 534738605430817737, -560026272429489207}, - mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, - data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}} - not_first_call = - sp = - freesize = -#9 0x00000038484e14ed in clone () - at ../sysdeps/unix/sysv/linux/x86_64/clone.S:115 -No locals. - -Thread 8 (Thread 19950): -#0 pthread_cond_timedwait@@GLIBC_2.3.2 () - at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S:212 -No locals. -#1 0x0000003858c23049 in pt_TimedWait (cv=0x7f90a0ef59c8, ml=0x7f90a0a16e20, - timeout=0) at ../../../mozilla/nsprpub/pr/src/pthreads/ptsynch.c:292 - rv = - now = {tv_sec = 1281000336, tv_usec = 939599} - tmo = {tv_sec = 1281000337, tv_nsec = 939599000} - ticks = -#2 0x0000003858c23c2c in PR_WaitCondVar (cvar=0x7f90a0ef59c0, timeout=1000) - at ../../../mozilla/nsprpub/pr/src/pthreads/ptsynch.c:419 - rv = - thred = 0x7f90a8211ae0 -#3 0x00007f909e7f6657 in XPCJSRuntime::WatchdogMain (arg=0x7f90a0a2ac00) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/js/src/xpconnect/src/xpcjsruntime.cpp:808 - cx = - self = 0x7f90a0a2ac00 - lock = {mJSRuntime = 0x7f90a0ee0000} -#4 0x0000003858c29843 in _pt_root (arg=0x7f90a8211ae0) - at ../../../mozilla/nsprpub/pr/src/pthreads/ptthread.c:228 - thred = 0x7f90a8211ae0 - detached = 1 -#5 0x0000003848c07761 in start_thread (arg=0x7f909ddbd710) - at pthread_create.c:301 - __res = - pd = 0x7f909ddbd710 - now = - unwind_buf = {cancel_jmp_buf = {{jmp_buf = {140259100448528, - -555364893392092215, 140734046874544, 140259100449232, 0, 3, - 534742145557611465, -560026272429489207}, - mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, - data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}} - not_first_call = - sp = - freesize = -#6 0x00000038484e14ed in clone () - at ../sysdeps/unix/sysv/linux/x86_64/clone.S:115 -No locals. - -Thread 7 (Thread 21889): -#0 pthread_cond_timedwait@@GLIBC_2.3.2 () - at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S:212 -No locals. -#1 0x0000003858c23049 in pt_TimedWait (cv=0x7f90a0e68e88, ml=0x7f90a0a168a0, - timeout=0) at ../../../mozilla/nsprpub/pr/src/pthreads/ptsynch.c:292 - rv = - now = {tv_sec = 1281000208, tv_usec = 213698} - tmo = {tv_sec = 1281000508, tv_nsec = 213698000} - ticks = -#2 0x0000003858c23c2c in PR_WaitCondVar (cvar=0x7f90a0e68e80, timeout=300000) - at ../../../mozilla/nsprpub/pr/src/pthreads/ptsynch.c:419 - rv = - thred = 0x7f9081cd1040 -#3 0x00007f909fd4f15f in nsHostResolver::GetHostToLookup ( - this=0x7f90a0e67700, result=0x7f9089ad3bf8) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/netwerk/dns/src/nsHostResolver.cpp:773 - epoch = 1099954005 - timeout = 300000 - timedOut = - now = - lock = { = {}, - mLock = 0x7f90a0a168a0, mLocked = 1} -#4 0x00007f909fd4fa24 in nsHostResolver::ThreadFunc (arg=0x7f90a0e67700) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/netwerk/dns/src/nsHostResolver.cpp:877 - rs = {mLastReset = 1099039833} - resolver = 0x7f90a0e67700 - rec = 0x7f9088b50f00 - ai = -#5 0x0000003858c29843 in _pt_root (arg=0x7f9081cd1040) - at ../../../mozilla/nsprpub/pr/src/pthreads/ptthread.c:228 - thred = 0x7f9081cd1040 - detached = 1 -#6 0x0000003848c07761 in start_thread (arg=0x7f9089ad4710) - at pthread_create.c:301 - __res = - pd = 0x7f9089ad4710 - now = - unwind_buf = {cancel_jmp_buf = {{jmp_buf = {140258761852688, - -555364893392092215, 140259133114112, 140258761853392, 0, 3, - 534769230158250953, -560026272429489207}, - mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, - data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}} - not_first_call = - sp = - freesize = -#7 0x00000038484e14ed in clone () - at ../sysdeps/unix/sysv/linux/x86_64/clone.S:115 -No locals. - -Thread 6 (Thread 19963): -#0 pthread_cond_wait@@GLIBC_2.3.2 () - at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:162 -No locals. -#1 0x0000003858c23cce in PR_WaitCondVar (cvar=0x7f9097c6f680, - timeout=4294967295) - at ../../../mozilla/nsprpub/pr/src/pthreads/ptsynch.c:417 - rv = - thred = 0x7f908baa59a0 -#2 0x0000003858c23d46 in PR_Wait (mon=0x7f908ba8f570, - timeout=) - at ../../../mozilla/nsprpub/pr/src/pthreads/ptsynch.c:601 - rv = -512 - saved_entries = 1 - saved_owner = 140258929596176 -#3 0x0000003139a6bb17 in Wait (this=0x7f908af9b980, mayWait=1, - result=0x7f9093accb70) at ../../dist/include/nsAutoLock.h:340 -No locals. -#4 nsEventQueue::GetEvent (this=0x7f908af9b980, mayWait=1, - result=0x7f9093accb70) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/xpcom/threads/nsEventQueue.cpp:85 - mon = { = {}, - mMonitor = 0x7f908ba8f570, mLockCount = 1} -#5 0x0000003139a6c748 in GetEvent (this=0x7f908af9b940, mayWait=1, - result=0x7f9093accbdc) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/xpcom/threads/nsThread.h:112 -No locals. -#6 nsThread::ProcessNextEvent (this=0x7f908af9b940, mayWait=1, - result=0x7f9093accbdc) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/xpcom/threads/nsThread.cpp:521 - event = { = {mRawPtr = 0x0}, } - notifyGlobalObserver = 1 - obs = { = {mRawPtr = 0x0}, } - rv = 0 -#7 0x0000003139a3db88 in NS_ProcessNextEvent_P ( - thread=, mayWait=) - at nsThreadUtils.cpp:250 - val = 1 -#8 0x0000003139a6ce3b in nsThread::ThreadFunc (arg=0x7f908af9b940) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/xpcom/threads/nsThread.cpp:254 - self = 0x7f908af9b940 - event = { = {mRawPtr = 0x0}, } -#9 0x0000003858c29843 in _pt_root (arg=0x7f908baa59a0) - at ../../../mozilla/nsprpub/pr/src/pthreads/ptthread.c:228 - thred = 0x7f908baa59a0 - detached = 0 -#10 0x0000003848c07761 in start_thread (arg=0x7f9093acd710) - at pthread_create.c:301 - __res = - pd = 0x7f9093acd710 - now = - unwind_buf = {cancel_jmp_buf = {{jmp_buf = {140258929596176, - -555364893392092215, 140734046859216, 140258929596880, 0, 3, - 534756052661715913, -560026272429489207}, - mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, - data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}} - not_first_call = - sp = - freesize = -#11 0x00000038484e14ed in clone () - at ../sysdeps/unix/sysv/linux/x86_64/clone.S:115 -No locals. - -Thread 5 (Thread 19962): -#0 pthread_cond_wait@@GLIBC_2.3.2 () - at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:162 -No locals. -#1 0x0000003858c23cce in PR_WaitCondVar (cvar=0x7f9097c6f640, - timeout=4294967295) - at ../../../mozilla/nsprpub/pr/src/pthreads/ptsynch.c:417 - rv = - thred = 0x7f908baa5890 -#2 0x00007f908aa94de2 in nsCertVerificationThread::Run (this=0x7f908af9b8b0) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/security/manager/ssl/src/nsCertVerificationThread.cpp:138 - threadLock = { = {}, - mLock = 0x7f9097c80b30, mLocked = 1} - job = 0x0 -#3 0x0000003858c29843 in _pt_root (arg=0x7f908baa5890) - at ../../../mozilla/nsprpub/pr/src/pthreads/ptthread.c:228 - thred = 0x7f908baa5890 - detached = 0 -#4 0x0000003848c07761 in start_thread (arg=0x7f90926cb710) - at pthread_create.c:301 - __res = - pd = 0x7f90926cb710 - now = - unwind_buf = {cancel_jmp_buf = {{jmp_buf = {140258908616464, - -555364893392092215, 140734046858640, 140258908617168, 0, 3, - 534756599196304329, -560026272429489207}, - mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, - data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}} - not_first_call = - sp = - freesize = -#5 0x00000038484e14ed in clone () - at ../sysdeps/unix/sysv/linux/x86_64/clone.S:115 -No locals. - -Thread 4 (Thread 19955): -#0 pthread_cond_wait@@GLIBC_2.3.2 () - at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:162 -No locals. -#1 0x0000003858c23cce in PR_WaitCondVar (cvar=0x7f90983d9b40, - timeout=4294967295) - at ../../../mozilla/nsprpub/pr/src/pthreads/ptsynch.c:417 - rv = - thred = 0x7f9098866120 -#2 0x0000003858c23d46 in PR_Wait (mon=0x7f9097d48de0, - timeout=) - at ../../../mozilla/nsprpub/pr/src/pthreads/ptsynch.c:601 - rv = -512 - saved_entries = 1 - saved_owner = 140258919106320 -#3 0x0000003139a6bb17 in Wait (this=0x7f9097b69420, mayWait=1, - result=0x7f90930cbb70) at ../../dist/include/nsAutoLock.h:340 -No locals. -#4 nsEventQueue::GetEvent (this=0x7f9097b69420, mayWait=1, - result=0x7f90930cbb70) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/xpcom/threads/nsEventQueue.cpp:85 - mon = { = {}, - mMonitor = 0x7f9097d48de0, mLockCount = 1} -#5 0x0000003139a6c748 in GetEvent (this=0x7f9097b693e0, mayWait=1, - result=0x7f90930cbbdc) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/xpcom/threads/nsThread.h:112 -No locals. -#6 nsThread::ProcessNextEvent (this=0x7f9097b693e0, mayWait=1, - result=0x7f90930cbbdc) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/xpcom/threads/nsThread.cpp:521 - event = { = {mRawPtr = 0x0}, } - notifyGlobalObserver = 1 - obs = { = {mRawPtr = 0x0}, } - rv = 0 -#7 0x0000003139a3db88 in NS_ProcessNextEvent_P ( - thread=, mayWait=) - at nsThreadUtils.cpp:250 - val = 1 -#8 0x0000003139a6ce3b in nsThread::ThreadFunc (arg=0x7f9097b693e0) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/xpcom/threads/nsThread.cpp:254 - self = 0x7f9097b693e0 - event = { = {mRawPtr = 0x0}, } -#9 0x0000003858c29843 in _pt_root (arg=0x7f9098866120) - at ../../../mozilla/nsprpub/pr/src/pthreads/ptthread.c:228 - thred = 0x7f9098866120 - detached = 0 -#10 0x0000003848c07761 in start_thread (arg=0x7f90930cc710) - at pthread_create.c:301 - __res = - pd = 0x7f90930cc710 - now = - unwind_buf = {cancel_jmp_buf = {{jmp_buf = {140258919106320, - -555364893392092215, 140734046849712, 140258919107024, 0, 3, - 534754674514084809, -560026272429489207}, - mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, - data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}} - not_first_call = - sp = - freesize = -#11 0x00000038484e14ed in clone () - at ../sysdeps/unix/sysv/linux/x86_64/clone.S:115 -No locals. - -Thread 3 (Thread 19949): -#0 pthread_cond_wait@@GLIBC_2.3.2 () - at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:162 -No locals. -#1 0x0000003858c23cce in PR_WaitCondVar (cvar=0x7f90a0ef5980, - timeout=4294967295) - at ../../../mozilla/nsprpub/pr/src/pthreads/ptsynch.c:417 - rv = - thred = 0x7f90a82118c0 -#2 0x0000003b8ae92582 in JSBackgroundThread::work (this=0x7f90a0efb490) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/js/src/jstask.cpp:91 - t = -#3 0x0000003858c29843 in _pt_root (arg=0x7f90a82118c0) - at ../../../mozilla/nsprpub/pr/src/pthreads/ptthread.c:228 - thred = 0x7f90a82118c0 - detached = 0 -#4 0x0000003848c07761 in start_thread (arg=0x7f909e7be710) - at pthread_create.c:301 - __res = - pd = 0x7f909e7be710 - now = - unwind_buf = {cancel_jmp_buf = {{jmp_buf = {140259110938384, - -555364893392092215, 140734046874480, 140259110939088, 0, 3, - 534747917456786377, -560026272429489207}, - mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, - data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}} - not_first_call = - sp = - freesize = -#5 0x00000038484e14ed in clone () - at ../sysdeps/unix/sysv/linux/x86_64/clone.S:115 -No locals. - -Thread 2 (Thread 19948): -#0 0x00000038484d7de3 in __poll (fds=, - nfds=, timeout=) - at ../sysdeps/unix/sysv/linux/poll.c:87 - __arg2 = 1 - _a3 = -1 - _a1 = 140259133114288 - resultvar = - __arg3 = 244813135871 - __arg1 = 140259133114288 - _a2 = 1 - resultvar = - oldtype = 0 - result = -#1 0x0000003858c256ef in _pr_poll_with_poll (pds=0x7f90a0e929c0, - npds=, timeout=) - at ../../../mozilla/nsprpub/pr/src/pthreads/ptio.c:3915 - stack_syspoll = {{fd = 12, events = 1, revents = 0}, {fd = 4217387, - events = 0, revents = 0}, {fd = 2144215040, events = 32656, - revents = 0}, {fd = 2, events = 0, revents = 0}, { - fd = 2144215040, events = 32656, revents = 0}, {fd = 2256, - events = 0, revents = 0}, {fd = 2106593272, events = 32656, - revents = 0}, {fd = -1472524016, events = 32656, revents = 0}, { - fd = -1979709176, events = 32656, revents = 0}, {fd = 1489124226, - events = 56, revents = 0}, {fd = 1, events = 0, revents = 0}, { - fd = -1748911488, events = 32656, revents = 0}, {fd = -1, - events = 0, revents = 0}, {fd = 0, events = 0, - revents = 0} , {fd = -1963357272, - events = 32656, revents = 0}, {fd = 2106664992, events = 32656, - revents = 0}, {fd = 2121073600, events = 32656, revents = 0}, { - fd = 967017730, events = 49, revents = 0}, {fd = 0, events = 0, - revents = 0}, {fd = 4217387, events = 28, revents = 0}, { - fd = -1968406804, events = 32656, revents = 0}, {fd = 1489124803, - events = 2, revents = 0}, {fd = -1963357168, events = 32656, - revents = 0}, {fd = -1963357216, events = 32656, revents = 0}, { - fd = 105462118, events = 0, revents = 0}, {fd = 967016693, - events = 49, revents = 0}, {fd = -1750069088, events = 32656, - revents = 0}, {fd = -1472521960, events = 32656, revents = 0}, { - fd = -1770357160, events = 32656, revents = 0}, {fd = 967018203, - events = 49, revents = 0}, {fd = 0, events = 0, revents = 0}, { - fd = 4217387, events = 0, revents = 0}, {fd = 2121073600, - events = 32656, revents = 0}, {fd = 1489124812, events = 56, - revents = 0}, {fd = 0, events = 0, revents = 0}, { - fd = -1951811472, events = 32656, revents = 0}, { - fd = -1770357248, events = 32656, revents = 0}, { - fd = -1968544452, events = 32656, revents = 0}, {fd = 0, - events = 0, revents = 0}, {fd = 4217387, events = 0, - revents = 0}, {fd = 1, events = 0, revents = 0}, {fd = 4217387, - events = 0, revents = 0}, {fd = 0, events = 0, revents = 0}, { - fd = 1489124812, events = 56, revents = 0}, {fd = 3, events = 0, - revents = 0}, {fd = -1474197528, events = 32656, revents = 0}, { - fd = -1613870704, events = 32656, revents = 0}, {fd = 853538836, - events = 32767, revents = 0}, {fd = -1613870688, events = 32656, - revents = 0}, {fd = 853538836, events = 32767, revents = 0}, { - fd = -1613870624, events = 32656, revents = 0}, {fd = 0, - events = 0, revents = 0}, {fd = -1613870656, events = 32656, - revents = 0}, {fd = 853539004, events = 32767, revents = 0}} - syspoll = - index = - msecs = -1 - ready = - start = - elapsed = - remaining = -#2 0x00007f909fd45bbd in nsSocketTransportService::Poll ( - this=, wait=, - interval=0x7f909fce4a4c) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/netwerk/base/src/nsSocketTransportService2.cpp:355 - rv = - pollList = 0x7f90a0e929c0 - pollCount = 1 - pollTimeout = 4294967295 - ts = 1100069864 - passedInterval = -#3 0x00007f909fd46078 in nsSocketTransportService::DoPollIteration ( - this=0x7f90a0e92000, wait=1) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/netwerk/base/src/nsSocketTransportService2.cpp:660 - i = -1 - count = - pollInterval = 32656 - n = -#4 0x00007f909fd4628a in nsSocketTransportService::OnProcessNextEvent ( - this=0x7f90a0e92000, thread=0x7f90a8243af0, - mayWait=, depth=) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/netwerk/base/src/nsSocketTransportService2.cpp:539 - val = 0 -#5 0x0000003139a6c712 in nsThread::ProcessNextEvent (this=0x7f90a8243af0, - mayWait=1, result=0x7f909fce4b1c) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/xpcom/threads/nsThread.cpp:508 - notifyGlobalObserver = 1 - obs = { = {mRawPtr = 0x7f90a0e92010}, } - rv = -#6 0x0000003139a3db88 in NS_ProcessNextEvent_P ( - thread=, mayWait=) - at nsThreadUtils.cpp:250 - val = 32656 -#7 0x00007f909fd45dce in nsSocketTransportService::Run (this=0x7f90a0e92000) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/netwerk/base/src/nsSocketTransportService2.cpp:581 - thread = 0x7f90a8243af0 - threadInt = { = { - mRawPtr = 0x7f90a8243af0}, } - i = -#8 0x0000003139a6c765 in nsThread::ProcessNextEvent (this=0x7f90a8243af0, - mayWait=1, result=0x7f909fce4bdc) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/xpcom/threads/nsThread.cpp:527 - event = { = { - mRawPtr = 0x7f90a0e92018}, } - notifyGlobalObserver = 0 - obs = { = {mRawPtr = 0x0}, } - rv = 0 -#9 0x0000003139a3db88 in NS_ProcessNextEvent_P ( - thread=, mayWait=) - at nsThreadUtils.cpp:250 - val = 1 -#10 0x0000003139a6ce3b in nsThread::ThreadFunc (arg=0x7f90a8243af0) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/xpcom/threads/nsThread.cpp:254 - self = 0x7f90a8243af0 - event = { = {mRawPtr = 0x0}, } -#11 0x0000003858c29843 in _pt_root (arg=0x7f90a82117b0) - at ../../../mozilla/nsprpub/pr/src/pthreads/ptthread.c:228 - thred = 0x7f90a82117b0 - detached = 0 -#12 0x0000003848c07761 in start_thread (arg=0x7f909fce5710) - at pthread_create.c:301 - __res = - pd = 0x7f909fce5710 - now = - unwind_buf = {cancel_jmp_buf = {{jmp_buf = {140259133118224, - -555364893392092215, 140734046876304, 140259133118928, 0, 3, - 534746444819874761, -560026272429489207}, - mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, - data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}} - not_first_call = - sp = - freesize = -#13 0x00000038484e14ed in clone () - at ../sysdeps/unix/sysv/linux/x86_64/clone.S:115 -No locals. - -Thread 1 (Thread 19947): -#0 0x0000003848c0f30b in raise (sig=) - at ../nptl/sysdeps/unix/sysv/linux/pt-raise.c:42 - resultvar = 0 - pid = -#1 0x0000003139e1f34e in nsProfileLock::FatalSignalHandler (signo=11, - info=, context=) - at nsProfileLock.cpp:213 - unblock_sigs = {__val = {1024, 0 }} - oldact = -#2 -No symbol table info available. -#3 0x00007f909544e763 in nsTreeBodyFrame::PrefillPropertyArray ( - this=0x7f909108c8a8, aRowIndex=-1, aCol=0x7f908861f760) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/layout/xul/base/src/tree/src/nsTreeBodyFrame.cpp:2055 - sorted = 0 -#4 0x00007f909544ebef in nsTreeBodyFrame::PaintColumn (this=0x7f909108c8a8, - aColumn=0x7f908861f760, aColumnRect=..., aPresContext=0x7f9097882000, - aRenderingContext=..., aDirtyRect=) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/layout/xul/base/src/tree/src/nsTreeBodyFrame.cpp:2915 - colContext = - colRect = {x = -1860605664, y = 32656, width = -1861695320, - height = 32656} - colMargin = {top = 0, right = 0, bottom = 15060, left = 0} -#5 0x00007f909545064b in nsTreeBodyFrame::PaintTreeBody ( - this=0x7f909108c8a8, aRenderingContext=..., aDirtyRect=..., aPt=...) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/layout/xul/base/src/tree/src/nsTreeBodyFrame.cpp:2873 - dirtyRect = {x = 60, y = 7140, width = 15060, height = 48300} - colRect = {x = 60, y = 7140, width = 15060, height = 48300} - rv = - currCol = 0x7f908861f760 - oldPageCount = -#6 0x00007f909545094d in PaintTreeBody (aFrame=, - aCtx=, aDirtyRect=, - aPt=) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/layout/xul/base/src/tree/src/nsTreeBodyFrame.cpp:2811 -No locals. -#7 0x00007f90950bb986 in nsDisplayGeneric::Paint (this=0x7f907fab5938, - aBuilder=, aCtx=0x7f907d912a60) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/layout/base/nsDisplayList.h:968 -No locals. -#8 0x00007f9095082ffe in nsDisplayList::Paint (this=, - aBuilder=0x7fff32dee530, aCtx=0x7f907d912a60) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/layout/base/nsDisplayList.cpp:405 - i = 0x7f907fab5938 -#9 0x00007f9095083150 in Paint (this=0x7f907fab59f0, - aBuilder=0x7fff32dee530, aCtx=0x7f907d912a60) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/layout/base/nsDisplayList.cpp:1007 -No locals. -#10 nsDisplayClip::Paint (this=0x7f907fab59f0, aBuilder=0x7fff32dee530, - aCtx=0x7f907d912a60) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/layout/base/nsDisplayList.cpp:1203 -No locals. -#11 0x00007f9095082ffe in nsDisplayList::Paint (this=, - aBuilder=0x7fff32dee530, aCtx=0x7f907d912a60) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/layout/base/nsDisplayList.cpp:405 - i = 0x7f907fab59f0 -#12 0x00007f9095096400 in nsLayoutUtils::PaintFrame ( - aRenderingContext=0x7f907d912a60, aFrame=0x7f9096786110, - aDirtyRegion=..., aBackstop=4294967295, aFlags=) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/layout/base/nsLayoutUtils.cpp:1161 - builder = {mReferenceFrame = 0x7f9096786110, mMovingFrame = 0x0, - mSaveVisibleRegionOfMovingContent = 0x0, mIgnoreScrollFrame = 0x0, - mMoveDelta = {x = 0, y = 118}, mPool = {first = { - next = 0x7f907fab5800, base = 140734046856568, - limit = 140734046856568, avail = 140734046856568}, - current = 0x7f907fab5800, arenasize = 1024, mask = 7}, - mBoundingSelection = { = { - mRawPtr = 0x0}, }, - mPresShellStates = {> = { = {static sEmptyHdr = {mLength = 0, mCapacity = 0, - mIsAutoArray = 0}, - mHdr = 0x7fff32dee5a0}, }, - mAutoBuf = "\000\000\000\000\b\000\000\200\000\070\210\227\220\177", '\000' "\377, \177\000\000v\000\000\000\377\177\000\000\000\000\000\000\377\177\000\000v\000\000\000\377\177\000\000\375\000\000\000\070\000\000\000'\003\000\000\000\000\000\000 \347\336\062\377\177\000\000\270\212c\210\220\177\000\000\001g@\000\000\000\000\000\360\346\336\062\377\177\000\000\270\212c\210\220\177\000\000\235\003", '\000' , " U$K8", '\000' , "<\035\001K8\000\000\000\000|\227}\220\177\000\000\001g@\000\000\000\000\000L\347\336\062\377\177\000"}, - mFramesMarkedForDisplay = {> = { = {static sEmptyHdr = {mLength = 0, mCapacity = 0, mIsAutoArray = 0}, - mHdr = 0x7fff32dee670}, }, - mAutoBuf = "\000\000\000\000d\000\000\200\020\347\336\062\377\177\000\000\240)\221}\220\177\000\000>j@\000\000\000\000\000\001\000\000\000\220\177\000\000\200\332'\250\220\177\000\000\000\000\000\000\220\177\000\000\000\000\000\000\000\000\000\000\340\353\336\062\377\177\000\000\000\000\000\000\000\000\000\000\340\353\336\062\377\177\000\000\316\372\202S8\000\000\000\000\373\000\000\000\000\000\000\000\373\000\000\000%\003", '\000' , "%\003\000\340u\227}\220\177\000\000\267\327\201S8\000\000\000@\307\224}\220\177\000\000=\277\202S8", '\000' "\232, \231\231\231\231\231\271?\000\000\000\000\000\000\000\000+Z@", '\000' , "\005\000\000\265\003\000\000@\210\222}\220\177\000\000\375\000\000\000\004\000\000\000\000\000\000\000v\000\000\000\200\200\020\210\220\177\000\000\001\000\000\000\000\000\000\000\060\253/\250\220\177\000\000\000\000\000\000\000\000\000\000\300\330'\250"...}, mCurrentTableItem = 0x0, mBuildCaret = 1 '\001', - mEventDelivery = 0 '\000', mIsBackgroundOnly = 0 '\000', - mIsAtRootOfPseudoStackingContext = 0 '\000', - mPaintAllFrames = 0 '\000', mAccurateVisibleRegions = 0 '\000', - mInTransform = 0 '\000'} - list = {mSentinel = {mAbove = 0x7f907fab59f0}, mTop = 0x7f907fab59f8} - rv = 0 - frameType = - disableAssert = {mOldValue = 0} - dirtyRect = {x = 60, y = 7140, width = 15060, height = 48300} - visibleRegion = {mRectCount = 0, mCurRect = 0x7fff32dee4a0, - mRectListHead = { = { = {x = 0, - y = 0, width = 0, height = 0}, }, - prev = 0x7fff32dee4a0, next = 0x7fff32dee4a0}, - mBoundRect = { = {x = 0, y = 0, width = 0, - height = 0}, }} -#13 0x00007f909509f128 in PresShell::Paint (this=0x7f9097883800, - aView=0x7f9099d40500, aRenderingContext=0x7f907d912a60, aDirtyRegion=...) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/layout/base/nsPresShell.cpp:5844 - bgcolor = - frame = -#14 0x00007f9095311ac9 in nsViewManager::RenderViews (this=0x7f9099d40280, - aView=, aRC=..., aRegion=) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/view/src/nsViewManager.cpp:533 - offsetToRoot = {x = 60, y = 7140} - damageRegion = {mRectCount = 1, mCurRect = 0x7f908868d5c8, - mRectListHead = { = { = {x = 0, - y = 0, width = 0, height = 0}, }, - prev = 0x7f908868d5c8, next = 0x7f908868d5c8}, - mBoundRect = { = {x = 60, y = 7140, width = 15060, - height = 48300}, }} - displayRoot = 0x7f9099d40500 - displayRootVM = -#15 0x00007f9095312a10 in nsViewManager::Refresh (this=0x7f9099d40280, - aView=0x7f909116e680, aContext=0x7f907d912a60, - aRegion=, aUpdateFlags=1) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/view/src/nsViewManager.cpp:492 - localcx = { = { - mRawPtr = 0x7f907d912a60}, } - p2a = 60 - ctx = {mRawPtr = 0x7f907d914f20} - viewRect = warning: bits 64-128 in computed object were optimized out; replacing with zeroes -{x = 0, y = 0, width = 0, height = 0} - vtowoffset = {x = 0, y = 0} - damageRegion = {mRectCount = 1, mCurRect = 0x7f90a0a7d448, - mRectListHead = { = { = {x = 0, - y = 0, width = 0, height = 0}, }, - prev = 0x7f90a0a7d448, next = 0x7f90a0a7d448}, - mBoundRect = { = {x = 0, y = 0, width = 15060, - height = 48300}, }} -#16 0x00007f9095312f8f in nsViewManager::DispatchEvent (this=0x7f9099d40280, - aEvent=0x7fff32deed40, aView=, - aStatus=) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/view/src/nsViewManager.cpp:1008 - rootVM = {mRawPtr = 0x7f9099d40280} - widget = { = { - mRawPtr = 0x7f9097878500}, } - transparentWindow = - view = 0x7f909116e680 - didResize = 0 - event = 0x7fff32deed40 - region = { = { - mRawPtr = 0x7f907d933600}, } -#17 0x00007f909530deaa in HandleEvent (aEvent=0x7fff32deed40) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/view/src/nsView.cpp:167 - vm = { = {mRawPtr = 0x7f9099d40280}, } - result = nsEventStatus_eConsumeNoDefault - view = 0x7f909116e680 -#18 0x00007f909d169999 in nsWindow::DispatchEvent (this=0x7f90a8292b50, - aEvent=, aStatus=@0x7fff32deeeb8) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/widget/src/gtk2/nsWindow.cpp:626 -No locals. -#19 0x00007f909d172912 in nsWindow::OnExposeEvent (this=0x7f90a8292b50, - aWidget=, aEvent=0x7fff32def450) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/widget/src/gtk2/nsWindow.cpp:2614 - translucent = 0 - updateRegion = { = { - mRawPtr = 0x7f907d933600}, } - nrects = 1 - r = - r_end = 0x7f907d918500 - rc = { = {mRawPtr = 0x7f907d912a60}, } - boundsRect = {x = 0, y = 0, width = 251, height = 805} - bufferPixmap = 0x7f907d92f310 - event = { = { = {eventStructType = 6 '\006', - message = 130, refPoint = {x = 0, y = 0}, time = 0, flags = 1, - userType = { = { - mRawPtr = 0x0}, }, - target = { = {mRawPtr = 0x0}, }, - currentTarget = { = { - mRawPtr = 0x0}, }, - originalTarget = { = { - mRawPtr = 0x0}, }}, - widget = { = { - mRawPtr = 0x7f90a8292b50}, }, - nativeMsg = 0x0}, renderingContext = 0x7f907d912a60, region = - 0x7f907d933600, rect = 0x0} - rects = 0x7f907d9184f0 - bufferPixmapSize = - ctx = {mRawPtr = 0x7f907d914ec0} - status = - kRegionCID = {m0 = 3777450736, m1 = 61082, m2 = 4561, - m3 = "\250*\000@\225\232(\311"} - bufferPixmapSurface = {mRawPtr = 0x7f907d913f40} -#20 0x00007f909d172d68 in expose_event_cb (widget=0x7f9097d03700, - event=0x7fff32def450) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/widget/src/gtk2/nsWindow.cpp:5828 - window = {mRawPtr = 0x7f90a8292b50} -#21 0x0000003138b51003 in _gtk_marshal_BOOLEAN__BOXED ( - closure=0x7f90977a4c70, return_value=0x7fff32def110, - n_param_values=, param_values=0x7f907d92f280, - invocation_hint=, marshal_data=) - at gtkmarshalers.c:84 - callback = 0x7f909d172d34 - cc = 0x7f90977a4c70 - data1 = 0x7f9097d03700 - data2 = 0x0 - v_return = - __PRETTY_FUNCTION__ = "_gtk_marshal_BOOLEAN__BOXED" -#22 0x000000384b00b98e in IA__g_closure_invoke (closure=0x7f90977a4c70, - return_value=0x7fff32def110, n_param_values=2, - param_values=0x7f907d92f280, invocation_hint=0x7fff32def0d0) - at gclosure.c:767 - marshal = - marshal_data = - in_marshal = - __PRETTY_FUNCTION__ = "IA__g_closure_invoke" -#23 0x000000384b01f947 in signal_emit_unlocked_R (node=, - detail=0, instance=0x7f9097d03700, emission_return=0x7fff32def260, - instance_and_params=0x7f907d92f280) at gsignal.c:3248 - tmp = - handler = 0x7f90977a4bb0 - accumulator = 0x7f90a82a0df0 - emission = {next = 0x7fff32df3460, instance = 0x7f9097d03700, - ihint = {signal_id = 41, detail = 0, - run_type = G_SIGNAL_RUN_FIRST}, state = EMISSION_RUN, - chain_type = 4} - class_closure = 0x7f90a8289100 - handler_list = 0x7f90977a4bb0 - return_accu = 0x7fff32def110 - accu = {g_type = 20, data = {{v_int = 0, v_uint = 0, v_long = 0, - v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, - v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, - v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, - v_float = 0, v_double = 0, v_pointer = 0x0}}} - signal_id = 41 - max_sequential_handler_number = 1552 - return_value_altered = 0 -#24 0x000000384b020c29 in IA__g_signal_emit_valist ( - instance=, signal_id=, - detail=, var_args=0x7fff32def2c0) at gsignal.c:2991 - return_value = {g_type = 20, data = {{v_int = 0, v_uint = 0, - v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, - v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, - v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, - v_float = 0, v_double = 0, v_pointer = 0x0}}} - error = 0x0 - rtype = 20 - static_scope = 0 - instance_and_params = 0x7f907d92f280 - signal_return_type = 20 - param_values = 0x7f907d92f298 - node = 0x7f90a82882e0 - i = - n_params = 1 - __PRETTY_FUNCTION__ = "IA__g_signal_emit_valist" -#25 0x000000384b0213a3 in IA__g_signal_emit (instance=, - signal_id=, detail=) - at gsignal.c:3038 - var_args = {{gp_offset = 32, fp_offset = 48, - overflow_arg_area = 0x7fff32def3a0, - reg_save_area = 0x7fff32def2e0}} -#26 0x0000003138c8190f in gtk_widget_event_internal (widget=0x7f9097d03700, - event=0x7fff32def450) at gtkwidget.c:4958 - signal_num = - return_val = 0 -#27 0x0000003138b4909e in IA__gtk_main_do_event (event=0x7fff32def450) - at gtkmain.c:1583 - event_widget = 0x7f9097d03700 - grab_widget = 0x7f9097d03700 - window_group = 0x7f90975dbd20 - rewritten_event = - tmp_list = - __PRETTY_FUNCTION__ = "IA__gtk_main_do_event" -#28 0x000000313924340a in _gdk_window_process_updates_recurse ( - window=0x7f909100a9d0, expose_region=0x7f907d92f250) at gdkwindow.c:5181 - event = {type = GDK_EXPOSE, any = {type = GDK_EXPOSE, - window = 0x7f909100a9d0, send_event = 0 '\000'}, expose = { - type = GDK_EXPOSE, window = 0x7f909100a9d0, - send_event = 0 '\000', area = {x = 0, y = 0, width = 251, - height = 805}, region = 0x7f907d92f250, count = 0}, - no_expose = {type = GDK_EXPOSE, window = 0x7f909100a9d0, - send_event = 0 '\000'}, visibility = {type = GDK_EXPOSE, - window = 0x7f909100a9d0, send_event = 0 '\000', - state = GDK_VISIBILITY_UNOBSCURED}, motion = {type = GDK_EXPOSE, - window = 0x7f909100a9d0, send_event = 0 '\000', time = 0, - x = 5.3262094353228335e-312, y = 6.9295894550159656e-310, - axes = 0x7f907d92f250, state = 0, is_hint = 32656, - device = 0x7f909100a9d0, x_root = 6.9296935438300264e-310, - y_root = 6.9296935367154811e-310}, button = {type = GDK_EXPOSE, - window = 0x7f909100a9d0, send_event = 0 '\000', time = 0, - x = 5.3262094353228335e-312, y = 6.9295894550159656e-310, - axes = 0x7f907d92f250, state = 0, button = 32656, - device = 0x7f909100a9d0, x_root = 6.9296935438300264e-310, - y_root = 6.9296935367154811e-310}, scroll = {type = GDK_EXPOSE, - window = 0x7f909100a9d0, send_event = 0 '\000', time = 0, - x = 5.3262094353228335e-312, y = 6.9295894550159656e-310, - state = 2106782288, direction = 32656, device = 0x7f9000000000, - x_root = 6.9297096482918431e-310, - y_root = 6.9296935438300264e-310}, key = {type = GDK_EXPOSE, - window = 0x7f909100a9d0, send_event = 0 '\000', time = 0, - state = 0, keyval = 251, length = 805, - string = 0x7f907d92f250 "\001", hardware_keycode = 0, - group = 0 '\000', is_modifier = 0}, crossing = { - type = GDK_EXPOSE, window = 0x7f909100a9d0, - send_event = 0 '\000', subwindow = 0xfb00000000, time = 805, - x = 6.92969354385137e-310, y = 6.9295894549761933e-310, - x_root = 6.9297096482918431e-310, - y_root = 6.9296935438300264e-310, mode = 2106637856, - detail = 32656, focus = 0, state = 0}, focus_change = { - type = GDK_EXPOSE, window = 0x7f909100a9d0, - send_event = 0 '\000', in = -22495}, configure = { - type = GDK_EXPOSE, window = 0x7f909100a9d0, - send_event = 0 '\000', x = 0, y = 0, width = 251, height = 805}, - property = {type = GDK_EXPOSE, window = 0x7f909100a9d0, - send_event = 0 '\000', atom = 0xfb00000000, time = 805, - state = 32656}, selection = {type = GDK_EXPOSE, - window = 0x7f909100a9d0, send_event = 0 '\000', - selection = 0xfb00000000, target = 0x7f9000000325, - property = 0x7f907d92f250, time = 0, requestor = 32656}, - owner_change = {type = GDK_EXPOSE, window = 0x7f909100a9d0, - send_event = 0 '\000', owner = 0, - reason = GDK_OWNER_CHANGE_NEW_OWNER, selection = 0x7f9000000325, - time = 2106782288, selection_time = 32656}, proximity = { - type = GDK_EXPOSE, window = 0x7f909100a9d0, - send_event = 0 '\000', time = 0, device = 0xfb00000000}, - client = {type = GDK_EXPOSE, window = 0x7f909100a9d0, - send_event = 0 '\000', message_type = 0xfb00000000, - data_format = 805, data = { - b = "P\362\222}\220\177\000\000\000\000\000\000\220\177\000\000\320\251\000\221", s = {-3504, 32146, 32656, 0, 0, 0, 32656, 0, -22064, - -28416}, l = {140258558800464, 140256452018176, - 140258884757968, 140258558800032, 140258558656032}}}, dnd = { - type = GDK_EXPOSE, window = 0x7f909100a9d0, - send_event = 0 '\000', context = 0xfb00000000, time = 805, - x_root = 32656, y_root = 0}, window_state = {type = GDK_EXPOSE, - window = 0x7f909100a9d0, send_event = 0 '\000', changed_mask = 0, - new_window_state = 0}, setting = {type = GDK_EXPOSE, - window = 0x7f909100a9d0, send_event = 0 '\000', - action = GDK_SETTING_ACTION_NEW, - name = 0xfb00000000
}, - grab_broken = {type = GDK_EXPOSE, window = 0x7f909100a9d0, - send_event = 0 '\000', keyboard = 0, implicit = 0, - grab_window = 0x7f9000000325}} - private = 0x7f909100a9d0 - child = - child_region = - r = {x = 2106781904, y = 32656, width = -1862227504, height = 32656} - l = - children = 0x0 -#29 0x000000313923fecb in gdk_window_process_updates_internal ( - window=0x7f909100a9d0) at gdkwindow.c:5340 - expose_region = 0x7f907d92f250 - update_area = 0x7f907d92f0a0 - private = 0x7f909100a9d0 - impl_iface = - save_region = 0 - clip_box = {x = 0, y = 0, width = 251, height = 805} -#30 0x0000003139244a41 in IA__gdk_window_process_all_updates () - at gdkwindow.c:5448 - private = 0x7f909100a9d0 - old_update_windows = 0x7f907d918480 - tmp_list = 0x7f907d918160 - in_process_all_updates = 1 - got_recursive_update = 1 -#31 0x0000003139244aa9 in gdk_window_update_idle (data=) - at gdkwindow.c:5074 -No locals. -#32 0x000000313921d606 in gdk_threads_dispatch (data=0x7f907d9145a0) - at gdk.c:512 - dispatch = 0x7f907d9145a0 - ret = 0 -#33 0x0000003849c3bd02 in g_main_dispatch (context=0x7f90a82177a0) - at gmain.c:1960 - dispatch = 0x3849c39d70 - was_in_call = 0 - user_data = 0x7f907d9145a0 - callback = 0x313921d5b0 - cb_funcs = 0x3849efad30 - cb_data = 0x7f907d914760 - current_source_link = {data = 0x7f907d9126a0, next = 0x7fff32df3850} - need_destroy = - source = 0x7f907d9126a0 - current = 0x7f9099d609d0 - i = -#34 IA__g_main_context_dispatch (context=0x7f90a82177a0) at gmain.c:2513 -No locals. -#35 0x0000003849c3fae8 in g_main_context_iterate (context=0x7f90a82177a0, - block=1, dispatch=1, self=) at gmain.c:2591 - max_priority = 120 - timeout = 0 - some_ready = 1 - nfds = 14 - allocated_nfds = - fds = - __PRETTY_FUNCTION__ = "g_main_context_iterate" -#36 0x0000003849c3fff5 in IA__g_main_loop_run (loop=0x7f907d921de0) - at gmain.c:2799 - self = 0x7f90a8210440 - __PRETTY_FUNCTION__ = "IA__g_main_loop_run" -#37 0x0000003138ac06d4 in IA__gtk_dialog_run (dialog=0x7f90823486c0) - at gtkdialog.c:1089 - ri = {dialog = 0x0, response_id = -1, loop = 0x7f907d921de0, - destroyed = 0} - was_modal = - response_handler = 1453 - unmap_handler = 1454 - destroy_handler = 1456 - delete_handler = 1455 - __PRETTY_FUNCTION__ = "IA__gtk_dialog_run" -#38 0x00007f909d1799c7 in nsFilePicker::Show (this=0x7f907d95c900, - aReturn=0x7fff32defb20) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/widget/src/gtk2/nsFilePicker.cpp:541 - count = 1 - response = - parent_widget = 0x7f907dab9ee0 - action = - accept_button = - file_chooser = 0x7f90823486c0 - title = { = { = { - mData = 0x7f907d951a30 "Za\305\202\304\205cz plik do tej wiadomo\305\233ci", mLength = 32, mFlags = 9}, }, } - defaultName = { = { = { = { = {mData = 0x7fff32def8a0 "", mLength = 0, - mFlags = 65553}, }, mFixedCapacity = 63, - mFixedBuf = 0x7fff32def8a0 ""}, - mStorage = "\000\016\032\235\220\177\000\000\b\000\000\000\001\000\000\000\240\241\313\177\220\177\000\000\001\000\000\000\t\000\000\000\300\267\224}\220\177\000\000\017\000\000\000\t\000\000\000\330\246\031\235\220\177\000\000\374\370\336\062\377\177\000"}, } - defaultPath = { = { - mRawPtr = 0x7f908c7f6780}, } -#39 0x0000003139a78001 in NS_InvokeByIndex_P (that=0x7f907d95c900, - methodIndex=17, paramCount=1, params=) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_x86_64_unix.cpp:208 - nr_stack = - gpregs = {140734046863264, 140734046862112, 0, 0, 140258884963168, - 140259009756772} - d0 = - d5 = - result = - nr_gpr = 2 - d1 = - d6 = - nr_fpr = 0 - d2 = - d7 = - methodAddress = - stack = 0x3139a77fdf - fpregs = {6.9296957829877067e-310, 6.9297208369785449e-310, - -nan(0xfffffffffffff), 1.4821969375237396e-323, - 6.9296935571784944e-310, 1.3137800876962641e-314, - 6.9531857754670951e-310, -1.983372149135684e-91} - d3 = - d4 = -#40 0x00007f909e801e8f in XPCWrappedNative::CallMethod (ccx=..., - mode=) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/js/src/xpconnect/src/xpcwrappednative.cpp:2722 - req = warning: bits 96-128 in computed object were optimized out; replacing with zeroes -{mCX = 0x0, mDepth = -1745217232} - rv = - retval = 0 - paramCount = 1 '\001' - err = - tls = - secAction = - methodInfo = 0x7f909bdd8b08 - src = 0 - foundDependentParam = 0 - argc = 0 - i = 1 '\001' - xpcc = 0x7f90823f0700 - argv = 0x7f908097a2d0 - secFlag = - autoStringUsed = 0 - invokeResult = - param_iid = {m0 = 0, m1 = 0, m2 = 0, m3 = "\323\345\341\212;\000\000"} - ifaceInfo = 0x7f909103cb60 - paramBuffer = {{ = {val = {i8 = 0 '\000', i16 = 0, - i32 = 0, i64 = 0, u8 = 0 '\000', u16 = 0, u32 = 0, u64 = 0, - f = 0, d = 0, b = 0, c = 0 '\000', wc = 0, p = 0x0}}, - ptr = 0x7fff32defb20, type = { = { - flags = 1 '\001'}, }, flags = 1 '\001'}, - { = {val = {i8 = 33 '!', i16 = -14047, - i32 = -1964652255, i64 = 255733385505, u8 = 33 '!', - u16 = 51489, u32 = 2330315041, u64 = 255733385505, - f = -2.21275541e-32, d = 1.263490802726963e-312, - b = -1964652255, c = 33 '!', wc = 51489, p = 0x3b8ae5c921}}, - ptr = 0x7f90a0ee0470, type = { = { - flags = 0 '\000'}, }, flags = 196 '\304'}, - { = {val = {i8 = -120 '\210', i16 = -1144, - i32 = 853474184, i64 = 140734046862216, u8 = 136 '\210', - u16 = 64392, u32 = 853474184, u64 = 140734046862216, - f = 2.59585846e-08, d = 6.9531857754833005e-310, - b = 853474184, c = -120 '\210', wc = 64392, - p = 0x7fff32defb88}}, ptr = 0x7fff32defbb8, - type = { = { - flags = 184 '\270'}, }, flags = 251 '\373'}, - { = {val = {i8 = 0 '\000', i16 = 0, i32 = 0, - i64 = 0, u8 = 0 '\000', u16 = 0, u32 = 0, u64 = 0, f = 0, - d = 0, b = 0, c = 0 '\000', wc = 0, p = 0x0}}, - ptr = 0x7f9096d1c400, type = { = { - flags = 0 '\000'}, }, flags = 196 '\304'}, - { = {val = {i8 = 0 '\000', i16 = 0, i32 = 0, - i64 = 0, u8 = 0 '\000', u16 = 0, u32 = 0, u64 = 0, f = 0, - d = 0, b = 0, c = 0 '\000', wc = 0, p = 0x0}}, - ptr = 0x3b8b0ca6b0, type = { = { - flags = 184 '\270'}, }, flags = 251 '\373'}, - { = {val = {i8 = 62 '>', i16 = 15166, - i32 = 1489124158, i64 = 242007292734, u8 = 62 '>', - u16 = 15166, u32 = 1489124158, u64 = 242007292734, - f = 1.70847759e+15, d = 1.1956748938291532e-312, - b = 1489124158, c = 62 '>', wc = 15166, p = 0x3858c23b3e}}, - ptr = 0x1, type = { = { - flags = 192 '\300'}, }, flags = 88 'X'}, - { = {val = {i8 = -1 '\377', i16 = -1, i32 = -1, - i64 = 4294967295, u8 = 255 '\377', u16 = 65535, - u32 = 4294967295, u64 = 4294967295, f = -nan(0x7fffff), - d = 2.1219957904712067e-314, b = -1, c = -1 '\377', - wc = 65535, p = 0xffffffff}}, ptr = 0x0, - type = { = { - flags = 0 '\000'}, }, flags = 0 '\000'}, - { = {val = {i8 = -16 '\360', i16 = -784, - i32 = 853474544, i64 = 140734046862576, u8 = 240 '\360', - u16 = 64752, u32 = 853474544, u64 = 140734046862576, - f = 2.59592241e-08, d = 6.9531857755010868e-310, - b = 853474544, c = -16 '\360', wc = 64752, - p = 0x7fff32defcf0}}, ptr = 0x7f909873fe64, - type = { = { - flags = 251 '\373'}, }, flags = 77 'M'}} - autoString = "\000+v\214\220\177", '\000' , "yv\214\220\177\000\000\204Q~\236\220\177\000\000\a\000\000\000\000\000\000\000\360\271#\250\220\177\000\000\000+v\214\220\177\000\000\000\000\000\000\001\000\000\000@\354}\214\220\177\000\000\000|F\200\220\177\000\000@\354}\214\220\177\000\000\000|F\200\220\177\000\000\000|F\200\220\177\000\000@\000\337\062\377\177\000\000\000yv\214\220\177\000\000@\000\337\062\377\177\000\000\060\000\337\062\377\177\000\000\070\000\337\062\377\177\000" - dispatchParams = 0x7fff32defb20 - requiredArgs = - sm = - rt = 0x7f90a0a2ac00 - callee = 0x7f907d95c900 - vtblIndex = 17 - name = -#41 0x00007f909e80b09d in XPC_WN_CallMethod (cx=0x7f9080467c00, - obj=0x7f908c762b00, argc=0, argv=0x7f908097a2d0, vp=) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/js/src/xpconnect/src/xpcwrappednativejsops.cpp:1740 - funobj = - wrapper = - member = 0x7f907d971120 - ccx = { = { - _vptr.nsAXPCNativeCallContext = 0x7f909ea74c50}, - mState = XPCCallContext::READY_TO_CALL, mXPC = 0x7f90a0a16c10, - mThreadData = 0x7f90a0aa1a60, mXPCContext = 0x7f90823f0700, - mJSContext = 0x7f9080467c00, mContextPopRequired = 0, - mDestroyJSContextInDestructor = 0, - mCallerLanguage = XPCContext::LANG_JS, - mPrevCallerLanguage = XPCContext::LANG_NATIVE, - mPrevCallContext = 0x7fff32df0940, - mOperandJSObject = 0x7f908c762b00, - mCurrentJSObject = 0x7f908c762b00, - mFlattenedJSObject = 0x7f908c762b00, mWrapper = 0x7f907dab9d00, - mTearOff = 0x7f907dab9d38, mScriptableInfo = 0x0, - mSet = 0x7f907d94b660, mInterface = 0x7f907d971000, - mMember = 0x7f907d971120, mName = 140259009756772, - mStaticMemberIsLocal = 0, mArgc = 0, mArgv = 0x7f908097a2d0, - mRetVal = 0x7fff32df0228, mReturnValueWasSet = 0, - mMethodIndex = 17, mCallee = 0x0, - mStringWrapperData = "d\376s\230\220\177\000\000\000|F\200\220\177\000\000\000\000\000\000\220\177\000\000\330\241\227\200\220\177\000\000\000\000\000\000\021\000\000\000\000\000\000\000\220\177\000"} - iface = 0x7f907d971000 -#42 0x0000003b8ae55084 in js_Invoke (cx=0x7f9080467c00, argc=0, - vp=0x7f908097a2c0, flags=2) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/js/src/jsinterp.cpp:1360 - frame = {regs = 0x0, imacpc = 0x0, slots = 0x0, callobj = 0x0, - argsobj = 0, varobj = 0x0, script = 0x0, fun = 0x7f90885e9af0, - thisp = 0x7f908c762b00, argc = 0, argv = 0x7f908097a2d0, rval = 22, - down = 0x7f908097a1d8, annotation = 0x0, - scopeChain = 0x7f90910dcb40, blockChain = 0x0, sharpDepth = 0, - sharpArray = 0x0, flags = 34, dormantNext = 0x0, displaySave = 0x0} - argv = 0x7f908097a2d0 - funobj = - ok = 59 - clasp = - i = - mark = 0x7f908097a2f0 - sp = - newvp = - v = 140258808592640 - ops = - hookData = 0x0 - parent = 0x7f908c762b00 - fun = - rootedArgsFlag = 32 - native = 0x7f909e80afb5 - script = 0x0 - nslots = - hook = 0 -#43 0x0000003b8ae4e5d1 in js_Interpret (cx=0x7f9080467c00) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/js/src/jsops.cpp:2240 - getter = 0x7f90885e9af0 - op = JSOP_CALL - prop = 0x7f90885d2720 - npairs = -2137546048 - currentVersion = 12468 - obj = 0x7f908c767900 - d = 6.9296960457484177e-310 - off = 48 - fp = 0x7f908097a1d8 - inlineCallCount = 1 - regs = {pc = 0x7f907fd611b6 ":", sp = 0x7f908097a2d0} - pc2 = 0x7f9000000000
- clasp = 0x0 - low = 0 - rt = 0x7f90a0ee0000 - op2 = JSOP_PROPINC - vp = 0x3a - script = 0x7f907fd61000 - originalVersion = 12468 - obj2 = 0x7f90910dcb40 - cond = 1 - lval = 58 - id = 140259009756772 - d2 = 0 - fun = 0x7f90885e9af0 - normalJumpTable = {0x3b8ae47d6e, 0x3b8ae47e55, 0x3b8ae47ef7, - 0x3b8ae47f34, 0x3b8ae47f78, 0x3b8ae47faa, 0x3b8ae48265, - 0x3b8ae482e8, 0x3b8ae483e1, 0x3b8ae4f5c6, 0x3b8ae48e31, - 0x3b8ae48e84, 0x3b8ae49091, 0x3b8ae490d5, 0x3b8ae491e3, - 0x3b8ae49532, 0x3b8ae49602, 0x3b8ae496d2, 0x3b8ae497a2, - 0x3b8ae49bf2, 0x3b8ae4a381, 0x3b8ae4a603, 0x3b8ae4a887, - 0x3b8ae4ab0f, 0x3b8ae4ad97, 0x3b8ae4ae6e, 0x3b8ae4af43, - 0x3b8ae4b019, 0x3b8ae4b3d5, 0x3b8ae4b505, 0x3b8ae4b635, - 0x3b8ae4b7ea, 0x3b8ae4b983, 0x3b8ae4ba19, 0x3b8ae4baa7, - 0x3b8ae4bb61, 0x3b8ae4bbc2, 0x3b8ae4bc96, 0x3b8ae4bd57, - 0x3b8ae4be50, 0x3b8ae4beab, 0x3b8ae4bfd4, 0x3b8ae4bef3, - 0x3b8ae4bedc, 0x3b8ae4bfd6, 0x3b8ae4bef5, 0x3b8ae4bede, - 0x3b8ae4bfd8, 0x3b8ae4bef7, 0x3b8ae4bee0, 0x3b8ae4bfd8, - 0x3b8ae4bef7, 0x3b8ae4bee0, 0x3b8ae4c984, 0x3b8ae4d1be, - 0x3b8ae4d92e, 0x3b8ae4dcc3, 0x3b8ae4e839, 0x3b8ae4e0f0, - 0x3b8ae4e839, 0x3b8ae4edd9, 0x3b8ae4edd9, 0x3b8ae4f059, - 0x3b8ae4f095, 0x3b8ae4f0d1, 0x3b8ae4c82b, 0x3b8ae4f10d, - 0x3b8ae4f149, 0x3b8ae484da, 0x3b8ae485a8, 0x3b8ae4f185, - 0x3b8ae4f35b, 0x3b8ae4a042, 0x3b8ae4a0b4, 0x3b8ae4e723, - 0x3b8ae48ce5, 0x3b8ae48d5f, 0x3b8ae48deb, 0x3b8ae4e0f2, - 0x3b8ae49129, 0x3b8ae4ee2c, 0x3b8ae47e91, 0x3b8ae4df8a, - 0x3b8ae4f552, 0x3b8ae4f70c, 0x3b8ae4f786, 0x3b8ae4f801, - 0x3b8ae4f8c5, 0x3b8ae4ebc9, 0x3b8ae50d1b, 0x3b8ae50db5, - 0x3b8ae50e0c, 0x3b8ae511c7, 0x3b8ae51306, 0x3b8ae513ec, - 0x3b8ae4c49f, 0x3b8ae4c488, 0x3b8ae4c4a6, 0x3b8ae4c494, - 0x3b8ae4c4ec, 0x3b8ae4c4d5, 0x3b8ae4c4f3, 0x3b8ae4c4e1, - 0x3b8ae49522, 0x3b8ae48ed7, 0x3b8ae48f90, 0x3b8ae4904d, - 0x3b8ae47ebb, 0x3b8ae4938e, 0x3b8ae4d1be, 0x3b8ae516df, - 0x3b8ae48ae5, 0x3b8ae518e1, 0x3b8ae51980, 0x3b8ae514d4, - 0x3b8ae515cb, 0x3b8ae51633, 0x3b8ae47e34, 0x3b8ae47d8f, - 0x3b8ae4a126, 0x3b8ae4825c, 0x3b8ae4e0f2, 0x3b8ae4de9c, - 0x3b8ae50881, 0x3b8ae50881, 0x3b8ae50068, 0x3b8ae4fe79, - 0x3b8ae4fe79, 0x3b8ae50675, 0x3b8ae50841, 0x3b8ae516ff, - 0x3b8ae4917a, 0x3b8ae47db0, 0x3b8ae51678, 0x3b8ae4fb6d, - 0x3b8ae4fb6d, 0x3b8ae4f61e, 0x3b8ae4f69d, 0x3b8ae50467, - 0x3b8ae4867f, 0x3b8ae48711, 0x3b8ae4881f, 0x3b8ae4892d, - 0x3b8ae48a09, 0x3b8ae5154a, 0x3b8ae4a24c, 0x3b8ae48676, - 0x3b8ae4f25c, 0x3b8ae4f354, 0x3b8ae527ba, 0x3b8ae527bc, - 0x3b8ae51698, 0x3b8ae47ef7, 0x3b8ae47fc8, 0x3b8ae4fbf4, - 0x3b8ae4fcd9, 0x3b8ae4c615, 0x3b8ae4c5e2, 0x3b8ae4c62e, - 0x3b8ae4c5fc, 0x3b8ae4ee9f, 0x3b8ae51a13, 0x3b8ae51a64, - 0x3b8ae51ab9, 0x3b8ae51b0c, 0x3b8ae51b81, 0x3b8ae51beb, - 0x3b8ae51c49, 0x3b8ae51ca5, 0x3b8ae51ca5, 0x3b8ae51d1f, - 0x3b8ae51d9f, 0x3b8ae51e70, 0x3b8ae51f21, 0x3b8ae52017, - 0x3b8ae52064, 0x3b8ae52182, 0x3b8ae521dc, 0x3b8ae52236, - 0x3b8ae5228c, 0x3b8ae52307, 0x3b8ae52393, 0x3b8ae5240a, - 0x3b8ae52481, 0x3b8ae4cd7d, 0x3b8ae4f940, 0x3b8ae4f940, - 0x3b8ae51f21, 0x3b8ae4ec27, 0x3b8ae4ed53, 0x3b8ae4edb4, - 0x3b8ae4edb4, 0x3b8ae47df2, 0x3b8ae47e13, 0x3b8ae4db85, - 0x3b8ae47fc8, 0x3b8ae4c984, 0x3b8ae51e70, 0x3b8ae4be50, - 0x3b8ae52558...} - len = 0 - str = 0x3a - ok = 58 - atom = 0x0 - rval = 140258808592640 - i = 58 - setter = 0x3a - index = 2157421248 - attrs = 2279691360 - flags = 0 - ltmp = 140258609439424 - j = 0 - atoms = 0x7f907fd61060 - parent = 0x7f908097a2c0 - argc = 0 - slot = 0 - str2 = 0x7f908097a2c0 - type = JSTYPE_VOID - interruptJumpTable = {0x3b8ae47cf9 } - rtmp = 2 - sprop = 0x7f908097a2c0 -#44 0x0000003b8ae5508e in js_Invoke (cx=0x7f9080467c00, argc=1, - vp=0x7f908097a1a0, flags=0) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/js/src/jsinterp.cpp:1368 - frame = {regs = 0x7f908097a280, imacpc = 0x0, slots = 0x7f908097a1b8, - callobj = 0x0, argsobj = 0, varobj = 0x0, script = 0x7f9088581000, - fun = 0x7f90969d30e0, thisp = 0x7f9096ef1040, argc = 1, - argv = 0x7f908097a1b0, rval = 22, down = 0x7fff32df14c0, - annotation = 0x0, scopeChain = 0x7f90910dcb40, blockChain = 0x0, - sharpDepth = 0, sharpArray = 0x0, flags = 32, dormantNext = 0x0, - displaySave = 0x7f908097a070} - argv = 0x7f908097a1b0 - funobj = - ok = 32656 - clasp = - i = - mark = 0x7f908097a1b8 - sp = - newvp = - v = 140258984268032 - ops = - hookData = 0x0 - parent = 0x7f90910dcb40 - fun = - rootedArgsFlag = 32 - native = 0 - script = 0x7f9088581000 - nslots = - hook = 0 -#45 0x00007f909e7feddd in nsXPCWrappedJSClass::CallMethod ( - this=0x7f908c311500, wrapper=, methodIndex=5, - info=0x7f909bddbee8, nativeParams=0x7fff32df0aa0) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/js/src/xpconnect/src/xpcwrappedjsclass.cpp:1696 - _val_1654 = {mVal = 0, mValPtr = 0x7fff32df07e8} - _automarker_1654 = { = { - _vptr.AutoMarkingPtr = 0x7f909ea74790, mNext = 0x0, - mTLS = 0x7f90a0aa1a60}, mPtr = 0x7fff32df0740} - stackbase = 0x7f908097a1a0 - paramCount = 1 '\001' - retval = 2147500037 - ssm = 0x7f90a8245740 - sp = 0x7f908097a1b8 - argc = 1 '\001' - fval = 140258984268032 - foundDependentParam = - ccx = { = { - _vptr.nsAXPCNativeCallContext = 0x7f909ea74c50}, - mState = XPCCallContext::HAVE_CONTEXT, mXPC = 0x7f90a0a16c10, - mThreadData = 0x7f90a0aa1a60, mXPCContext = 0x7f90823f0700, - mJSContext = 0x7f9080467c00, mContextPopRequired = 0, - mDestroyJSContextInDestructor = 0, - mCallerLanguage = XPCContext::LANG_NATIVE, - mPrevCallerLanguage = XPCContext::LANG_JS, - mPrevCallContext = 0x7fff32df1330, mOperandJSObject = 0x3858c23e28, - mCurrentJSObject = 0x7fff32df1330, - mFlattenedJSObject = 0x7f909e7e4781, mWrapper = 0x0, - mTearOff = 0x7f909e8067ba, mScriptableInfo = 0x2, - mSet = 0x7f907e685428, mInterface = 0x7f909ea74760, - mMember = 0x7fff32df0a80, mName = 140259147520608, - mStaticMemberIsLocal = 2106745680, mArgc = 32656, - mArgv = 0x7f907fb15720, mRetVal = 0xe11236a8, - mReturnValueWasSet = 655456, mMethodIndex = 0, - mCallee = 0x7f9096ef1100, - mStringWrapperData = "\000|F\200\220\177\000\000\021\n\200\236\220\177\000\000\000\000\000\000\220\177\000\000\060\023\337\062\377\177\000\000\060\023\337\062\377\177\000\000\000\000\000\000\220\177\000"} - scriptEval = {mJSContext = 0x7f9080467c00, mState = 0x0, - mErrorReporterSet = 0, mEvaluated = 1, - mContextHasThread = 140259272757312} - i = - stack_size = - success = - readyToDoTheCall = -1474013376 - xpcc = 0x7f90823f0700 - context = - param_iid = {m0 = 853478080, m1 = 32767, m2 = 0, - m3 = "\340n\316\177\220\177\000"} - mark = - cx = 0x7f9080467c00 - popPrincipal = 1 - obj = 0x7f9096ef1040 - thisObj = 0x7f9096ef1040 - result = 0 - name = 0x7f909bddbf80 "doCommand" - kungFuDeathGrip = { = { - mRawPtr = 0x7f908c311500}, } -#46 0x0000003139a78be1 in PrepareAndDispatch (self=0x7f907fb15720, - methodIndex=, args=, - gpregs=0x7fff32df0ba0, fpregs=0x7fff32df0bd0) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/xpcom/reflect/xptcall/src/md/unix/xptcstubs_x86_64_linux.cpp:153 - paramCount = - nr_fpr = - value = - paramBuffer = {{val = {i8 = 112 'p', i16 = -31376, i32 = 2106688880, - i64 = 140258558707056, u8 = 112 'p', u16 = 34160, - u32 = 2106688880, u64 = 140258558707056, f = 2.41788633e+37, - d = 6.9296935392364016e-310, b = 2106688880, c = 112 'p', - wc = 34160, p = 0x7f907d918570}}, {val = {i8 = 40 '(', - i16 = 3624, i32 = 853478952, i64 = 140734046866984, - u8 = 40 '(', u16 = 3624, u32 = 853478952, - u64 = 140734046866984, f = 2.59670543e-08, - d = 6.953185775718871e-310, b = 853478952, c = 40 '(', - wc = 3624, p = 0x7fff32df0e28}}, {val = {i8 = 104 'h', - i16 = 19048, i32 = 969689704, i64 = 211423087208, u8 = 104 'h', - u16 = 19048, u32 = 969689704, u64 = 211423087208, - f = 0.000389653491, d = 1.0445688412717071e-312, b = 969689704, - c = 104 'h', wc = 19048, p = 0x3139cc4a68}}, {val = { - i8 = 0 '\000', i16 = 16128, i32 = -1681244416, - i64 = 140259065741056, u8 = 0 '\000', u16 = 16128, - u32 = 2613722880, u64 = 140259065741056, f = -3.34588095e-22, - d = 6.929718590044469e-310, b = -1681244416, c = 0 '\000', - wc = 16128, p = 0x7f909bca3f00}}, {val = {i8 = -32 '\340', - i16 = -11552, i32 = 2106774240, i64 = 140258558792416, - u8 = 224 '\340', u16 = 53984, u32 = 2106774240, - u64 = 140258558792416, f = 2.43952766e+37, - d = 6.929693543453746e-310, b = 2106774240, c = -32 '\340', - wc = 53984, p = 0x7f907d92d2e0}}, {val = {i8 = -112 '\220', - i16 = 2960, i32 = 853478288, i64 = 140734046866320, - u8 = 144 '\220', u16 = 2960, u32 = 853478288, - u64 = 140734046866320, f = 2.59658748e-08, - d = 6.953185775686065e-310, b = 853478288, c = -112 '\220', - wc = 2960, p = 0x7fff32df0b90}}, {val = {i8 = 1 '\001', - i16 = 1, i32 = 1, i64 = 140733193388033, u8 = 1 '\001', - u16 = 1, u32 = 1, u64 = 140733193388033, f = 1.40129846e-45, - d = 6.9531436082559572e-310, b = 1, c = 1 '\001', wc = 1, - p = 0x7fff00000001}}, {val = {i8 = 14 '\016', i16 = -19698, - i32 = -1792036082, i64 = 2502931214, u8 = 14 '\016', - u16 = 45838, u32 = 2502931214, u64 = 2502931214, - f = -3.54822178e-26, d = 1.2366123267411253e-314, - b = -1792036082, c = 14 '\016', wc = 45838, p = 0x952fb30e}}, { - val = {i8 = 77 'M', i16 = 5197, i32 = 1208030285, - i64 = 241726198861, u8 = 77 'M', u16 = 5197, u32 = 1208030285, - u64 = 241726198861, f = 132177.203, - d = 1.1942861055700956e-312, b = 1208030285, c = 77 'M', - wc = 5197, p = 0x384801144d}}, {val = {i8 = 56 '8', i16 = 4152, - i32 = 853479480, i64 = 140734046867512, u8 = 56 '8', - u16 = 4152, u32 = 853479480, u64 = 140734046867512, - f = 2.59679922e-08, d = 6.9531857757449576e-310, b = 853479480, - c = 56 '8', wc = 4152, p = 0x7fff32df1038}}, {val = { - i8 = -48 '\320', i16 = 3024, i32 = 853478352, - i64 = 140734046866384, u8 = 208 '\320', u16 = 3024, - u32 = 853478352, u64 = 140734046866384, f = 2.59659885e-08, - d = 6.953185775689227e-310, b = 853478352, c = -48 '\320', - wc = 3024, p = 0x7fff32df0bd0}}, {val = {i8 = 40 '(', - i16 = 3624, i32 = 853478952, i64 = 140734046866984, - u8 = 40 '(', u16 = 3624, u32 = 853478952, - u64 = 140734046866984, f = 2.59670543e-08, - d = 6.953185775718871e-310, b = 853478952, c = 40 '(', - wc = 3624, p = 0x7fff32df0e28}}, {val = {i8 = -88 '\250', - i16 = 4264, i32 = 853479592, i64 = 140734046867624, - u8 = 168 '\250', u16 = 4264, u32 = 853479592, - u64 = 140734046867624, f = 2.59681912e-08, - d = 6.9531857757504912e-310, b = 853479592, c = -88 '\250', - wc = 4264, p = 0x7fff32df10a8}}, {val = {i8 = 0 '\000', - i16 = 31744, i32 = -2142864384, i64 = 140258604121088, - u8 = 0 '\000', u16 = 31744, u32 = 2152102912, - u64 = 140258604121088, f = -6.47296755e-39, - d = 6.9296957829877067e-310, b = -2142864384, c = 0 '\000', - wc = 31744, p = 0x7f9080467c00}}, {val = {i8 = -128 '\200', - i16 = -896, i32 = -1676280704, i64 = 140259070704768, - u8 = 128 '\200', u16 = 64640, u32 = 2618686592, - u64 = 140259070704768, f = -4.96263131e-22, - d = 6.9297188352844265e-310, b = -1676280704, c = -128 '\200', - wc = 64640, p = 0x7f909c15fc80}}, {val = {i8 = 26 '\032', - i16 = 3610, i32 = -1635840486, i64 = 2659126810, - u8 = 26 '\032', u16 = 3610, u32 = 2659126810, u64 = 2659126810, - f = -1.35025037e-20, d = 1.3137832047564237e-314, - b = -1635840486, c = 26 '\032', wc = 3610, p = 0x9e7f0e1a}}} - dispatchParams = - info = 0x7f909bddbee8 - nr_gpr = - i = - result = 2147500037 - ap = 0x7fff32df0c20 -#47 0x0000003139a780a3 in SharedStub () - from /usr/lib64/thunderbird-3.1/libxpcom_core.so -No symbol table info available. -#48 0x0000003139a78001 in NS_InvokeByIndex_P (that=0x7f907fb15720, - methodIndex=5, paramCount=1, params=) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_x86_64_unix.cpp:208 - nr_stack = - gpregs = {140259272788352, 140258558707056, 0, 0, 140258804115488, - 140259010974516} - d0 = - d5 = - result = - nr_gpr = 2 - d1 = - d6 = - nr_fpr = 0 - d2 = - d7 = - methodAddress = - stack = 0x3139a77fdf - fpregs = {6.9297056640239467e-310, 6.9297158842153043e-310, - 6.9531857757825066e-310, 1.263489511150433e-312, - 6.9297154859551136e-310, 6.9297208330274031e-310, - 9.5023411082278302e-315, 1.8656250996705733e-314} - d3 = - d4 = -#49 0x00007f909e801e8f in XPCWrappedNative::CallMethod (ccx=..., - mode=) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/js/src/xpconnect/src/xpcwrappednative.cpp:2722 - req = warning: bits 96-128 in computed object were optimized out; replacing with zeroes -{mCX = 0x0, mDepth = -1745217232} - rv = - retval = 0 - paramCount = 1 '\001' - err = - tls = - secAction = - methodInfo = 0x7f909bddbee8 - src = 140259002913588 - foundDependentParam = 0 - argc = 1 - i = 1 '\001' - xpcc = 0x7f90823f0700 - argv = 0x7f908097a158 - secFlag = - autoStringUsed = 0 - invokeResult = - param_iid = {m0 = 1, m1 = 0, m2 = 0, m3 = "\323\345\341\212;\000\000"} - ifaceInfo = 0x7f908c322820 - paramBuffer = {{ = {val = {i8 = 112 'p', - i16 = -31376, i32 = 2106688880, i64 = 140258558707056, - u8 = 112 'p', u16 = 34160, u32 = 2106688880, - u64 = 140258558707056, f = 2.41788633e+37, - d = 6.9296935392364016e-310, b = 2106688880, c = 112 'p', - wc = 34160, p = 0x7f907d918570}}, ptr = 0x7f9097fa18c0, - type = { = { - flags = 144 '\220'}, }, flags = 0 '\000'}, - { = {val = {i8 = 33 '!', i16 = -14047, - i32 = -1964652255, i64 = 255733385505, u8 = 33 '!', - u16 = 51489, u32 = 2330315041, u64 = 255733385505, - f = -2.21275541e-32, d = 1.263490802726963e-312, - b = -1964652255, c = 33 '!', wc = 51489, p = 0x3b8ae5c921}}, - ptr = 0x7f90a0ee0470, type = { = { - flags = 0 '\000'}, }, flags = 196 '\304'}, - { = {val = {i8 = 120 'x', i16 = 3704, - i32 = 853479032, i64 = 140734046867064, u8 = 120 'x', - u16 = 3704, u32 = 853479032, u64 = 140734046867064, - f = 2.59671964e-08, d = 6.9531857757228235e-310, - b = 853479032, c = 120 'x', wc = 3704, p = 0x7fff32df0e78}}, - ptr = 0x7fff32df0ea8, type = { = { - flags = 168 '\250'}, }, flags = 14 '\016'}, - { = {val = {i8 = 0 '\000', i16 = 0, i32 = 0, - i64 = 0, u8 = 0 '\000', u16 = 0, u32 = 0, u64 = 0, f = 0, - d = 0, b = 0, c = 0 '\000', wc = 0, p = 0x0}}, - ptr = 0x7f9096d1c400, type = { = { - flags = 0 '\000'}, }, flags = 196 '\304'}, - { = {val = {i8 = 0 '\000', i16 = 0, i32 = 0, - i64 = 0, u8 = 0 '\000', u16 = 0, u32 = 0, u64 = 0, f = 0, - d = 0, b = 0, c = 0 '\000', wc = 0, p = 0x0}}, - ptr = 0x3b8b0ca6b0, type = { = { - flags = 168 '\250'}, }, flags = 14 '\016'}, - { = {val = {i8 = 62 '>', i16 = 15166, - i32 = 1489124158, i64 = 242007292734, u8 = 62 '>', - u16 = 15166, u32 = 1489124158, u64 = 242007292734, - f = 1.70847759e+15, d = 1.1956748938291532e-312, - b = 1489124158, c = 62 '>', wc = 15166, p = 0x3858c23b3e}}, - ptr = 0x1, type = { = { - flags = 192 '\300'}, }, flags = 88 'X'}, - { = {val = {i8 = -1 '\377', i16 = -1, i32 = -1, - i64 = 4294967295, u8 = 255 '\377', u16 = 65535, - u32 = 4294967295, u64 = 4294967295, f = -nan(0x7fffff), - d = 2.1219957904712067e-314, b = -1, c = -1 '\377', - wc = 65535, p = 0xffffffff}}, ptr = 0x0, - type = { = { - flags = 0 '\000'}, }, flags = 0 '\000'}, - { = {val = {i8 = -32 '\340', i16 = 4064, - i32 = 853479392, i64 = 140734046867424, u8 = 224 '\340', - u16 = 4064, u32 = 853479392, u64 = 140734046867424, - f = 2.59678359e-08, d = 6.9531857757406099e-310, - b = 853479392, c = -32 '\340', wc = 4064, - p = 0x7fff32df0fe0}}, ptr = 0x7f9098869334, - type = { = { - flags = 251 '\373'}, }, flags = 77 'M'}} - autoString = "\000?\312\233\220\177\000\000\000\000\000\000\000\000\000\000\001", '\000' "\200, *v\214\220\177\000\000\204Q~\236\220\177\000\000\a\000\000\000\000\000\000\000\360\271#\250\220\177\000\000\000?\312\233\220\177\000\000\000\000\000\000\001\000\000\000\004\222\206\230\220\177\000\000\000|F\200\220\177", '\000' , "|F\200\220\177\000\000\000|F\200\220\177\000\000\060\023\337\062\377\177\000\000\200*v\214\220\177\000\000\060\023\337\062\377\177\000\000 \023\337\062\377\177\000\000(\023\337\062\377\177\000" - dispatchParams = 0x7fff32df0e10 - requiredArgs = - sm = - rt = 0x7f90a0a2ac00 - callee = 0x7f907fb15720 - vtblIndex = 5 - name = -#50 0x00007f909e80b09d in XPC_WN_CallMethod (cx=0x7f9080467c00, - obj=0x7f909bca3f00, argc=1, argv=0x7f908097a158, vp=) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/js/src/xpconnect/src/xpcwrappednativejsops.cpp:1740 - funobj = - wrapper = - member = 0x7f907d9263b0 - ccx = { = { - _vptr.nsAXPCNativeCallContext = 0x7f909ea74c50}, - mState = XPCCallContext::READY_TO_CALL, mXPC = 0x7f90a0a16c10, - mThreadData = 0x7f90a0aa1a60, mXPCContext = 0x7f90823f0700, - mJSContext = 0x7f9080467c00, mContextPopRequired = 0, - mDestroyJSContextInDestructor = 0, - mCallerLanguage = XPCContext::LANG_JS, - mPrevCallerLanguage = XPCContext::LANG_UNKNOWN, - mPrevCallContext = 0x0, mOperandJSObject = 0x7f909bca3f00, - mCurrentJSObject = 0x7f909bca3f00, - mFlattenedJSObject = 0x7f909bca3f00, mWrapper = 0x7f907d92d2e0, - mTearOff = 0x7f907d92d318, mScriptableInfo = 0x0, - mSet = 0x7f907d9144a0, mInterface = 0x7f907d926350, - mMember = 0x7f907d9263b0, mName = 140259010974516, - mStaticMemberIsLocal = 0, mArgc = 1, mArgv = 0x7f908097a158, - mRetVal = 0x7fff32df1518, mReturnValueWasSet = 0, mMethodIndex = 5, - mCallee = 0x0, - mStringWrapperData = "4\223\206\230\220\177\000\000\000|F\200\220\177\000\000\000\000\000\000\220\177\000\000p\240\227\200\220\177\000\000\000\000\000\000\005\000\000\000\000\000\000\000\220\177\000"} - iface = 0x7f907d926350 -#51 0x0000003b8ae55084 in js_Invoke (cx=0x7f9080467c00, argc=1, - vp=0x7f908097a148, flags=2) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/js/src/jsinterp.cpp:1360 - frame = {regs = 0x0, imacpc = 0x0, slots = 0x0, callobj = 0x0, - argsobj = 0, varobj = 0x0, script = 0x0, fun = 0x7f9088563150, - thisp = 0x7f909bca3f00, argc = 1, argv = 0x7f908097a158, rval = 22, - down = 0x7f908097a070, annotation = 0x0, - scopeChain = 0x7f90910dcb40, blockChain = 0x0, sharpDepth = 0, - sharpArray = 0x0, flags = 34, dormantNext = 0x0, displaySave = 0x0} - argv = 0x7f908097a158 - funobj = - ok = 59 - clasp = - i = - mark = 0x7f908097a190 - sp = - newvp = - v = 140258808572544 - ops = - hookData = 0x0 - parent = 0x7f909bca3f00 - fun = - rootedArgsFlag = 32 - native = 0x7f909e80afb5 - script = 0x0 - nslots = - hook = 0 -#52 0x0000003b8ae4e5d1 in js_Interpret (cx=0x7f9080467c00) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/js/src/jsops.cpp:2240 - getter = 0x7f9088563150 - op = JSOP_CALL - prop = 0x7f90974243d8 - npairs = -2137546424 - currentVersion = 12468 - obj = 0x7f908c762a80 - d = 6.9296960457298409e-310 - off = 48 - fp = 0x7f908097a070 - inlineCallCount = 1 - regs = {pc = 0x7f9097606612 ":", sp = 0x7f908097a160} - pc2 = 0x7f9000000001
- clasp = 0x0 - low = 0 - rt = 0x7f90a0ee0000 - op2 = JSOP_PROPINC - vp = 0x3a - script = 0x7f9097606500 - originalVersion = 8192 - obj2 = 0x7f908cc7c980 - cond = 1 - lval = 58 - id = 140259010974516 - d2 = 0 - fun = 0x7f9088563150 - normalJumpTable = {0x3b8ae47d6e, 0x3b8ae47e55, 0x3b8ae47ef7, - 0x3b8ae47f34, 0x3b8ae47f78, 0x3b8ae47faa, 0x3b8ae48265, - 0x3b8ae482e8, 0x3b8ae483e1, 0x3b8ae4f5c6, 0x3b8ae48e31, - 0x3b8ae48e84, 0x3b8ae49091, 0x3b8ae490d5, 0x3b8ae491e3, - 0x3b8ae49532, 0x3b8ae49602, 0x3b8ae496d2, 0x3b8ae497a2, - 0x3b8ae49bf2, 0x3b8ae4a381, 0x3b8ae4a603, 0x3b8ae4a887, - 0x3b8ae4ab0f, 0x3b8ae4ad97, 0x3b8ae4ae6e, 0x3b8ae4af43, - 0x3b8ae4b019, 0x3b8ae4b3d5, 0x3b8ae4b505, 0x3b8ae4b635, - 0x3b8ae4b7ea, 0x3b8ae4b983, 0x3b8ae4ba19, 0x3b8ae4baa7, - 0x3b8ae4bb61, 0x3b8ae4bbc2, 0x3b8ae4bc96, 0x3b8ae4bd57, - 0x3b8ae4be50, 0x3b8ae4beab, 0x3b8ae4bfd4, 0x3b8ae4bef3, - 0x3b8ae4bedc, 0x3b8ae4bfd6, 0x3b8ae4bef5, 0x3b8ae4bede, - 0x3b8ae4bfd8, 0x3b8ae4bef7, 0x3b8ae4bee0, 0x3b8ae4bfd8, - 0x3b8ae4bef7, 0x3b8ae4bee0, 0x3b8ae4c984, 0x3b8ae4d1be, - 0x3b8ae4d92e, 0x3b8ae4dcc3, 0x3b8ae4e839, 0x3b8ae4e0f0, - 0x3b8ae4e839, 0x3b8ae4edd9, 0x3b8ae4edd9, 0x3b8ae4f059, - 0x3b8ae4f095, 0x3b8ae4f0d1, 0x3b8ae4c82b, 0x3b8ae4f10d, - 0x3b8ae4f149, 0x3b8ae484da, 0x3b8ae485a8, 0x3b8ae4f185, - 0x3b8ae4f35b, 0x3b8ae4a042, 0x3b8ae4a0b4, 0x3b8ae4e723, - 0x3b8ae48ce5, 0x3b8ae48d5f, 0x3b8ae48deb, 0x3b8ae4e0f2, - 0x3b8ae49129, 0x3b8ae4ee2c, 0x3b8ae47e91, 0x3b8ae4df8a, - 0x3b8ae4f552, 0x3b8ae4f70c, 0x3b8ae4f786, 0x3b8ae4f801, - 0x3b8ae4f8c5, 0x3b8ae4ebc9, 0x3b8ae50d1b, 0x3b8ae50db5, - 0x3b8ae50e0c, 0x3b8ae511c7, 0x3b8ae51306, 0x3b8ae513ec, - 0x3b8ae4c49f, 0x3b8ae4c488, 0x3b8ae4c4a6, 0x3b8ae4c494, - 0x3b8ae4c4ec, 0x3b8ae4c4d5, 0x3b8ae4c4f3, 0x3b8ae4c4e1, - 0x3b8ae49522, 0x3b8ae48ed7, 0x3b8ae48f90, 0x3b8ae4904d, - 0x3b8ae47ebb, 0x3b8ae4938e, 0x3b8ae4d1be, 0x3b8ae516df, - 0x3b8ae48ae5, 0x3b8ae518e1, 0x3b8ae51980, 0x3b8ae514d4, - 0x3b8ae515cb, 0x3b8ae51633, 0x3b8ae47e34, 0x3b8ae47d8f, - 0x3b8ae4a126, 0x3b8ae4825c, 0x3b8ae4e0f2, 0x3b8ae4de9c, - 0x3b8ae50881, 0x3b8ae50881, 0x3b8ae50068, 0x3b8ae4fe79, - 0x3b8ae4fe79, 0x3b8ae50675, 0x3b8ae50841, 0x3b8ae516ff, - 0x3b8ae4917a, 0x3b8ae47db0, 0x3b8ae51678, 0x3b8ae4fb6d, - 0x3b8ae4fb6d, 0x3b8ae4f61e, 0x3b8ae4f69d, 0x3b8ae50467, - 0x3b8ae4867f, 0x3b8ae48711, 0x3b8ae4881f, 0x3b8ae4892d, - 0x3b8ae48a09, 0x3b8ae5154a, 0x3b8ae4a24c, 0x3b8ae48676, - 0x3b8ae4f25c, 0x3b8ae4f354, 0x3b8ae527ba, 0x3b8ae527bc, - 0x3b8ae51698, 0x3b8ae47ef7, 0x3b8ae47fc8, 0x3b8ae4fbf4, - 0x3b8ae4fcd9, 0x3b8ae4c615, 0x3b8ae4c5e2, 0x3b8ae4c62e, - 0x3b8ae4c5fc, 0x3b8ae4ee9f, 0x3b8ae51a13, 0x3b8ae51a64, - 0x3b8ae51ab9, 0x3b8ae51b0c, 0x3b8ae51b81, 0x3b8ae51beb, - 0x3b8ae51c49, 0x3b8ae51ca5, 0x3b8ae51ca5, 0x3b8ae51d1f, - 0x3b8ae51d9f, 0x3b8ae51e70, 0x3b8ae51f21, 0x3b8ae52017, - 0x3b8ae52064, 0x3b8ae52182, 0x3b8ae521dc, 0x3b8ae52236, - 0x3b8ae5228c, 0x3b8ae52307, 0x3b8ae52393, 0x3b8ae5240a, - 0x3b8ae52481, 0x3b8ae4cd7d, 0x3b8ae4f940, 0x3b8ae4f940, - 0x3b8ae51f21, 0x3b8ae4ec27, 0x3b8ae4ed53, 0x3b8ae4edb4, - 0x3b8ae4edb4, 0x3b8ae47df2, 0x3b8ae47e13, 0x3b8ae4db85, - 0x3b8ae47fc8, 0x3b8ae4c984, 0x3b8ae51e70, 0x3b8ae4be50, - 0x3b8ae52558...} - len = 0 - str = 0x3a - ok = 58 - atom = 0x0 - rval = 140258808572544 - i = 58 - setter = 0x3a - index = 2157420872 - attrs = 2823501960 - flags = 0 - ltmp = 140258609439048 - j = 0 - atoms = 0x7f9097606570 - parent = 0x7f908097a148 - argc = 1 - slot = 0 - str2 = 0x7f908097a148 - type = JSTYPE_VOID - interruptJumpTable = {0x3b8ae47cf9 } - rtmp = 0 - sprop = 0x7f908097a148 -#53 0x0000003b8ae5508e in js_Invoke (cx=0x7f9080467c00, argc=1, - vp=0x7f908097a040, flags=0) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/js/src/jsinterp.cpp:1368 - frame = {regs = 0x7f908097a118, imacpc = 0x0, slots = 0x7f908097a058, - callobj = 0x0, argsobj = 0, varobj = 0x0, script = 0x7f9088605160, - fun = 0x7f90885469a0, thisp = 0x7f908c762700, argc = 1, - argv = 0x7f908097a050, rval = 22, down = 0x0, annotation = 0x0, - scopeChain = 0x7f908c762700, blockChain = 0x0, sharpDepth = 0, - sharpArray = 0x0, flags = 32, dormantNext = 0x0, displaySave = 0x0} - argv = 0x7f908097a050 - funobj = - ok = 32656 - clasp = - i = - mark = 0x7f908097a058 - sp = - newvp = - v = 140258808571776 - ops = - hookData = 0x0 - parent = 0x7f908c762700 - fun = - rootedArgsFlag = 32 - native = 0 - script = 0x7f9088605160 - nslots = - hook = 0 -#54 0x0000003b8ae553fe in js_InternalInvoke (cx=0x7f9080467c00, - obj=0x7f908c762700, fval=140258808571776, flags=0, - argc=, argv=, - rval=0x7fff32df1a20) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/js/src/jsinterp.cpp:1423 - invokevp = 0x7f908097a040 - mark = 0x7f908097a040 - ok = -#55 0x0000003b8ae1d3d7 in JS_CallFunctionValue (cx=0x7f9080467c00, - obj=, fval=, - argc=, argv=, - rval=) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/js/src/jsapi.cpp:5112 - ok = -#56 0x00007f909531b526 in nsJSContext::CallEventHandler (this=0x7f9087e15460, - aTarget=, aScope=, - aHandler=0x7f908c762780, aargv=0x7f907d94b300, arv=0x7fff32df1cb0) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/dom/base/nsJSEnvironment.cpp:2177 - argv = 0x7f908097a038 - funval = 140258808571776 - ok = - mark = 0x7f908097a028 - argc = 1 - stackGuard = {mContext = 0x7f9080467c00, mStack = 0x7f908097a028} - ar = {mContext = 0x7f9080467c00, mSaveDepth = 0} - rv = 0 - holder = {mContext = 0x7f9087e15460, mTerminations = 0x0} - targetVal = 140258808571648 - tvr = {mContext = 0x7f9080467c00, mTvr = {down = 0x0, count = 1, u = { - value = 140734046870064, object = 0x7fff32df1a30, - xml = 0x7fff32df1a30, trace = 0x7fff32df1a30, - sprop = 0x7fff32df1a30, weakRoots = 0x7fff32df1a30, - compiler = 0x7fff32df1a30, script = 0x7fff32df1a30, - array = 0x7fff32df1a30}}} - target = 0x7f908c762700 - rval = 22 - stack = { = { - mRawPtr = 0x7f90a0a16c48}, } - ar = {mContext = 0x7f908234b420, mSaveDepth = -1471465336} -#57 0x00007f909535925f in nsJSEventListener::HandleEvent ( - this=0x7f9082311680, aEvent=0x7f907ffe8f38) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/dom/src/events/nsJSEventListener.cpp:266 - rv = 0 - iargv = { = { - mRawPtr = 0x7f907d94b300}, } - eventString = { = { = { = {mData = 0x7f907d94b2e8, mLength = 9, mFlags = 65541}, }, - mFixedCapacity = 63, mFixedBuf = 0x7fff32df1b40}, mStorage = {99, - 111, 109, 109, 97, 110, 100, 0, 31744, 32838, 32656, 0, 7488, - 13023, 32767, 0, 7, 0, 0, 0, 46112, 33332, 32656, 0, 53832, - 34808, 32656, 0, 29, 0, 5, 1, 63, 0, 32767, 0, 7056, 13023, - 32767, 0, 0, 0, 0, 0, 16384, 0, 0, 0, 61252, 61793, 0, 0, 14097, - 14756, 49, 0, 45800, 32148, 32656, 0, 9, 0, 0, 0}} - atomName = { = { - mRawPtr = 0x7f909768f4a0}, } - funcval = {mObject = 0x7f908c762780, mContext = { = { - mRawPtr = 0x7f9087e15460}, }} - handledScriptError = - vrv = { = {mRawPtr = 0x0}, } -#58 0x00007f90952308e4 in nsEventListenerManager::HandleEventSubType ( - this=0x7f908ba7a700, aListenerStruct=0x7f908ba7a740, - aListener=0x7f9082311680, aDOMEvent=0x7f907ffe8f38, - aCurrentTarget=0x7f908234b420, aPhaseFlags=) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/content/events/src/nsEventListenerManager.cpp:1041 - result = -#59 0x00007f9095230cce in nsEventListenerManager::HandleEvent ( - this=0x7f908ba7a700, aPresContext=0x7f9080228c00, aEvent=0x7f907dab9940, - aDOMEvent=0x7fff32df20a0, aCurrentTarget=0x7f908234b420, aFlags=6, - aEventStatus=0x7fff32df20a8) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/content/events/src/nsEventListenerManager.cpp:1147 - kungFuDeathGrip = {mRawPtr = 0x7f9082311680} - ls = 0x7f908ba7a740 - useTypeInterface = 0 - useGenericInterface = 1 - popupStatePusher = {mOldState = openAllowed} - hasListener = 1 - pusher = {mScx = { = { - mRawPtr = 0x7f9087e15460}, }, - mScriptIsRunning = 0, mPushedSomething = 1} - currentGroup = 0 - typeData = 0x0 - dispData = 0x0 - iter = {::ForwardIterator> = {::Iterator> = { = {mPosition = 1, mNext = 0x0}, - mArray = @0x7f908ba7a728}, }, - mEnd = {::Iterator> = { = {mPosition = 1, - mNext = 0x7fff32df1ee0}, - mArray = @0x7f908ba7a728}, }} -#60 0x00007f90952447a6 in nsEventTargetChainItem::HandleEvent ( - this=0x7f9097d17d20, aVisitor=..., aFlags=6, - aMayHaveNewListenerManagers=1) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/content/events/src/nsEventDispatcher.cpp:246 -No locals. -#61 0x00007f90952448ca in nsEventTargetChainItem::HandleEventTargetChain ( - this=0x7f9097d17690, aVisitor=..., aFlags=6, aCallback=0x0, - aMayHaveNewListenerManagers=1) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/content/events/src/nsEventDispatcher.cpp:310 - createdELMs = 2410 - firstTarget = { = { - mRawPtr = 0x7f908234b420}, } - item = 0x7f9097d17d20 -#62 0x00007f9095244f69 in nsEventDispatcher::Dispatch ( - aTarget=, aPresContext=, - aEvent=0x7f907dab9940, aDOMEvent=0x7f907ffe8f38, - aEventStatus=0x7fff32df21ec, aCallback=0x0, aTargets=0x0) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/content/events/src/nsEventDispatcher.cpp:573 - postVisitor = { = { - mPresContext = 0x7f9080228c00, mEvent = 0x7f907dab9940, - mDOMEvent = 0x7f907ffe8f38, mEventStatus = nsEventStatus_eIgnore, - mItemFlags = 0, mItemData = { = { - mRawPtr = 0x0}, }}, } - t = { = {mRawPtr = 0x7f908234b420}, } - topEtci = 0x7f9097d17690 - rv = 0 - pool = {static sEtciPool = 0x7f909782f600, static sEtciPoolUsers = 3} - targetEtci = 0x7f9097d17d20 - preVisitor = { = {mPresContext = 0x7f9080228c00, - mEvent = 0x7f907dab9940, mDOMEvent = 0x7f907ffe8f38, - mEventStatus = nsEventStatus_eIgnore, mItemFlags = 0, - mItemData = { = { - mRawPtr = 0x7f9080467400}, }}, - mCanHandle = 1 '\001', mForceContentDispatch = 1 '\001', - mRelatedTargetIsInAnon = 0 '\000', - mOriginalTargetIsInAnon = 0 '\000', - mWantsWillHandleEvent = 0 '\000', mParentTarget = 0x0, - mEventTargetAtParent = 0x0} - content = { = { - mRawPtr = 0x7f908234b420}, } - isInAnon = - status = - target = { = { - mRawPtr = 0x7f908234b420}, } - externalDOMEvent = 1 - kungFuDeathGrip = { = { - mRawPtr = 0x7f9080228c00}, } -#63 0x00007f9095245244 in nsEventDispatcher::DispatchDOMEvent ( - aTarget=0x7f908234b420, aEvent=, - aDOMEvent=0x7f907ffe8f38, aPresContext=0x7f9080228c00, - aEventStatus=0x7fff32df21ec) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/content/events/src/nsEventDispatcher.cpp:636 - innerEvent = 0x7f907dab9940 - dontResetTrusted = 0 - privEvt = { = { - mRawPtr = 0x7f907ffe8f48}, } -#64 0x00007f909522e773 in nsEventListenerManager::DispatchEvent ( - this=, aEvent=0x7f907ffe8f38, _retval=0x7fff32df2318) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/content/events/src/nsEventListenerManager.cpp:1274 - context = { = { - mRawPtr = 0x7f9080228c00}, } - status = nsEventStatus_eIgnore - rv = - targetNode = { = { - mRawPtr = 0x7f908234b420}, } - document = { = { - mRawPtr = 0x7f907fff1000}, } - shell = -#65 0x00007f90951f06db in nsDOMEventRTTearoff::DispatchEvent ( - this=, aEvt=0x7f907ffe8f38, - _retval=) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/content/base/src/nsGenericElement.cpp:1672 - target = { = { - mRawPtr = 0x7f908ba7a710}, } -#66 0x00007f90951bdeda in nsContentUtils::DispatchXULCommand ( - aTarget=0x7f908234b420, aTrusted=, - aSourceEvent=0x7f907fd57ed8, aShell=0x0, aCtrl=0, aAlt=0, aShift=0, - aMeta=0) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/content/base/src/nsContentUtils.cpp:5140 - docEvent = { = { - mRawPtr = 0x7f907fff1118}, } - xulCommand = { = { - mRawPtr = 0x7f907ffe8fa8}, } - pEvent = { = { - mRawPtr = 0x7f907ffe8f48}, } - rv = 0 - doc = - event = { = { - mRawPtr = 0x7f907ffe8f38}, } - view = { = { - mRawPtr = 0x7f9080467490}, } - target = { = { - mRawPtr = 0x7f907d9518b0}, } - dummy = -1793133634 -#67 0x00007f9095465398 in nsXULElement::PreHandleEvent ( - this=, aVisitor=...) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/content/xul/content/src/nsXULElement.cpp:1672 - nsevent = { = {mRawPtr = 0x0}, } - orig = - domDoc = { = { - mRawPtr = 0x7f907fff1108}, } - commandElt = { = { - mRawPtr = 0x7f908234b458}, } - commandContent = { = { - mRawPtr = 0x7f908234b420}, } - xulEvent = { = { - mRawPtr = 0x7f907fd57f48}, } - command = { = { = { = { - mData = 0x7f908ba762b8, mLength = 14, - mFlags = 65541}, }, mFixedCapacity = 63, - mFixedBuf = 0x7fff32df23b0}, mStorage = {0, 0, 0, 0, 14472, - 43083, 32656, 0, 2, 0, 0, 0, 30128, 34956, 32656, 0, 0, 0, 0, 0, - 16463, 14756, 49, 0, 19048, 14796, 49, 0, 50024, 32677, 32656, 0, - 53, 0, 0, 0, 39920, 36000, 32656, 0, 10220, 13023, 32767, 0, 0, - 0, 0, 0, 5197, 18433, 56, 0, 8192, 41190, 32656, 0, 56103, 14755, - 49, 0, 25137, 14759, 49, 0}} - tag = -#68 0x00007f909524462e in nsEventTargetChainItem::PreHandleEvent ( - this=0x7f9097d172d8, aVisitor=...) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/content/events/src/nsEventDispatcher.cpp:215 - rv = -#69 0x00007f9095244dfe in nsEventDispatcher::Dispatch ( - aTarget=, aPresContext=0x7f9080228c00, - aEvent=0x7f907dab98e0, aDOMEvent=0x7f907fd57ed8, - aEventStatus=0x7fff32df27ec, aCallback=0x0, aTargets=0x0) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/content/events/src/nsEventDispatcher.cpp:520 - rv = 0 - pool = {static sEtciPool = 0x7f909782f600, static sEtciPoolUsers = 3} - targetEtci = 0x7f9097d172d8 - preVisitor = { = {mPresContext = 0x7f9080228c00, - mEvent = 0x7f907dab98e0, mDOMEvent = 0x7f907fd57ed8, - mEventStatus = nsEventStatus_eIgnore, mItemFlags = 0, - mItemData = { = { - mRawPtr = 0x0}, }}, mCanHandle = 0 '\000', - mForceContentDispatch = 1 '\001', - mRelatedTargetIsInAnon = 0 '\000', - mOriginalTargetIsInAnon = 1 '\001', - mWantsWillHandleEvent = 0 '\000', mParentTarget = 0x0, - mEventTargetAtParent = 0x0} - content = { = { - mRawPtr = 0x7f908ca09bf0}, } - isInAnon = - status = - target = { = { - mRawPtr = 0x7f908ca09bf0}, } - externalDOMEvent = 1 - kungFuDeathGrip = { = { - mRawPtr = 0x7f9080228c00}, } -#70 0x00007f9095245244 in nsEventDispatcher::DispatchDOMEvent ( - aTarget=0x7f908ca09bf0, aEvent=, - aDOMEvent=0x7f907fd57ed8, aPresContext=0x7f9080228c00, - aEventStatus=0x7fff32df27ec) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/content/events/src/nsEventDispatcher.cpp:636 - innerEvent = 0x7f907dab98e0 - dontResetTrusted = 0 - privEvt = { = { - mRawPtr = 0x7f907fd57ee8}, } -#71 0x00007f909509ee49 in PresShell::HandleDOMEventWithTarget ( - this=0x7f9080229000, aTargetContent=0x7f908ca09bf0, - aEvent=0x7f907fd57ed8, aStatus=) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/layout/base/nsPresShell.cpp:6590 - container = { = { - mRawPtr = 0x7f9080466c08}, } -#72 0x00007f90951bde99 in nsContentUtils::DispatchXULCommand ( - aTarget=0x7f908ca09bf0, aTrusted=, aSourceEvent=0x0, - aShell=0x7f9080229000, aCtrl=0, aAlt=0, aShift=0, aMeta=0) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/content/base/src/nsContentUtils.cpp:5134 - status = nsEventStatus_eIgnore - kungFuDeathGrip = { = { - mRawPtr = 0x7f9080229000}, } - docEvent = { = { - mRawPtr = 0x7f907fff1118}, } - xulCommand = { = { - mRawPtr = 0x7f907fd57f48}, } - pEvent = { = { - mRawPtr = 0x7f907fd57ee8}, } - rv = 0 - doc = - event = { = { - mRawPtr = 0x7f907fd57ed8}, } - view = { = { - mRawPtr = 0x7f9080467490}, } - target = { = {mRawPtr = 0x0}, } - dummy = 0 -#73 0x00007f909518d001 in nsButtonBoxFrame::DoMouseClick ( - this=0x7f907fa84768, aEvent=0x7fff32df2bb0, - aTrustEvent=) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/layout/xul/base/src/nsButtonBoxFrame.cpp:173 - isControl = 0 - isAlt = 0 - isShift = 0 - isMeta = 0 - shell = { = { - mRawPtr = 0x7f9080229000}, } -#74 0x00007f909518d1a8 in nsButtonBoxFrame::HandleEvent (this=0x7f907fa84768, - aPresContext=0x7f9080228c00, aEvent=0x7fff32df2bb0, - aEventStatus=0x7fff32df29c8) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/layout/xul/base/src/nsButtonBoxFrame.cpp:138 -No locals. -#75 0x00007f90952449a4 in nsEventTargetChainItem::HandleEventTargetChain ( - this=0x7f9097d170a8, aVisitor=..., aFlags=6, aCallback=0x7fff32df2a80, - aMayHaveNewListenerManagers=) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/content/events/src/nsEventDispatcher.cpp:354 - createdELMs = 2410 - firstTarget = { = { - mRawPtr = 0x7f90888c75b0}, } - item = 0x0 -#76 0x00007f9095244f69 in nsEventDispatcher::Dispatch ( - aTarget=, aPresContext=, - aEvent=0x7fff32df2bb0, aDOMEvent=0x0, aEventStatus=0x7fff32df30bc, - aCallback=0x7fff32df2a80, aTargets=0x0) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/content/events/src/nsEventDispatcher.cpp:573 - postVisitor = { = { - mPresContext = 0x7f9080228c00, mEvent = 0x7fff32df2bb0, - mDOMEvent = 0x7f907da565f8, mEventStatus = nsEventStatus_eIgnore, - mItemFlags = 0, mItemData = { = { - mRawPtr = 0x0}, }}, } - t = { = {mRawPtr = 0x7f908ca09bf0}, } - topEtci = 0x7f9097d170a8 - rv = 0 - pool = {static sEtciPool = 0x7f909782f600, static sEtciPoolUsers = 3} - targetEtci = 0x7f9097d17118 - preVisitor = { = {mPresContext = 0x7f9080228c00, - mEvent = 0x7fff32df2bb0, mDOMEvent = 0x0, - mEventStatus = nsEventStatus_eIgnore, mItemFlags = 0, - mItemData = { = { - mRawPtr = 0x7f9080467400}, }}, - mCanHandle = 1 '\001', mForceContentDispatch = 1 '\001', - mRelatedTargetIsInAnon = 0 '\000', - mOriginalTargetIsInAnon = 1 '\001', - mWantsWillHandleEvent = 0 '\000', mParentTarget = 0x0, - mEventTargetAtParent = 0x0} - content = { = { - mRawPtr = 0x7f908ca09bf0}, } - isInAnon = - status = - target = { = { - mRawPtr = 0x7f908ca09bf0}, } - externalDOMEvent = 0 - kungFuDeathGrip = { = { - mRawPtr = 0x7f9080228c00}, } -#77 0x00007f909509eadb in PresShell::HandleEventInternal ( - this=0x7f9080229000, aEvent=0x7fff32df2bb0, aView=, - aStatus=0x7fff32df30bc) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/layout/base/nsPresShell.cpp:6525 - eventCB = { = { - _vptr.nsDispatchingCallback = 0x7f9095a029b0}, mPresShell = { - mRawPtr = 0x7f9080229000}} - wasHandlingKeyBoardEvent = 0 - popupStatePusher = {mOldState = openControlled} - weakView = {mPrev = 0x0, mView = 0x0} - isHandlingUserInput = 0 - userInpStatePusher = {mIsHandlingUserInput = 0} - manager = { = { - mRawPtr = 0x7f9081cd2d00}, } - rv = 0 -#78 0x00007f909509ef33 in PresShell::HandleEventWithTarget ( - this=0x7f9080229000, aEvent=0x7fff32df2bb0, aFrame=, - aContent=, aStatus=) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/layout/base/nsPresShell.cpp:6381 -No locals. -#79 0x00007f9095237ff0 in nsEventStateManager::CheckForAndDispatchClick ( - this=0x7f9081cd2cf0, aPresContext=, - aEvent=0x7fff32df3220, aStatus=0x7fff32df30bc) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/content/events/src/nsEventStateManager.cpp:3994 - mouseContent = { = { - mRawPtr = 0x7f908ca09bf0}, } - event = { = { = { = { = {eventStructType = 10 '\n', message = 327, refPoint = {x = 268, - y = 55}, time = 12433188, flags = 2049, - userType = { = { - mRawPtr = 0x0}, }, - target = { = { - mRawPtr = 0x7f908ca09bf0}, }, - currentTarget = { = { - mRawPtr = 0x0}, }, - originalTarget = { = { - mRawPtr = 0x7f908ca09bf0}, }}, - widget = { = { - mRawPtr = 0x7f9089f4fc70}, }, - nativeMsg = 0x0}, isShift = 0, isControl = 0, isAlt = 0, - isMeta = 0}, relatedTarget = { = { - mRawPtr = 0x0}, }, button = 0, pressure = 0}, - acceptActivation = 0 '\000', ignoreRootScrollFrame = 0 '\000', - reason = nsMouseEvent::eReal, context = nsMouseEvent::eNormal, - exit = nsMouseEvent::eChild, clickCount = 1} - presShell = { = { - mRawPtr = 0x7f9080229000}, } - ret = 0 - flags = 0 -#80 0x00007f90952384c4 in nsEventStateManager::PostHandleEvent ( - this=0x7f9081cd2cf0, aPresContext=0x7f9080228c00, aEvent=0x7fff32df3220, - aTargetFrame=0x7f907fa84768, aStatus=0x7fff32df30bc, aView=0x7f908a064c00) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/content/events/src/nsEventStateManager.cpp:2947 - shell = - presContext = {mRawPtr = 0x7f9080228c00} - ret = 0 -#81 0x00007f909509ebf9 in PresShell::HandleEventInternal ( - this=0x7f9080229000, aEvent=0x7fff32df3220, aView=, - aStatus=0x7fff32df30bc) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/layout/base/nsPresShell.cpp:6548 - wasHandlingKeyBoardEvent = - popupStatePusher = {mOldState = openAbused} - weakView = {mPrev = 0x0, mView = 0x7f908a064c00} - isHandlingUserInput = 1 - userInpStatePusher = {mIsHandlingUserInput = 1} - manager = { = { - mRawPtr = 0x7f9081cd2d00}, } - rv = -#82 0x00007f909509f074 in PresShell::HandlePositionedEvent ( - this=0x7f9080229000, aView=0x7f908a064c00, - aTargetFrame=, aEvent=0x7fff32df3220, - aEventStatus=0x7fff32df30bc) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/layout/base/nsPresShell.cpp:6364 - rv = 0 -#83 0x00007f90950a7aad in PresShell::HandleEvent (this=0x7f9080229000, - aView=0x7f908a064c00, aEvent=0x7fff32df3220, aEventStatus=0x7fff32df30bc) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/layout/base/nsPresShell.cpp:6228 - framePresContext = - rootPresContext = - eventPoint = {x = 16080, y = 3300} - targetFrame = 0x7f907fa84768 - frame = - dispatchUsingCoordinates = - rv = -#84 0x00007f9095310bf2 in nsViewManager::HandleEvent ( - this=, aView=, - aPoint=, aEvent=0x7fff32df3220, - aCaptured=) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/view/src/nsViewManager.cpp:1224 - obs = { = {mRawPtr = 0x7f90802290e0}, } - status = nsEventStatus_eIgnore -#85 0x00007f9095313621 in nsViewManager::DispatchEvent (this=0x7f908a064b80, - aEvent=0x7fff32df3220, aView=, - aStatus=0x7fff32df31cc) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/view/src/nsViewManager.cpp:1203 - p2a = 60 - offset = - baseViewDimensions = - pt = warning: bits 32-64 in computed object were optimized out; replacing with zeroes -{x = 16110, y = 0} - baseView = - view = - capturedEvent = 0 -#86 0x00007f909530deaa in HandleEvent (aEvent=0x7fff32df3220) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/view/src/nsView.cpp:167 - vm = { = {mRawPtr = 0x7f908a064b80}, } - result = nsEventStatus_eIgnore - view = 0x7f908a064c00 -#87 0x00007f909d169999 in nsWindow::DispatchEvent (this=0x7f9089f4fc70, - aEvent=, aStatus=@0x7fff32df32ac) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/widget/src/gtk2/nsWindow.cpp:626 -No locals. -#88 0x00007f909d171b96 in nsWindow::OnButtonReleaseEvent ( - this=0x7f9089f4fc70, aWidget=, aEvent=0x7f90886050f0) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/widget/src/gtk2/nsWindow.cpp:3227 - pressure = 0 - status = nsEventStatus_eIgnore - domButton = 0 - event = { = { = { = { = {eventStructType = 10 '\n', message = 301, refPoint = {x = 268, - y = 55}, time = 12433188, flags = 1025, - userType = { = { - mRawPtr = 0x0}, }, - target = { = { - mRawPtr = 0x7f90888c75b0}, }, - currentTarget = { = { - mRawPtr = 0x0}, }, - originalTarget = { = { - mRawPtr = 0x7f908ca09bf0}, }}, - widget = { = { - mRawPtr = 0x7f9089f4fc70}, }, - nativeMsg = 0x0}, isShift = 0, isControl = 0, isAlt = 0, - isMeta = 0}, relatedTarget = { = { - mRawPtr = 0x0}, }, button = 0, pressure = 0}, - acceptActivation = 0 '\000', ignoreRootScrollFrame = 0 '\000', - reason = nsMouseEvent::eReal, context = nsMouseEvent::eNormal, - exit = nsMouseEvent::eChild, clickCount = 1} -#89 0x00007f909d171c01 in button_release_event_cb (widget=0x7f9088083380, - event=0x7f90886050f0) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/widget/src/gtk2/nsWindow.cpp:5981 - window = -#90 0x0000003138b51003 in _gtk_marshal_BOOLEAN__BOXED ( - closure=0x7f90885b6970, return_value=0x7fff32df34b0, - n_param_values=, param_values=0x7f907d92fa90, - invocation_hint=, marshal_data=) - at gtkmarshalers.c:84 - callback = 0x7f909d171bd2 - cc = 0x7f90885b6970 - data1 = 0x7f9088083380 - data2 = 0x0 - v_return = - __PRETTY_FUNCTION__ = "_gtk_marshal_BOOLEAN__BOXED" -#91 0x000000384b00b98e in IA__g_closure_invoke (closure=0x7f90885b6970, - return_value=0x7fff32df34b0, n_param_values=2, - param_values=0x7f907d92fa90, invocation_hint=0x7fff32df3470) - at gclosure.c:767 - marshal = - marshal_data = - in_marshal = - __PRETTY_FUNCTION__ = "IA__g_closure_invoke" -#92 0x000000384b01f947 in signal_emit_unlocked_R (node=, - detail=0, instance=0x7f9088083380, emission_return=0x7fff32df3600, - instance_and_params=0x7f907d92fa90) at gsignal.c:3248 - tmp = - handler = 0x7f90885b6940 - accumulator = 0x7f90a82a0cd0 - emission = {next = 0x0, instance = 0x7f9088083380, ihint = { - signal_id = 34, detail = 0, run_type = G_SIGNAL_RUN_FIRST}, - state = EMISSION_RUN, chain_type = 4} - class_closure = 0x7f90a829fe80 - handler_list = 0x7f90885b6940 - return_accu = 0x7fff32df34b0 - accu = {g_type = 20, data = {{v_int = 0, v_uint = 0, v_long = 0, - v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, - v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, - v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, - v_float = 0, v_double = 0, v_pointer = 0x0}}} - signal_id = 34 - max_sequential_handler_number = 1235 - return_value_altered = 0 -#93 0x000000384b020c29 in IA__g_signal_emit_valist ( - instance=, signal_id=, - detail=, var_args=0x7fff32df3660) at gsignal.c:2991 - return_value = {g_type = 20, data = {{v_int = 0, v_uint = 0, - v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, - v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, - v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, - v_float = 0, v_double = 0, v_pointer = 0x0}}} - error = 0x0 - rtype = 20 - static_scope = 0 - instance_and_params = 0x7f907d92fa90 - signal_return_type = 20 - param_values = 0x7f907d92faa8 - node = 0x7f90a82880b0 - i = - n_params = 1 - __PRETTY_FUNCTION__ = "IA__g_signal_emit_valist" -#94 0x000000384b0213a3 in IA__g_signal_emit (instance=, - signal_id=, detail=) - at gsignal.c:3038 - var_args = {{gp_offset = 32, fp_offset = 48, - overflow_arg_area = 0x7fff32df3740, - reg_save_area = 0x7fff32df3680}} -#95 0x0000003138c8190f in gtk_widget_event_internal (widget=0x7f9088083380, - event=0x7f90886050f0) at gtkwidget.c:4958 - signal_num = - return_val = 0 -#96 0x0000003138b47d63 in IA__gtk_propagate_event (widget=0x7f9088083380, - event=0x7f90886050f0) at gtkmain.c:2442 - tmp = - handled_event = - __PRETTY_FUNCTION__ = "IA__gtk_propagate_event" -#97 0x0000003138b48f2b in IA__gtk_main_do_event (event=0x7f90886050f0) - at gtkmain.c:1647 - event_widget = - grab_widget = 0x7f9088083380 - window_group = - rewritten_event = - tmp_list = - __PRETTY_FUNCTION__ = "IA__gtk_main_do_event" -#98 0x000000313926039c in gdk_event_dispatch (source=, - callback=, user_data=) - at gdkevents-x11.c:2372 - display = - event = 0x7f90886050f0 -#99 0x0000003849c3bd02 in g_main_dispatch (context=0x7f90a82177a0) - at gmain.c:1960 - dispatch = 0x3139260350 - was_in_call = 0 - user_data = 0x0 - callback = 0 - cb_funcs = 0x0 - cb_data = 0x0 - current_source_link = {data = 0x7f90a821d6a0, next = 0x0} - need_destroy = - source = 0x7f90a821d6a0 - current = 0x7f9099d609d0 - i = -#100 IA__g_main_context_dispatch (context=0x7f90a82177a0) at gmain.c:2513 -No locals. -#101 0x0000003849c3fae8 in g_main_context_iterate (context=0x7f90a82177a0, - block=1, dispatch=1, self=) at gmain.c:2591 - max_priority = 2147483647 - timeout = -1 - some_ready = 1 - nfds = 13 - allocated_nfds = - fds = - __PRETTY_FUNCTION__ = "g_main_context_iterate" -#102 0x0000003849c3fc9c in IA__g_main_context_iteration ( - context=0x7f90a82177a0, may_block=1) at gmain.c:2654 - retval = -#103 0x00007f909d189b13 in nsBaseAppShell::DoProcessNextNativeEvent ( - this=0x7f90a0a7e700, mayWait=) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/widget/src/xpwidgets/nsBaseAppShell.cpp:155 - prevVal = nsBaseAppShell::eEventloopNone - result = 0 -#104 0x00007f909d189c79 in nsBaseAppShell::OnProcessNextEvent ( - this=0x7f90a0a7e700, thr=0x7f90a82438b0, mayWait=0, - recursionDepth=) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/widget/src/xpwidgets/nsBaseAppShell.cpp:311 - start = 1099877142 - limit = 20 - oldBlockedWait = 0x0 - needEvent = 1 -#105 0x0000003139a6c712 in nsThread::ProcessNextEvent (this=0x7f90a82438b0, - mayWait=1, result=0x7fff32df3a3c) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/xpcom/threads/nsThread.cpp:508 - notifyGlobalObserver = 1 - obs = { = {mRawPtr = 0x7f90a0a7e708}, } - rv = -#106 0x0000003139a3db88 in NS_ProcessNextEvent_P ( - thread=, mayWait=) - at nsThreadUtils.cpp:250 - val = 1 -#107 0x00007f909d189d69 in nsBaseAppShell::Run (this=0x7f90a0a7e700) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/widget/src/xpwidgets/nsBaseAppShell.cpp:177 - thread = 0x7f90a82438b0 -#108 0x00007f909c4b589c in nsAppStartup::Run (this=0x7f90a0ad9d80) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/toolkit/components/startup/src/nsAppStartup.cpp:183 - rv = -#109 0x0000003139e1934d in XRE_main (argc=, - argv=, aAppData=) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/toolkit/xre/nsAppRunner.cpp:3483 - remoteService = { = { - mRawPtr = 0x7f9099ebc9b0}, } - appStartup = { = { - mRawPtr = 0x7f90a0ad9d80}, } - shuttingDown = 0 - cmdLine = { = { - mRawPtr = 0x7f9097395cc0}, } - workingDir = { = { - mRawPtr = 0x7f909753ce00}, } - xpcom = {mServiceManager = 0x7f90a829a148} - desktopStartupIDEnv = - updRoot = { = { - mRawPtr = 0x7f90a821a180}, } - persistent = 1 - profLD = { = { - mRawPtr = 0x7f90a0e02fc0}, } - dirProvider = - { = { = { = { - _vptr.nsISupports = 0x313a02f4c0}, }, }, = { = { - _vptr.nsISupports = 0x313a02f508}, }, - mAppProvider = { = { - mRawPtr = 0x0}, }, - mGREDir = { = { - mRawPtr = 0x7f90a821a300}, }, - mXULAppDir = { = { - mRawPtr = 0x7f90a821a180}, }, - mProfileDir = { = { - mRawPtr = 0x7f90a0e02f00}, }, - mProfileLocalDir = { = { - mRawPtr = 0x7f90a0e02fc0}, }, - mProfileNotified = 1 '\001', mExtensionsLoaded = 1 '\001', - mAppBundleDirectories = { = {mArray = { - mImpl = 0x0}}, }, - mExtensionDirectories = { = {mArray = { - mImpl = 0x7f90a0e11600}}, }, - mThemeDirectories = { = {mArray = { - mImpl = 0x7f90a0e11650}}, }} - desktopStartupIDPtr = - nativeApp = { = { - mRawPtr = 0x7f90a82d4250}, } - startOffline = 0 - profileName = { = { = { = {mData = 0x7f90a0e10218 "default", mLength = 7, - mFlags = 65541}, }, mFixedCapacity = 63, - mFixedBuf = 0x7fff32df4040 ""}, - mStorage = "\000\000\000\000\000\000\000\000\200\241!\250\220\177\000\000\240@\337\062\377\177\000\000\260@\337\062\377\177\000\000\016\000\a\200\000\000\000\000T\r\246\071\061", '\000' "\371, \062\246\071\061\000\000"} - upgraded = - versionOK = -1712600656 - appInitiatedRestart = 0 - desktopStartupID = { = { = { = {mData = 0x7fff32df40a0 "", mLength = 0, - mFlags = 65553}, }, mFixedCapacity = 63, - mFixedBuf = 0x7fff32df40a0 ""}, - mStorage = "\000\003!\250\220\177\000\000\032\000\000\000\001\000\000\000\200\241!\250\220\177\000\000\000\000\000\000\000\000\000\000\"\030\246\071\061\000\000\000\371\062\246\071\061\000\000\000HA\337\062\377\177\000\000\000\000\000\000\000\000\000"} - display_name = - xremotearg = - _g_set_application_name = - canRun = 1 - profileLock = { = { - mRawPtr = 0x7f90a0e11560}, } - profD = { = { - mRawPtr = 0x7f90a0e02f00}, } - version = { = { = { = {mData = 0x7fff32df3fe0 "3.1.1_20100720161535/20100720161535", mLength = 35, - mFlags = 65553}, }, mFixedCapacity = 63, - mFixedBuf = 0x7fff32df3fe0 "3.1.1_20100720161535/20100720161535"}, mStorage = "3.1.1_20100720161535/20100720161535\000\377\177\000\000\270\000\000\000\000\000\000\000\260@\337\062\377\177\000\000\360@\337\062\377\177\000"} - needsRestart = 0 - display = 0x7f90a8264190 - _gtk_window_set_auto_startup_notification = - osABI = { = { = { - mData = 0x3139e24927 "Linux_x86_64-gcc3", mLength = 17, - mFlags = 1}, }, } - rv = 0 - gtkModules = - appData = { = {size = 112, directory = 0x7f90a821a180, - vendor = 0x0, name = 0x7f90a8202070 "Thunderbird", - version = 0x7f90a82040b0 "3.1.1", - buildID = 0x7f90a8202080 "20100720161535", - ID = 0x7f90a8219220 "{3550f703-e582-4d05-9a08-453d09bdfdc6}", - copyright = 0x0, flags = 14, xreDirectory = 0x7f90a821a300, - minVersion = 0x7f90a82040b8 "1.9.2.7", - maxVersion = 0x7f90a82040c0 "1.9.2.7", - crashReporterURL = 0x7f90a8219250 "https://crash-reports.mozilla.com/submit", profile = 0x0}, } - localIniFile = { = { - mRawPtr = 0x7f90a821a240}, } - parser = { - mSections = {, nsINIParser_internal::INIValue*>> = { > >> = {mTable = {ops = 0x3139cc6110, data = 0x0, hashShift = 28, - maxAlphaFrac = 192 '\300', minAlphaFrac = 64 '@', - entrySize = 24, entryCount = 1, removedCount = 0, - generation = 0, - entryStore = 0x7f90a8226180 ""}}, }, }, mFileContents = {mRawPtr = 0x7f90a8210400 "[Build"}} - ar = - override = 0x0 - iniFile = { = { - mRawPtr = 0x7f90a821a240}, } - i = -#110 0x0000000000401a94 in main (argc=1, argv=0x7fff32df4268) - at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mail/app/nsMailApp.cpp:101 - rv = - appData = 0x7f90a821d080 - appini = { = { - mRawPtr = 0x7f90a821a0c0}, } - result = -From To Syms Read Shared Object Library -0x0000003848c05640 0x0000003848c10e48 Yes /lib64/libpthread.so.0 -0x0000003b8ae1bcb0 0x0000003b8aea19c8 Yes /usr/lib64/thunderbird-3.1/libmozjs.so -0x0000003139e0af70 0x0000003139e22878 Yes /usr/lib64/thunderbird-3.1/libxul.so -0x0000003139602890 0x0000003139602ae8 Yes /usr/lib64/thunderbird-3.1/libxpcom.so -0x0000003139a37eb0 0x0000003139a87f98 Yes /usr/lib64/thunderbird-3.1/libxpcom_core.so -0x0000003859400e70 0x0000003859401ce8 Yes /lib64/libplds4.so -0x00000038598013d0 0x0000003859802b18 Yes /lib64/libplc4.so -0x0000003858c0cfc0 0x0000003858c2c968 Yes /lib64/libnspr4.so -0x0000003849000de0 0x0000003849001998 Yes /lib64/libdl.so.2 -0x0000003138a681c0 0x0000003138d0d268 Yes /usr/lib64/libgtk-x11-2.0.so.0 -0x00000038544096b0 0x00000038544150f8 Yes /usr/lib64/libatk-1.0.so.0 -0x000000384c819b60 0x000000384c8812c8 Yes /lib64/libgio-2.0.so.0 -0x0000003851407650 0x0000003851421348 Yes /usr/lib64/libpangoft2-1.0.so.0 -0x000000384d40c850 0x000000384d4745a8 Yes /usr/lib64/libfreetype.so.6 -0x000000384dc05c80 0x000000384dc1ff28 Yes /usr/lib64/libfontconfig.so.1 -0x000000313921d260 0x000000313927f2a8 Yes /usr/lib64/libgdk-x11-2.0.so.0 -0x0000003854005940 0x0000003854017ba8 Yes /usr/lib64/libgdk_pixbuf-2.0.so.0 -0x0000003853404630 0x0000003853408eb8 Yes /usr/lib64/libpangocairo-1.0.so.0 -0x000000385200ede0 0x000000385202d768 Yes /usr/lib64/libpango-1.0.so.0 -0x0000003853809c50 0x000000385385b058 Yes /usr/lib64/libcairo.so.2 -0x000000384b008d20 0x000000384b032a78 Yes /lib64/libgobject-2.0.so.0 -0x000000384b401080 0x000000384b401fc8 Yes /lib64/libgmodule-2.0.so.0 -0x000000384a801590 0x000000384a8029f8 Yes /lib64/libgthread-2.0.so.0 -0x0000003849802140 0x00000038498055a8 Yes /lib64/librt.so.1 -0x0000003849c155c0 0x0000003849c99d58 Yes /lib64/libglib-2.0.so.0 -0x000000384b81dd80 0x000000384b8ab938 Yes /usr/lib64/libX11.so.6 -0x0000003137e09060 0x0000003137e19878 Yes /usr/lib64/libdbus-glib-1.so.2 -0x000000384ac07090 0x000000384ac2e4c8 Yes /lib64/libdbus-1.so.3 -0x0000003850009230 0x000000385002abd8 Yes /usr/lib64/libhunspell-1.2.so.0 -0x00000038508563f0 0x00000038508c33f6 Yes /usr/lib64/libstdc++.so.6 -0x0000003848803ea0 0x0000003848843fa8 Yes /lib64/libm.so.6 -0x000000384d802910 0x000000384d812f48 Yes /lib64/libgcc_s.so.1 -0x000000384841e9a0 0x000000384852b820 Yes /lib64/libc.so.6 -0x0000003848000af0 0x0000003848018904 Yes /lib64/ld-linux-x86-64.so.2 -0x0000003136a03530 0x0000003136a0e638 Yes /usr/lib64/libXext.so.6 -0x000000313ae130d0 0x000000313ae4f938 Yes /usr/lib64/libXt.so.6 -0x000000384fc2d6c0 0x000000384fcadb98 Yes /lib64/libasound.so.2 -0x000000384f001370 0x000000384f004178 Yes /usr/lib64/libXfixes.so.3 -0x000000384a4038c0 0x000000384a412528 Yes /lib64/libresolv.so.2 -0x0000003849401ef0 0x000000384940d228 Yes /lib64/libz.so.1 -0x000000384a005550 0x000000384a015038 Yes /lib64/libselinux.so.1 -0x000000384c403b70 0x000000384c41ca08 Yes /lib64/libexpat.so.1 -0x000000384ec018c0 0x000000384ec07f58 Yes /usr/lib64/libXrender.so.1 -0x0000003137600a20 0x0000003137601508 Yes /usr/lib64/libXinerama.so.1 -0x0000003136e01eb0 0x0000003136e0c608 Yes /usr/lib64/libXi.so.6 -0x0000003137201720 0x0000003137206828 Yes /usr/lib64/libXrandr.so.2 -0x000000384f402880 0x000000384f407678 Yes /usr/lib64/libXcursor.so.1 -0x0000003138600b40 0x0000003138601908 Yes /usr/lib64/libXcomposite.so.1 -0x0000003853c00a90 0x0000003853c01638 Yes /usr/lib64/libXdamage.so.1 -0x000000384d004830 0x000000384d01e7a8 Yes /usr/lib64/libpng12.so.0 -0x0000003851807230 0x0000003851851e78 Yes /usr/lib64/libpixman-1.so.0 -0x000000384c008650 0x000000384c013898 Yes /usr/lib64/libxcb.so.1 -0x00000031382019f0 0x00000031382062a8 Yes /usr/lib64/libSM.so.6 -0x0000003855804d70 0x0000003855813778 Yes /usr/lib64/libICE.so.6 -0x000000384bc00dd0 0x000000384bc01b68 Yes /usr/lib64/libXau.so.6 -0x0000003137a014b0 0x0000003137a02be8 Yes /lib64/libuuid.so.1 -0x00007f90a2164110 0x00007f90a216c258 Yes /lib64/libnss_files.so.2 -0x00007f90a1f3abc0 0x00007f90a1f5c818 Yes /usr/lib64/gtk-2.0/2.10.0/engines/libclearlooks.so -0x00007f90a1d35620 0x00007f90a1d35e08 Yes /usr/lib64/gtk-2.0/modules/libpk-gtk-module.so -0x00007f90a1b2ffb0 0x00007f90a1b321e8 Yes /usr/lib64/gtk-2.0/modules/libcanberra-gtk-module.so -0x00007f90a192bc60 0x00007f90a192d0a8 Yes /usr/lib64/libcanberra-gtk.so.0 -0x0000003860c03280 0x0000003860c0c318 Yes /usr/lib64/libcanberra.so.0 -0x000000385ec01fa0 0x000000385ec05fd8 Yes /usr/lib64/libvorbisfile.so.3 -0x000000385c003700 0x000000385c01a718 Yes /usr/lib64/libvorbis.so.0 -0x000000385bc018a0 0x000000385bc03bb8 Yes /usr/lib64/libogg.so.0 -0x000000385c801e30 0x000000385c809ca8 Yes /usr/lib64/libtdb.so.1 -0x000000385b402370 0x000000385b406758 Yes /usr/lib64/libltdl.so.7 -0x000000313c222430 0x000000313c268f08 Yes /usr/lib64/libgnomeui-2.so.0 -0x00007f90a16d6d70 0x00007f90a170d068 Yes /usr/lib64/libbonoboui-2.so.0 -0x000000313b20bcf0 0x000000313b228cd8 Yes /usr/lib64/libgnomecanvas-2.so.0 -0x000000313b606ee0 0x000000313b610e28 Yes /usr/lib64/libgnome-2.so.0 -0x0000003861402ef0 0x00000038614155e8 Yes /usr/lib64/libart_lgpl_2.so.2 -0x000000313a617900 0x000000313a64f618 Yes /usr/lib64/libgnomevfs-2.so.0 -0x0000003856411b30 0x000000385642da28 Yes /usr/lib64/libgconf-2.so.4 -0x000000399ea06d70 0x000000399ea15bd8 Yes /usr/lib64/libgnome-keyring.so.0 -0x0000003859027fa0 0x0000003859052ee8 Yes /usr/lib64/libbonobo-2.so.0 -0x000000385f80adf0 0x000000385f812f58 Yes /usr/lib64/libbonobo-activation.so.4 -0x0000003855427990 0x000000385544b6a8 Yes /usr/lib64/libORBit-2.so.0 -0x00007f90a1393950 0x00007f90a1470048 Yes /usr/lib64/libxml2.so.2 -0x0000003858401b10 0x0000003858406ee8 Yes /lib64/libpopt.so.0 -0x00007f90a11629a0 0x00007f90a1166178 Yes /usr/lib64/libgailutil.so.18 -0x0000003856014500 0x0000003856046708 Yes /usr/lib64/libssl.so.10 -0x000000385105c900 0x0000003851121288 Yes /lib64/libcrypto.so.10 -0x000000399ee00ca0 0x000000399ee01aa8 Yes /usr/lib64/libavahi-glib.so.1 -0x00000039a2803390 0x00000039a2808698 Yes /usr/lib64/libavahi-common.so.3 -0x00000039a24038b0 0x00000039a240bf68 Yes /usr/lib64/libavahi-client.so.3 -0x0000003857c00e10 0x0000003857c01688 Yes /lib64/libutil.so.1 -0x00000039a1406d00 0x00000039a1450078 Yes /lib64/libgcrypt.so.11 -0x000000385f003110 0x000000385f003ad8 Yes /usr/lib64/libORBitCosNaming-2.so.0 -0x0000003851c06c00 0x0000003851c27268 Yes /lib64/libgssapi_krb5.so.2 -0x0000003852c18540 0x0000003852c73f08 Yes /lib64/libkrb5.so.3 -0x00007f90a0f5e220 0x00007f90a0f5ed08 Yes /lib64/libcom_err.so.2 -0x00000038528055c0 0x000000385281e6b8 Yes /lib64/libk5crypto.so.3 -0x00000038570007f0 0x0000003857000d58 Yes /lib64/libgpg-error.so.0 -0x00000038524026c0 0x00000038524067b8 Yes /lib64/libkrb5support.so.0 -0x0000003850c00aa0 0x0000003850c00fa8 Yes /lib64/libkeyutils.so.1 -0x00007f90a0bfc580 0x00007f90a0bfdce8 Yes /usr/lib64/gconv/UTF-16.so -0x00007f90a04c9c30 0x00007f90a06ec5a8 Yes /usr/lib64/thunderbird-3.1/components/libmail.so -0x00007f90a0230990 0x00007f90a023ca88 Yes /usr/lib64/thunderbird-3.1/components/libspellchecker.so -0x00007f90a001ecf0 0x00007f90a0026708 Yes /usr/lib64/thunderbird-3.1/components/libchrome.so -0x00007f909fd280b0 0x00007f909fda86f8 Yes /usr/lib64/thunderbird-3.1/components/libnecko.so -0x00007f909f0d6890 0x00007f909f0de728 Yes /usr/lib64/thunderbird-3.1/components/libpref.so -0x00007f909eea9370 0x00007f909eeb4cf8 Yes /usr/lib64/thunderbird-3.1/components/libi18n.so -0x00007f909ec9a2b0 0x00007f909ec9de38 Yes /usr/lib64/thunderbird-3.1/components/libdbusservice.so -0x00007f909ea86e60 0x00007f909ea8ffe8 Yes /usr/lib64/thunderbird-3.1/components/libjar50.so -0x00007f909e7dfa20 0x00007f909e8425f8 Yes /usr/lib64/thunderbird-3.1/components/libxpconnect.so -0x00007f909d163930 0x00007f909d199b68 Yes /usr/lib64/thunderbird-3.1/components/libwidget_gtk2.so -0x00007f909cf3eeb0 0x00007f909cf42bc8 Yes /usr/lib64/thunderbird-3.1/libgkgfx.so -0x00007f909cd047b0 0x00007f909cd26068 Yes /usr/lib64/thunderbird-3.1/libthebes.so -0x00007f909cae9ee0 0x00007f909caeb0c8 Yes /usr/lib64/thunderbird-3.1/libgtkxtbin.so -0x00007f909c8e6300 0x00007f909c8e6b98 Yes /usr/lib64/thunderbird-3.1/libgfxpsshar.so -0x00007f909c6e2480 0x00007f909c6e2f28 Yes /usr/lib64/gconv/ISO8859-2.so -0x00007f909c4b4ca0 0x00007f909c4d1af8 Yes /usr/lib64/thunderbird-3.1/components/libtoolkitcomps.so -0x00007f909c27cc80 0x00007f909c29c008 Yes /usr/lib64/thunderbird-3.1/components/libembedcomponents.so -0x00007f909bee98f0 0x00007f909bef7b38 Yes /usr/lib64/thunderbird-3.1/components/libcaps.so -0x00007f909aeba890 0x00007f909aebc898 Yes /usr/lib64/thunderbird-3.1/components/libsystem-pref.so -0x00007f909acb4ea0 0x00007f909acb6738 Yes /usr/lib64/thunderbird-3.1/components/libwindowds.so -0x00007f909aa8d010 0x00007f909aaa3608 Yes /usr/lib64/thunderbird-3.1/components/librdf.so -0x00007f909a86a600 0x00007f909a878df8 Yes /usr/lib64/thunderbird-3.1/components/libnsappshell.so -0x00007f909a600930 0x00007f909a63e748 Yes /usr/lib64/thunderbird-3.1/components/libdocshell.so -0x00007f909a3e1970 0x00007f909a3e6f38 Yes /usr/lib64/thunderbird-3.1/components/libmozgnome.so -0x000000313aa033f0 0x000000313aa06538 Yes /usr/lib64/libnotify.so.1 -0x00007f909a1d3de0 0x00007f909a1daab8 Yes /usr/lib64/gnome-vfs-2.0/modules/libfile.so -0x0000003858801350 0x0000003858803448 Yes /lib64/libattr.so.1 -0x000000385a801d30 0x000000385a805c08 Yes /lib64/libacl.so.1 -0x00007f9099fc9770 0x00007f9099fcd038 Yes /usr/lib64/libfam.so.0 -0x00007f9099aaf560 0x00007f9099ae0c88 Yes /usr/lib64/thunderbird-3.1/components/libhtmlpars.so -0x00007f90997d5130 0x00007f90997e6588 Yes /usr/lib64/thunderbird-3.1/components/libuconv.so -0x00007f90995abe20 0x00007f90995b8d88 Yes /usr/lib64/thunderbird-3.1/components/libstoragecomps.so -0x00007f9099333780 0x00007f90993860f8 Yes /usr/lib64/thunderbird-3.1/libsqlite3.so -0x00007f9095061630 0x00007f90955612c8 Yes /usr/lib64/thunderbird-3.1/components/libgklayout.so -0x00007f9094b821e0 0x00007f9094ba2da8 Yes /usr/lib64/thunderbird-3.1/components/libimglib2.so -0x00007f90949584a0 0x00007f9094972008 Yes /usr/lib64/libjpeg.so.62 -0x00007f9094748910 0x00007f909474f0f8 Yes /usr/lib64/thunderbird-3.1/components/libgkgfxthebes.so -0x00007f909453ef30 0x00007f90945407e8 Yes /usr/lib64/thunderbird-3.1/components/libcommandlines.so -0x00007f90940ece30 0x00007f90940f7838 Yes /usr/lib64/thunderbird-3.1/components/libwebbrwsr.so -0x00007f9093ee45c0 0x00007f9093ee5558 Yes /usr/lib64/thunderbird-3.1/components/libpermissions.so -0x00007f9093cdbbc0 0x00007f9093cdf968 Yes /usr/lib64/thunderbird-3.1/components/libcookie.so -0x00007f9093ad0ae0 0x00007f9093ad5598 Yes /usr/lib64/thunderbird-3.1/components/libpipboot.so -0x00007f90964fcfb0 0x00007f90964fe438 Yes /usr/lib64/thunderbird-3.1/components/libremoteservice.so -0x00007f90962f2ca0 0x00007f90962f6258 Yes /usr/lib64/thunderbird-3.1/components/libchardet.so -0x000000313be00be0 0x000000313be01c08 Yes /usr/lib64/libXss.so.1 -0x00007f9095df7730 0x00007f9095dfc2d8 Yes /usr/lib64/thunderbird-3.1/components/libintlapp.so -0x00007f9095be9290 0x00007f9095bef168 Yes /usr/lib64/thunderbird-3.1/components/libimgicon.so -0x00007f908d204aa0 0x00007f908d21dbb8 Yes /usr/lib64/gio/modules/libgvfsdbus.so -0x00007f908cfed190 0x00007f908cff7418 Yes /usr/lib64/libgvfscommon.so.0 -0x00007f908cdd8770 0x00007f908cde02b8 Yes /lib64/libudev.so.0 -0x00007f908c4fa070 0x00007f908c4fd1a8 Yes /usr/lib64/thunderbird-3.1/components/libtxmgr.so -0x00007f908bfe57f0 0x00007f908bff3978 Yes (*) /usr/lib64/mozilla/extensions/{3550f703-e582-4d05-9a08-453d09bdfdc6}/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/libcalbasecomps.so -0x00000038662194f0 0x0000003866242668 Yes /usr/lib64/libical.so.0 -0x00007f908bbf7340 0x00007f908bbfbc58 Yes /usr/lib64/thunderbird-3.1/components/libtkautocomplete.so -0x00007f908b7fd0f0 0x00007f908b7fea98 Yes /usr/lib64/gtk-2.0/2.10.0/immodules/im-ibus.so -0x000000384f80f2e0 0x000000384f82b6f8 Yes /usr/lib64/libibus.so.2 -0x00007f908b2f52a0 0x00007f908b2fa618 Yes /usr/lib64/thunderbird-3.1/components/libsatchel.so -0x00007f908b0bf7d0 0x00007f908b0da458 Yes /usr/lib64/thunderbird-3.1/components/libmork.so -0x00007f908aa8f9d0 0x00007f908aad2ac8 Yes /usr/lib64/thunderbird-3.1/components/libpipnss.so -0x000000385ac07c40 0x000000385ac29948 Yes /usr/lib64/libssl3.so -0x0000003859c09880 0x0000003859c216a8 Yes /usr/lib64/libsmime3.so -0x000000385a0184d0 0x000000385a0fc6b8 Yes /usr/lib64/libnss3.so -0x000000385a4083a0 0x000000385a4135c8 Yes /usr/lib64/libnssutil3.so -0x00007f908a83aa10 0x00007f908a863c68 Yes /usr/lib64/libsoftokn3.so -0x000000385cc08b20 0x000000385cc758c8 Yes /usr/lib64/libsqlite3.so.0 -0x00007f908a612180 0x00007f908a62e858 Yes /usr/lib64/libnssdbm3.so -0x00000038568030c0 0x000000385683d848 Yes /usr/lib64/libfreebl3.so -0x00007f908a3a4d70 0x00007f908a3b3f48 Yes /usr/lib64/libnssckbi.so -0x00007f908a1830b0 0x00007f908a186438 Yes /usr/lib64/thunderbird-3.1/components/libmsgsmime.so -0x00007f9089cdd0c0 0x00007f9089cf42c8 Yes /usr/lib64/thunderbird-3.1/components/libmailcomps.so -0x00007f9089ad6920 0x00007f9089ad8008 Yes /usr/lib64/thunderbird-3.1/components/libunixproxy.so -0x00007f9088ed2af0 0x00007f9088ed3768 Yes /lib64/libnss_mdns4_minimal.so.2 -0x00007f9088ccd000 0x00007f9088cd0348 Yes /lib64/libnss_dns.so.2 -0x00007f90882f86b0 0x00007f90882fd318 Yes /usr/lib64/libesd.so.0 -0x000000399e2062f0 0x000000399e21ceb8 Yes /usr/lib64/libaudiofile.so.0 -0x00007f9087bfc050 0x00007f9087bfef88 Yes /usr/lib64/libcanberra-0.24/libcanberra-pulse.so -0x00007f90879c2e50 0x00007f90879ea398 Yes /usr/lib64/libpulse.so.0 -0x00007f9087778460 0x00007f90877a3758 Yes /usr/lib64/libpulsecommon-0.9.21.so -0x00007f90875643b0 0x00007f90875673b8 Yes /usr/lib64/libXtst.so.6 -0x000000385c402ee0 0x000000385c406a88 Yes /lib64/libwrap.so.0 -0x00007f9087304540 0x00007f9087345ec8 Yes /usr/lib64/libsndfile.so.1 -0x00007f90870fb1c0 0x00007f90870fd7e8 Yes /usr/lib64/libasyncns.so.0 -0x00007f9086ee5070 0x00007f9086ef2a08 Yes /lib64/libnsl.so.1 -0x000000385d00be70 0x000000385d030e08 Yes /usr/lib64/libFLAC.so.8 -0x000000385d4139c0 0x000000385d415eb8 Yes /usr/lib64/libvorbisenc.so.2 -0x00007f9081fd7960 0x00007f9081ff0fd8 Yes /usr/lib64/thunderbird-3.1/components/libgkplugin.so -0x00007f907f7ec480 0x00007f907f7f7758 Yes /usr/lib64/thunderbird-3.1/components/libcomposer.so -0x00007f907d3efc00 0x00007f907d3fc128 Yes /usr/lib64/gio/modules/libgioremote-volume-monitor.so -(*): Shared library is missing debugging information. -$1 = 0x0 -$2 = 0x0 -rax 0x0 0 -rbx 0xb 11 -rcx 0xffffffffffffffff -1 -rdx 0xb 11 -rsi 0x4deb 19947 -rdi 0x4deb 19947 -rbp 0x7fff32dedc20 0x7fff32dedc20 -rsp 0x7fff32dedc08 0x7fff32dedc08 -r8 0x0 0 -r9 0x1 1 -r10 0x8 8 -r11 0x206 518 -r12 0xffffffff 4294967295 -r13 0x7f907d912a60 140258558683744 -r14 0x7f9097882000 140258994298880 -r15 0x7fff32dee2f0 140734046855920 -rip 0x3848c0f30b 0x3848c0f30b -eflags 0x206 [ PF IF ] -cs 0x33 51 -ss 0x2b 43 -ds 0x0 0 -es 0x0 0 -fs 0x0 0 -gs 0x0 0 -Dump of assembler code for function raise: - 0x0000003848c0f2e0 <+0>: mov %fs:0x2d4,%ecx - 0x0000003848c0f2e8 <+8>: mov %fs:0x2d0,%esi - 0x0000003848c0f2f0 <+16>: mov %ecx,%eax - 0x0000003848c0f2f2 <+18>: movslq %edi,%rdx - 0x0000003848c0f2f5 <+21>: movslq %esi,%rsi - 0x0000003848c0f2f8 <+24>: sar $0x1f,%eax - 0x0000003848c0f2fb <+27>: mov %eax,%edi - 0x0000003848c0f2fd <+29>: xor %ecx,%edi - 0x0000003848c0f2ff <+31>: sub %eax,%edi - 0x0000003848c0f301 <+33>: mov $0xea,%eax - 0x0000003848c0f306 <+38>: movslq %edi,%rdi - 0x0000003848c0f309 <+41>: syscall -=> 0x0000003848c0f30b <+43>: cmp $0xfffffffffffff000,%rax - 0x0000003848c0f311 <+49>: ja 0x3848c0f315 - 0x0000003848c0f313 <+51>: repz retq - 0x0000003848c0f315 <+53>: mov 0x207c64(%rip),%rdx # 0x3848e16f80 - 0x0000003848c0f31c <+60>: neg %eax - 0x0000003848c0f31e <+62>: mov %eax,%fs:(%rdx) - 0x0000003848c0f321 <+65>: or $0xffffffffffffffff,%eax - 0x0000003848c0f324 <+68>: retq -End of assembler dump. -Debuginfo absent: 412783fb5e761fdab4f06a8d0a5381e173c4db31 diff --git a/tests/btparser/frame.at b/tests/btparser/frame.at deleted file mode 100644 index 92bcc652..00000000 --- a/tests/btparser/frame.at +++ /dev/null @@ -1,615 +0,0 @@ -# Checking the btparser. -*- Autotest -*- - -AT_BANNER([Frames]) - -## ------------- ## -## btp_frame_dup ## -## ------------- ## - -AT_TESTFUN([btp_frame_dup], -[[ -#include -#include -#include - -int main(void) -{ - struct btp_frame *frame1 = btp_frame_new();; - frame1->function_name = btp_strdup("test1"); - frame1->function_type = btp_strdup("type1"); - frame1->number = 10; - frame1->source_file = btp_strdup("file1"); - frame1->source_line = 11; - frame1->address = 12; - - struct btp_frame *frame0 = btp_frame_new();; - frame0->function_name = btp_strdup("test0"); - frame0->function_type = btp_strdup("type0"); - frame0->number = 13; - frame0->source_file = btp_strdup("file0"); - frame0->source_line = 14; - frame0->address = 15; - frame0->next = frame1; - - /* Test the duplication without siblings. */ - struct btp_frame *frame = btp_frame_dup(frame0, false); - assert(NULL == frame->next); - assert(frame->function_name != frame0->function_name); - assert(frame->function_type != frame0->function_type); - assert(frame->source_file != frame0->source_file); - assert(0 == btp_frame_cmp(frame, frame0, true)); - btp_frame_free(frame); - - /* Test the duplication with the siblings. */ - frame = btp_frame_dup(frame0, true); - assert(frame->function_name != frame0->function_name); - assert(frame->function_type != frame0->function_type); - assert(frame->source_file != frame0->source_file); - assert(0 == btp_frame_cmp(frame, frame0, true)); - assert(frame->next != frame1); - assert(0 == btp_frame_cmp(frame->next, frame1, true)); - btp_frame_free(frame->next); - btp_frame_free(frame); - - btp_frame_free(frame1); - btp_frame_free(frame0); - return 0; -} -]]) - -## --------------------------- ## -## btp_frame_parse_frame_start ## -## --------------------------- ## - -AT_TESTFUN([btp_frame_parse_frame_start], -[[ -#include -#include - -/** - * @param input - * The input text stream. - * @param parsed_char_count - * The expected number of characters parsed (taken) from input. - * @param expected_frame_number - * The expected parsed frame number. - */ -void check(char *input, - int parsed_char_count, - unsigned expected_frame_number) -{ - int number; - char *old_input = input; - assert(parsed_char_count == btp_frame_parse_frame_start(&input, &number)); - if (0 < parsed_char_count) - { - assert(number == expected_frame_number); - assert(*input == '\0'); - } - else - { - /* Check that the pointer is not moved. */ - assert(old_input == input); - } -} - -int main(void) -{ - check("#10 " , 4, 10); - check("#0 " , 4, 0); - check("#99999 ", 8, 99999); - check("ab " , 0, 0); - check("#ab " , 0, 0); - check("#-9999 " , 0, 9999); - return 0; -} -]]) - -## --------------------------- ## -## btp_frame_parseadd_operator ## -## --------------------------- ## - -AT_TESTFUN([btp_frame_parseadd_operator], -[[ -#include -#include "strbuf.h" -#include -#include - -void check(char *input, int parsed_length) -{ - printf("Testing '%s' -> %d\n", input, parsed_length); - char *old_input = input; - struct strbuf *strbuf = strbuf_new(); - assert(parsed_length == btp_frame_parseadd_operator(&input, strbuf)); - printf(" input = '%s', old_input = '%s'\n", input, old_input); - - /* Check that the input pointer was updated properly. */ - assert(*input == old_input[parsed_length]); - - /* Check that the strbuf has been modified accordingly to what was parsed. */ - assert(0 == strncmp(strbuf->buf, old_input, parsed_length)); - assert(strbuf->len == parsed_length); - - strbuf_free(strbuf); -} - -int main(void) -{ - check("operator>", strlen("operator>")); - check("operator->", strlen("operator->")); - check("operator new", strlen("operator new")); - check("operator new[]", strlen("operator new[]")); - check("operator delete", strlen("operator delete")); - check("operator del", 0); - check("operator delete[] (test)", strlen("operator delete[]")); - /* Red Hat Bugzilla bug #542445 */ - check("cairo_add_operator (test)", 0); - return 0; -} -]]) - -## ----------------------------- ## -## btp_frame_parse_function_name ## -## ----------------------------- ## - -AT_TESTFUN([btp_frame_parse_function_name], -[[ -#include -#include -#include -#include -#include -#include - -void check(bool success, char *input) -{ - /* Function name must be ended with a space. */ - char *input_with_space = btp_malloc(strlen(input) + 2); - strcpy(input_with_space, input); - input_with_space[strlen(input)] = ' '; - input_with_space[strlen(input) + 1] = '\0'; - - char *function_name = NULL, *function_type = NULL; - char *old_input_with_space = input_with_space; - printf("Parsing '%s'\n", input); - struct btp_location location; - btp_location_init(&location); - assert(success == btp_frame_parse_function_name(&input_with_space, - &function_name, - &function_type, - &location)); - - if (success) - { - assert(function_name); - printf("Function name '%s'\n", function_name); - assert(strcmp(function_name, input) == 0); - assert(function_type == NULL); - free(function_name); - assert(*input_with_space == ' '); - } - else - { - /* Check that the pointer is not moved. */ - assert(old_input_with_space == input_with_space); - } - - free(old_input_with_space); -} - -int main(void) -{ - check(true, "??"); - check(true, "IA__g_bookmark_file_to_file"); - check(true, "pthread_cond_timedwait@@GLIBC_2.3.2"); - check(true, "_pixman_walk_composite_region"); - check(true, "CairoOutputDev::tilingPatternFill"); - check(true, "sdr::(anonymous namespace)::ViewContact::~ViewContact"); - check(true, "operator=="); - return 0; -} -]]) - -## ---------------------------- ## -## btp_frame_skip_function_args ## -## ---------------------------- ## - -AT_TESTFUN([btp_frame_skip_function_args], -[[ -#include -#include -#include - -void check(bool success, char *input) -{ - char *old_input = input; - struct btp_location location; - btp_location_init(&location); - assert(success == btp_frame_skip_function_args(&input, &location)); - if (success) - { - assert(*input == '\0'); - } - else - { - /* Check that the pointer is not moved. */ - assert(old_input == input); - } -} - -int main(void) -{ - /* minimal */ - check(true, "()"); - /* newline */ - check(true, "(\n" - "page=0x7f186003e280, \n" - "cairo=0x7f18600efd10, printing=0)"); - /* value optimized out */ - check(true, "(this=0x7f1860023400, DPI=)"); - /* string */ - check(true, "(filename=0x18971b0 \"/home/jfclere/.recently-used.xbel\")"); - /* TODO: parentesis balance */ - return 0; -} -]]) - -## ----------------------------- ## -## btp_frame_parse_function_call ## -## ----------------------------- ## - -AT_TESTFUN([btp_frame_parse_function_call], -[[ -#include -#include -#include -#include -void check(bool success, - char *input, - char *expected_function_name, - char *expected_function_type) -{ - char *old_input = input; - char *function_name, *function_type; - struct btp_location location; - btp_location_init(&location); - assert(success == btp_frame_parse_function_call(&input, - &function_name, - &function_type, - &location)); - if (success) - { - printf("Expected: '%s', got '%s'\n", expected_function_name, function_name); - assert(0 == strcmp(expected_function_name, function_name)); - assert((!expected_function_type && !function_type) || - 0 == strcmp(expected_function_type, function_type)); - assert(*input == '\0'); - free(function_name); - } - else - { - /* Check that the pointer is not moved. */ - assert(old_input == input); - } -} - -int main(void) -{ - /* minimal */ - check(true, "?? ()", "??", NULL); - check(true, "fsync ()", "fsync", NULL); - /* newlines */ - check(true, - "write_to_temp_file (\n" - "filename=0x18971b0 \"/home/jfclere/.recently-used.xbel\", \n" - "contents=, length=29917, error=0x7fff3cbe4110)", - "write_to_temp_file", - NULL); - /* C++ */ - check(true, - "osgText::Font::GlyphTexture::apply(osg::State&) const ()", - "osgText::Font::GlyphTexture::apply(osg::State&) const", - NULL); - check(true, - "osgUtil::RenderStage::drawInner(osg::RenderInfo&, osgUtil::RenderLeaf*&, bool&) ()", - "osgUtil::RenderStage::drawInner(osg::RenderInfo&, osgUtil::RenderLeaf*&, bool&)", - NULL); - check(true, - "nsRegion::RgnRect::operator new ()", - "nsRegion::RgnRect::operator new", - NULL); - check(true, - "sigc::internal::slot_call0, void>::call_it (this=0x6c)", - "sigc::internal::slot_call0, void>::call_it", - NULL); - check(true, - "sigc::internal::slot_call0, void>::call_it(sigc::internal::slot_rep*) ()", - "sigc::internal::slot_call0, void>::call_it(sigc::internal::slot_rep*)", - NULL); - /* C++ operator< and templates */ - check(true, - "operator< , std::allocator > (__s1=)", - "operator< , std::allocator >", - NULL); - /* C++ plain operator-> */ - check(true, "operator-> ()", "operator->", NULL); - /* Not an operator, but includes the keyword 'operator' (Red Hat Bugzilla bug #542445) */ - check(true, - "cairo_set_operator (cr=0x0, op=CAIRO_OPERATOR_OVER)", - "cairo_set_operator", - NULL); - /* type included */ - #define TYPE "void" - #define FUNCTION "boost::throw_exception<" \ - "boost::filesystem::basic_filesystem_error<" \ - "boost::filesystem::basic_path<" \ - "std::basic_string<" \ - "char, std::char_traits, " \ - "std::allocator >, " \ - "boost::filesystem::path_traits> > >" \ - "(boost::filesystem::basic_filesystem_error<" \ - "boost::filesystem::basic_path<" \ - "std::basic_string, " \ - "std::allocator >, " \ - "boost::filesystem::path_traits> > const&)" - #define ARGS "()" - #define FUNCALL TYPE " " FUNCTION " " ARGS - check(true, FUNCALL, FUNCTION, TYPE); - return 0; -} -]]) - -## ----------------------------------- ## -## btp_frame_parse_address_in_function ## -## ----------------------------------- ## - -AT_TESTFUN([btp_frame_parse_address_in_function], -[[ -#include -#include -#include -#include -void check(bool success, - char *input, - uint64_t expected_address, - char *expected_function) -{ - char *old_input = input; - char *function; - char *type; - uint64_t address; - struct btp_location location; - btp_location_init(&location); - assert(success == btp_frame_parse_address_in_function(&input, - &address, - &function, - &type, - &location)); - if (success) - { - assert(strcmp(function, expected_function) == 0); - assert(address == expected_address); - assert(*input == '\0'); - free(function); - free(type); - } - else - { - /* Check that the pointer is not moved. */ - assert(old_input == input); - } -} - -int main(void) -{ - /* minimal */ - check(true, "0x00ad0a91 in raise (sig=6)", 0xad0a91, "raise"); - /* longnum */ - check(true, "0xf00000322221730e in IA__g_bookmark_file_to_file (\n" - "filename=0x18971b0 \"/home/jfclere/.recently-used.xbel\", \n" - "error=0x7fff3cbe4160)", 0xf00000322221730eULL, - "IA__g_bookmark_file_to_file"); - return 0; -} -]]) - -## ----------------------------- ## -## btp_frame_parse_file_location ## -## ----------------------------- ## - -AT_TESTFUN([btp_frame_parse_file_location], -[[ -#include -#include -#include -#include -void check(bool success, - char *input, - char *expected_file, - unsigned expected_line) -{ - char *old_input = input; - char *file; - unsigned line; - struct btp_location location; - btp_location_init(&location); - assert(success == btp_frame_parse_file_location(&input, - &file, - &line, - &location)); - if (success) - { - assert(strcmp(file, expected_file) == 0); - assert(line == expected_line); - assert(*input == '\0'); - free(file); - } - else - { - /* Check that the pointer is not moved. */ - assert(old_input == input); - } -} - -int main(void) -{ - /* Test with a newline and without a line number. */ - check(true, "\n at gtkrecentmanager.c", "gtkrecentmanager.c", -1); - - /* Test with a newline and with a line number. */ - check(true, "\n at gtkrecentmanager.c:1377", "gtkrecentmanager.c", 1377); - - /* Test without a newline and a file name with a dash and an upper letter. */ - check(true, - " at ../sysdeps/unix/syscall-template.S:82", - "../sysdeps/unix/syscall-template.S", - 82); - - /* A file name starting with an underscore: Red Hat Bugzilla bug #530678. */ - check(true, - " at _polkitauthenticationagent.c:885", - "_polkitauthenticationagent.c", - 885); - - return 0; -} -]]) - -## ---------------------- ## -## btp_frame_parse_header ## -## ---------------------- ## - -AT_TESTFUN([btp_frame_parse_header], -[[ -#include -#include -#include -#include -#include - -void check(char *input, - struct btp_frame *expected_frame) -{ - printf("=================================================\n" - "Testing %s\n", - input); - - char *old_input = input; - struct btp_location location; - btp_location_init(&location); - struct btp_frame *frame = btp_frame_parse_header(&input, &location); - if (frame) - { - assert(*input == '\0'); - assert(btp_frame_cmp(frame, expected_frame, true) == 0); - btp_frame_free(frame); - } - else - { - printf(" - parsing failed: %d:%d %s\n", location.line, location.column, location.message); - - /* Check that the pointer is not moved. */ - assert(old_input == input); - assert(!expected_frame); - } -} - -int main(void) -{ - /* basic */ - struct btp_frame frame; - btp_frame_init(&frame); - frame.function_name = "fsync"; - frame.number = 1; - frame.source_file = "../sysdeps/unix/syscall-template.S"; - frame.source_line = 82; - frame.address = 0x322160e7fdULL; - check("#1 0x000000322160e7fd in fsync () at ../sysdeps/unix/syscall-template.S:82", &frame); - - /* C++ */ - btp_frame_init(&frame); - frame.function_name = "nsRegion::RgnRect::operator new"; - frame.number = 4; - frame.source_file = "nsRegion.cpp"; - frame.source_line = 214; - frame.address = 0x3f96d71056ULL; - check("#4 0x0000003f96d71056 in nsRegion::RgnRect::operator new ()\n" - " at nsRegion.cpp:214", &frame); - - /* Templates and no filename. */ - btp_frame_init(&frame); - frame.function_name = "sigc::internal::slot_call0, void>::call_it(sigc::internal::slot_rep*)"; - frame.number = 15; - frame.address = 0x08201bdfULL; - check("#15 0x08201bdf in sigc::internal::slot_call0," - " void>::call_it(sigc::internal::slot_rep*) ()", &frame); - - /* No address, just the function call. Red Hat Bugzilla bug #530678 */ - btp_frame_init(&frame); - frame.function_name = "handle_message"; - frame.number = 30; - frame.source_file = "_polkitauthenticationagent.c"; - frame.source_line = 885; - check("#30 handle_message (message=,\n" - "interface=) at _polkitauthenticationagent.c:885", &frame); - - return 0; -} -]]) - -## --------------- ## -## btp_frame_parse ## -## --------------- ## - -AT_TESTFUN([btp_frame_parse], -[[ -#include -#include -#include -#include -#include -void check(char *input, - struct btp_frame *expected_frame, - char *expected_input) -{ - char *old_input = input; - struct btp_location location; - btp_location_init(&location); - struct btp_frame *frame = btp_frame_parse(&input, &location); - assert(input == expected_input); - if (frame) - { - assert(btp_frame_cmp(frame, expected_frame, true) == 0); - btp_frame_free(frame); - } - else - { - /* Check that the pointer is not moved. */ - assert(old_input == input); - assert(!expected_frame); - } -} - -int main(void) -{ - /* basic */ - struct btp_frame frame; - btp_frame_init(&frame); - frame.function_name = "fsync"; - frame.number = 1; - frame.source_file = "../sysdeps/unix/syscall-template.S"; - frame.source_line = 82; - frame.address = 0x322160e7fdULL; - char *c = "#1 0x000000322160e7fd in fsync () at ../sysdeps/unix/syscall-template.S:82\n" - "No locals."; - check(c, &frame, c + strlen(c)); - c = "#1 0x000000322160e7fd in fsync () at ../sysdeps/unix/syscall-template.S:82\n" - "No locals.\n" - "#2 0x003f4f3f in IA__g_main_loop_run (loop=0x90e2c50) at gmain.c:2799\n" - " self = 0x8b80038\n" - " __PRETTY_FUNCTION__ = \"IA__g_main_loop_run\"\n"; - check(c, &frame, strstr(c, "#2")); - return 0; -} -]]) diff --git a/tests/btparser/thread.at b/tests/btparser/thread.at deleted file mode 100644 index 5a3976e3..00000000 --- a/tests/btparser/thread.at +++ /dev/null @@ -1,396 +0,0 @@ -# Checking the btparser. -*- Autotest -*- - -AT_BANNER([Threads]) - -## ----------------------- ## -## btp_thread_remove_frame ## -## ----------------------- ## -AT_TESTFUN([btp_thread_remove_frame], -[[ -#include -#include -#include -#include -#include -#include - -int main(void) -{ - struct btp_frame *frame2 = btp_frame_new(); - frame2->function_name = btp_strdup("write"); - frame2->number = 2; - frame2->source_file = btp_strdup("gfileutils.c"); - frame2->source_line = 120; - frame2->address = 0x322160e7fdULL; - - struct btp_frame *frame1 = btp_frame_new(); - frame1->function_name = btp_strdup("write_to_temp_file"); - frame1->number = 1; - frame1->source_file = btp_strdup("gfileutils.c"); - frame1->source_line = 980; - frame1->address = 0x322160e7fdULL; - frame1->next = frame2; - - struct btp_frame *frame0 = btp_frame_new(); - frame0->function_name = btp_strdup("fsync"); - frame0->number = 0; - frame0->source_file = btp_strdup("../sysdeps/unix/syscall-template.S"); - frame0->source_line = 82; - frame0->address = 0x322160e7fdULL; - frame0->next = frame1; - - struct btp_thread thread; - btp_thread_init(&thread); - thread.number = 3; - thread.frames = frame0; - - /* Remove the frame from the top of the stack. */ - assert(btp_thread_remove_frame(&thread, frame0)); - assert(frame1 == thread.frames); - assert(frame2 == thread.frames->next); - - /* Remove the frame from the bottom of the stack. */ - assert(btp_thread_remove_frame(&thread, frame2)); - assert(frame1 == thread.frames); - assert(NULL == thread.frames->next); - - /* Remove the last remaining frame. */ - assert(btp_thread_remove_frame(&thread, frame1)); - assert(NULL == thread.frames); - - /* Remove nonexistant frame -> should return false. */ - assert(!btp_thread_remove_frame(&thread, frame0)); - assert(NULL == thread.frames); - - return 0; -} -]]) - -## ------------------------------ ## -## btp_thread_remove_frames_above ## -## ------------------------------ ## -AT_TESTFUN([btp_thread_remove_frames_above], -[[ -#include -#include -#include -#include -#include -#include - -int main(void) -{ - struct btp_frame *frame2 = btp_frame_new(); - frame2->function_name = btp_strdup("write"); - frame2->number = 2; - frame2->source_file = btp_strdup("gfileutils.c"); - frame2->source_line = 120; - frame2->address = 0x322160e7fdULL; - - struct btp_frame *frame1 = btp_frame_new(); - frame1->function_name = btp_strdup("write_to_temp_file"); - frame1->number = 1; - frame1->source_file = btp_strdup("gfileutils.c"); - frame1->source_line = 980; - frame1->address = 0x322160e7fdULL; - frame1->next = frame2; - - struct btp_frame *frame0 = btp_frame_new(); - frame0->function_name = btp_strdup("fsync"); - frame0->number = 0; - frame0->source_file = btp_strdup("../sysdeps/unix/syscall-template.S"); - frame0->source_line = 82; - frame0->address = 0x322160e7fdULL; - frame0->next = frame1; - - struct btp_thread thread; - btp_thread_init(&thread); - thread.number = 3; - thread.frames = frame0; - - /* Remove the frames above the top of the stack. */ - assert(btp_thread_remove_frames_above(&thread, frame0)); - assert(frame0 == thread.frames); - assert(frame1 == thread.frames->next); - - /* Remove the frames above the second frame from the top of the stack. */ - assert(btp_thread_remove_frames_above(&thread, frame1)); - assert(frame1 == thread.frames); - assert(frame2 == thread.frames->next); - - /* Remove the frames above the bottom of the stack. */ - assert(btp_thread_remove_frames_above(&thread, frame2)); - assert(frame2 == thread.frames); - assert(NULL == thread.frames->next); - - /* Remove frames above a nonexistant frame -> should return false. */ - assert(!btp_thread_remove_frames_above(&thread, frame0)); - assert(frame2 == thread.frames); - - return 0; -} -]]) - -## -------------------------------- ## -## btp_thread_remove_frames_below_n ## -## -------------------------------- ## -AT_TESTFUN([btp_thread_remove_frames_below_n], -[[ -#include -#include -#include -#include -#include -#include - -int main(void) -{ - struct btp_frame *frame2 = btp_frame_new(); - frame2->function_name = btp_strdup("write"); - frame2->number = 2; - frame2->source_file = btp_strdup("gfileutils.c"); - frame2->source_line = 120; - frame2->address = 0x322160e7fdULL; - - struct btp_frame *frame1 = btp_frame_new(); - frame1->function_name = btp_strdup("write_to_temp_file"); - frame1->number = 1; - frame1->source_file = btp_strdup("gfileutils.c"); - frame1->source_line = 980; - frame1->address = 0x322160e7fdULL; - frame1->next = frame2; - - struct btp_frame *frame0 = btp_frame_new(); - frame0->function_name = btp_strdup("fsync"); - frame0->number = 0; - frame0->source_file = btp_strdup("../sysdeps/unix/syscall-template.S"); - frame0->source_line = 82; - frame0->address = 0x322160e7fdULL; - frame0->next = frame1; - - struct btp_thread thread; - btp_thread_init(&thread); - thread.number = 3; - thread.frames = frame0; - - /* Remove no frame as n is too large. */ - btp_thread_remove_frames_below_n(&thread, 5); - assert(frame0 == thread.frames); - assert(frame1 == thread.frames->next); - assert(frame2 == thread.frames->next->next); - assert(NULL == thread.frames->next->next->next); - - /* Remove the frames below 1. */ - btp_thread_remove_frames_below_n(&thread, 1); - assert(frame0 == thread.frames); - assert(NULL == thread.frames->next); - - /* Remove the frames below 0. */ - btp_thread_remove_frames_below_n(&thread, 0); - assert(NULL == thread.frames); - - /* Try to remove frames when no frame is present. */ - btp_thread_remove_frames_below_n(&thread, 4); - assert(NULL == thread.frames); - - return 0; -} -]]) - -## ---------------- ## -## btp_thread_parse ## -## ---------------- ## - -AT_TESTFUN([btp_thread_parse], -[[ -#include -#include -#include -#include -#include -#include - -void check(char *input, - struct btp_thread *expected_thread) -{ - printf("===============================================\n" - "Testing input: %s", - input); - - char *old_input = input; - struct btp_location location; - btp_location_init(&location); - struct btp_thread *thread = btp_thread_parse(&input, &location); - assert(!expected_thread || thread); - if (thread) - { - assert(*input == '\0'); - assert(btp_thread_cmp(thread, expected_thread) == 0); - btp_thread_free(thread); - } - else - { - /* Check that the pointer is not moved. */ - assert(old_input == input); - assert(!expected_thread); - } -} - -int main(void) -{ - /* Basic test. */ - struct btp_frame frame0, frame1; - btp_frame_init(&frame0); - frame0.function_name = "fsync"; - frame0.number = 0; - frame0.source_file = "../sysdeps/unix/syscall-template.S"; - frame0.source_line = 82; - frame0.address = 0x322160e7fdULL; - frame0.next = &frame1; - - btp_frame_init(&frame1); - frame1.function_name = "write_to_temp_file"; - frame1.number = 1; - frame1.source_file = "gfileutils.c"; - frame1.source_line = 980; - frame1.address = 0x322160e7fdULL; - - struct btp_thread thread; - btp_thread_init(&thread); - thread.number = 3; - thread.frames = &frame0; - - check("Thread 3 (Thread 11917):\n" - "#0 0x000000322160e7fd in fsync () at ../sysdeps/unix/syscall-template.S:82\n" - "No locals.\n" - "#1 0x000000322222987a in write_to_temp_file (\n" - " filename=0x18971b0 \"/home/jfclere/.recently-used.xbel\", \n" - " contents=, length=29917, error=0x7fff3cbe4110)\n" - " at gfileutils.c:980\n" - " statbuf = {st_dev = 64768, st_ino = 13709, st_nlink = 1, \n" - " st_mode = 33152, st_uid = 500, st_gid = 500, __pad0 = 0, \n" - " st_rdev = 0, st_size = 29917, st_blksize = 4096, st_blocks = 64, \n" - " st_atim = {tv_sec = 1273231242, tv_nsec = 73521863}, st_mtim = {\n" - " tv_sec = 1273231242, tv_nsec = 82521015}, st_ctim = {\n" - " tv_sec = 1273231242, tv_nsec = 190522021}, __unused = {0, 0, 0}}\n", - &thread); - - /* Another format of the header. */ - check("Thread 3 (LWP 635):\n" - "#0 0x000000322160e7fd in fsync () at ../sysdeps/unix/syscall-template.S:82\n" - "No locals.\n" - "#1 0x000000322222987a in write_to_temp_file () at gfileutils.c:980\n" - "No locals.\n", - &thread); - - return 0; -} -]]) - -## -------------------------- ## -## btp_thread_parse-locations ## -## -------------------------- ## - -AT_TESTFUN([btp_thread_parse-locations], -[[ -#include -#include -#include -#include -#include - -/** - * Checks that the thread parser fails on ceratin location - * (line and column), with an error message. - */ -void check(char *input, - int expected_line, - int expected_column) -{ - char *old_input = input; - struct btp_location location; - btp_location_init(&location); - assert(NULL == btp_thread_parse(&input, &location)); - - /* Check that the pointer is not moved. */ - assert(old_input == input); - - /* Check the location. */ - printf("location %d:%d '%s', expected %d:%d\n", - location.line, location.column, location.message, - expected_line, expected_column); - - assert(location.line == expected_line); - assert(location.column == expected_column); - assert(location.message); - assert(location.message[0] != '\0'); -} - -int main(void) -{ - /* Thread keyword */ - check("Thraed 3 (Thread 11917):\n", 1, 0); - - /* Spaces after the thread keyword. */ - check("Thread3 (Thread 11917):\n", 1, 6); - - /* Thread number. */ - check("Thread a (Thread 11917):\n", 1, 8); - - /* Spaces after the thread number. */ - check("Thread 8(Thread 11917):\n", 1, 8); - - /* A parenthesis. */ - check("Thread 8 (11917):\n", 1, 9); - - /* Second number. */ - check("Thread 8 (Thread ffff):\n", 1, 17); - - /* Semicolon missing. */ - check("Thread 8 (Thread 1)\n", 1, 18); - - /* Not a single frame. */ - check("Thread 3 (Thread 11917):\n\n", 2, 0); - - return 0; -} -]]) - -## ------------------- ## -## btp_thread_skip_lwp ## -## ------------------- ## - -AT_TESTFUN([btp_thread_skip_lwp], -[[ -#include -#include -#include - -void check(char *input, - int expected_count) -{ - char *old_input = input; - assert(expected_count == btp_thread_skip_lwp(&input)); - assert(input - old_input == expected_count); -} - -int main(void) -{ - check("(LWP 20)", 8); - check("(LWP 20)10", 8); - check("(LWP 245443452355454343450)", 27); - check("(LWP 245443452355454343450) ", 27); - - check("", 0); - check(" ", 0); - check(" (LWP 20)", 0); - check("(LWP", 0); - check("(LWP 20", 0); - check("(LWP )", 0); - check("(LWP 20()", 0); - check("(LWP 0x0)", 0); - check("(LWP 20(", 0); - - return 0; -} -]]) diff --git a/tests/btparser/utils.at b/tests/btparser/utils.at deleted file mode 100644 index 13644972..00000000 --- a/tests/btparser/utils.at +++ /dev/null @@ -1,442 +0,0 @@ -# Checking the btparser. -*- Autotest -*- - -AT_BANNER([Utils]) - -## ------------ ## -## btp_strcmp0 ## -## ------------ ## - -AT_TESTFUN([btp_strcmp0], -[[ -#include -#include -int main(void) -{ - assert(0 == btp_strcmp0(NULL, NULL)); - assert(0 == btp_strcmp0("abab", "abab")); - assert(0 > btp_strcmp0("aba", "abab")); - assert(0 > btp_strcmp0(NULL, "abab")); - assert(0 < btp_strcmp0("abab", NULL)); - assert(0 < btp_strcmp0("abab", "aba")); - return 0; -} -]]) - -## ------------------- ## -## btp_strchr_location ## -## ------------------- ## - -AT_TESTFUN([btp_strchr_location], -[[ -#include -#include -int main(void) -{ - /* The character is on the first line.*/ - int line, column; - char *result = btp_strchr_location("test string", 'r', &line, &column); - assert(0 == strcmp(result, "ring")); - assert(1 == line); - assert(7 == column); - - /* The character is on the third line. */ - result = btp_strchr_location("\ntest\n string", 'r', &line, &column); - assert(0 == strcmp(result, "ring")); - assert(3 == line); - assert(3 == column); - - /* The character is not found. */ - result = btp_strchr_location("\ntest\n string", 'z', &line, &column); - assert(!result); - - /* The character _is_ a newline. */ - result = btp_strchr_location("abcd\nefgh", '\n', &line, &column); - assert(0 == strcmp(result, "\nefgh")); - assert(1 == line); - assert(4 == column); - return 0; -} -]]) - -## ------------------- ## -## btp_strstr_location ## -## ------------------- ## - -AT_TESTFUN([btp_strstr_location], -[[ -#include -#include -int main(void) -{ - /* The substring is on the first line.*/ - int line, column; - char *result = btp_strstr_location("test string", "ri", &line, &column); - assert(0 == strcmp(result, "ring")); - assert(1 == line); - assert(7 == column); - - /* The substring is on the third line. */ - result = btp_strstr_location("\ntest\n string", "ri", &line, &column); - assert(0 == strcmp(result, "ring")); - assert(3 == line); - assert(3 == column); - - /* The substring is not found, but the first char is. */ - result = btp_strstr_location("\ntest\n string", "rz", &line, &column); - assert(!result); - - /* The substring is not found. */ - result = btp_strstr_location("\ntest\n string", "zr", &line, &column); - assert(!result); - - /* The substring _is_ a newline. */ - result = btp_strstr_location("abcd\nefgh", "\n", &line, &column); - assert(0 == strcmp(result, "\nefgh")); - assert(1 == line); - assert(4 == column); - return 0; -} -]]) - -## ------------------- ## -## btp_strspn_location ## -## ------------------- ## - -AT_TESTFUN([btp_strspn_location], -[[ -#include -#include -int main(void) -{ - /* No newline in the input.*/ - int line, column; - size_t count = btp_strspn_location("test string", - "tes ", - &line, - &column); - assert(7 == count); - assert(1 == line); - assert(7 == column); - - /* With some newlines. */ - count = btp_strspn_location("te\nst \nstring", - "tes \n", - &line, - &column); - assert(9 == count); - assert(3 == line); - assert(2 == column); - - return 0; -} -]]) - -## ------------- ## -## btp_skip_char ## -## ------------- ## - -AT_TESTFUN([btp_skip_char], -[[ -#include -#include -int main(void) -{ - char *input = "abc"; - assert(btp_skip_char(&input, 'a')); - assert(!btp_skip_char(&input, 'c')); - return 0; -} -]]) - -## --------------------- ## -## btp_skip_char_limited ## -## --------------------- ## - -AT_TESTFUN([btp_skip_char_limited], -[[ -#include -#include -int main(void) -{ - char *input = "abc"; - assert(btp_skip_char_limited(&input, "ab")); - assert(btp_skip_char_limited(&input, "ab")); - assert(!btp_skip_char_limited(&input, "ab")); - return 0; -} -]]) - -## ---------------------- ## -## btp_parse_char_limited ## -## ---------------------- ## - -AT_TESTFUN([btp_parse_char_limited], -[[ -#include -#include -int main(void) -{ - char *input = "abc"; - char result; - - /* First char in allowed is used. */ - assert(btp_parse_char_limited(&input, "ab", &result)); - assert(*input == 'b' && result == 'a'); - - /* No char in allowed is used. */ - assert(!btp_parse_char_limited(&input, "cd", &result)); - assert(*input == 'b' && result == 'a'); - - /* Second char in allowed is used. */ - assert(btp_parse_char_limited(&input, "ab", &result)); - assert(*input == 'c' && result == 'b'); - - /* Empty set of allowed chars. */ - assert(!btp_parse_char_limited(&input, "", &result)); - assert(*input == 'c' && result == 'b'); - - /* Char is multiple times in allowed. */ - assert(btp_parse_char_limited(&input, "cdc", &result)); - assert(*input == '\0' && result == 'c'); - - return 0; -} -]]) - -## ---------------------- ## -## btp_skip_char_sequence ## -## ---------------------- ## - -AT_TESTFUN([btp_skip_char_sequence], -[[ -#include -#include -int main(void) -{ - char *input = "aaaaabc"; - assert(5 == btp_skip_char_sequence(&input, 'a')); - assert(1 == btp_skip_char_sequence(&input, 'b')); - assert(0 == btp_skip_char_sequence(&input, 'b')); - return 0; -} -]]) - -## ------------------ ## -## btp_skip_char_span ## -## ------------------ ## - -AT_TESTFUN([btp_skip_char_span], -[[ -#include -#include -int main(void) -{ - char *input = "aabaabc"; - assert(6 == btp_skip_char_span(&input, "ba")); - assert(0 == btp_skip_char_span(&input, "b")); - assert(1 == btp_skip_char_span(&input, "bc")); - - /* Test that it can parse empty string. */ - assert(0 == btp_skip_char_span(&input, "abc")); - - return 0; -} -]]) - -## --------------------------- ## -## btp_skip_char_span_location ## -## --------------------------- ## - -AT_TESTFUN([btp_skip_char_span_location], -[[ -#include -#include -int main(void) -{ - char *input = "aab\naabc"; - int line, column; - - assert(7 == btp_skip_char_span_location(&input, "ba\n", &line, &column)); - assert(2 == line); - assert(3 == column); - - assert(0 == btp_skip_char_span_location(&input, "b", &line, &column)); - assert(1 == line); - assert(0 == column); - - assert(1 == btp_skip_char_span_location(&input, "bc", &line, &column)); - assert(1 == line); - assert(1 == column); - - /* Test that it can parse empty string. */ - assert(0 == btp_skip_char_span_location(&input, "abc", &line, &column)); - assert(1 == line); - assert(0 == column); - - return 0; -} -]]) - -## ------------------- ## -## btp_parse_char_span ## -## ------------------- ## - -AT_TESTFUN([btp_parse_char_span], -[[ -#include -#include -int main(void) -{ - char *input = "abcd"; - char *result; - assert(2 == btp_parse_char_span(&input, "ba", &result)); - assert(*input == 'c' && strcmp(result, "ab") == 0); - assert(0 == btp_parse_char_span(&input, "ba", &result)); - assert(*input == 'c' && strcmp(result, "ab") == 0); - free(result); - assert(2 == btp_parse_char_span(&input, "ecfd", &result)); - assert(*input == '\0' && strcmp(result, "cd") == 0); - free(result); - return 0; -} -]]) - -## -------------------- ## -## btp_parse_char_cspan ## -## -------------------- ## - -AT_TESTFUN([btp_parse_char_cspan], -[[ -#include -#include -int main(void) -{ - char *input = "abcd"; - char *result; - assert(btp_parse_char_cspan(&input, "c", &result)); - assert(*input == 'c' && strcmp(result, "ab") == 0); - assert(!btp_parse_char_cspan(&input, "c", &result)); - assert(*input == 'c' && strcmp(result, "ab") == 0); - free(result); - assert(btp_parse_char_cspan(&input, "e", &result)); - assert(*input == '\0' && strcmp(result, "cd") == 0); - free(result); - return 0; -} -]]) - -## --------------- ## -## btp_skip_string ## -## --------------- ## - -AT_TESTFUN([btp_skip_string], -[[ -#include -#include -int main(void) -{ - char *input = "abcd"; - assert(2 == btp_skip_string(&input, "ab")); - assert(*input == 'c'); - assert(0 == btp_skip_string(&input, "cde")); - assert(2 == btp_skip_string(&input, "cd")); - assert(0 == btp_skip_string(&input, "cd")); - return 0; -} -]]) - -## ---------------- ## -## btp_parse_string ## -## ---------------- ## - -AT_TESTFUN([btp_parse_string], -[[ -#include -#include -int main(void) -{ - char *input = "abcd"; - char *result; - assert(btp_parse_string(&input, "ab", &result)); - assert(0 == strcmp(result, "ab")); - assert(*input == 'c'); - free(result); - return 0; -} -]]) - -## ------------------------- ## -## btp_skip_unsigned_integer ## -## ------------------------- ## - -AT_TESTFUN([btp_skip_unsigned_integer], -[[ -#include -#include -int main(void) -{ - char *input = "10"; - assert(2 == btp_skip_unsigned_integer(&input)); - assert(*input == '\0'); - return 0; -} -]]) - -## ------------------------- ## -## btp_parse_unsigned_integer ## -## ------------------------- ## - -AT_TESTFUN([btp_parse_unsigned_integer], -[[ -#include -#include -int main(void) -{ - char *input = "10"; - unsigned result; - assert(2 == btp_parse_unsigned_integer(&input, &result)); - assert('\0' == *input); - assert(10 == result); - return 0; -} -]]) - -## --------------------------- ## -## btp_skip_hexadecimal_number ## -## --------------------------- ## - -AT_TESTFUN([btp_skip_hexadecimal_number], -[[ -#include -#include -int main(void) -{ - char *input = "0xffddffddff"; - assert(12 == btp_skip_hexadecimal_number(&input)); - assert(*input == '\0'); - return 0; -} -]]) - -## ---------------------------- ## -## btp_parse_hexadecimal_number ## -## ---------------------------- ## - -AT_TESTFUN([btp_parse_hexadecimal_number], -[[ -#include -#include -int main(void) -{ - char *input = "0x0fafaffff 0x2badf00dbaadf00d"; - uint64_t num; - assert(11 == btp_parse_hexadecimal_number(&input, &num)); - assert(*input == ' '); - assert(num == 0xfafaffff); - *input++; - assert(18 == btp_parse_hexadecimal_number(&input, &num)); - assert(*input == '\0'); - assert(num == 0x2badf00dbaadf00d); - return 0; -} -]]) diff --git a/tests/strbuf.at b/tests/strbuf.at index d2db8b9c..dc60f8de 100644 --- a/tests/strbuf.at +++ b/tests/strbuf.at @@ -1,4 +1,4 @@ -# Checking the btparser. -*- Autotest -*- +# -*- Autotest -*- AT_BANNER([strbuf]) diff --git a/tests/testsuite.at b/tests/testsuite.at index 0ddf595d..5137b41c 100644 --- a/tests/testsuite.at +++ b/tests/testsuite.at @@ -2,7 +2,3 @@ # See http://www.gnu.org/software/hello/manual/autoconf/Writing-Testsuites.html m4_include([strbuf.at]) -m4_include([btparser/utils.at]) -m4_include([btparser/frame.at]) -m4_include([btparser/thread.at]) -m4_include([btparser/backtrace.at]) -- cgit