summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKarel Klic <kklic@redhat.com>2011-06-09 15:52:56 +0200
committerKarel Klic <kklic@redhat.com>2011-06-09 15:52:56 +0200
commit6dcdb4a5cb3ed68eb7d72cc65e58055d1e4f7c65 (patch)
treeabe8d478de8d40b7007217b49e481e44fc7cb3fc
parent3b8f80d2ea23d3d6e433526f4e8f3b527c9b2918 (diff)
downloadabrt-6dcdb4a5cb3ed68eb7d72cc65e58055d1e4f7c65.zip
abrt-6dcdb4a5cb3ed68eb7d72cc65e58055d1e4f7c65.tar.gz
abrt-6dcdb4a5cb3ed68eb7d72cc65e58055d1e4f7c65.tar.xz
Embedded btparser removed
-rw-r--r--abrt.spec.in4
-rw-r--r--configure.ac3
-rw-r--r--src/Makefile.am2
-rw-r--r--src/btparser/Makefile.am57
-rw-r--r--src/btparser/backtrace.c445
-rw-r--r--src/btparser/backtrace.h269
-rw-r--r--src/btparser/btparser.pc.in10
-rw-r--r--src/btparser/frame.c1027
-rw-r--r--src/btparser/frame.h470
-rw-r--r--src/btparser/location.c78
-rw-r--r--src/btparser/location.h118
-rw-r--r--src/btparser/normalize.c88
-rw-r--r--src/btparser/normalize.h74
-rw-r--r--src/btparser/normalize_dbus.c44
-rw-r--r--src/btparser/normalize_gdk.c44
-rw-r--r--src/btparser/normalize_glib.c60
-rw-r--r--src/btparser/normalize_glibc.c131
-rw-r--r--src/btparser/normalize_libstdcpp.c46
-rw-r--r--src/btparser/normalize_linux.c41
-rw-r--r--src/btparser/normalize_xorg.c46
-rw-r--r--src/btparser/thread.c399
-rw-r--r--src/btparser/thread.h215
-rw-r--r--src/btparser/utils.c423
-rw-r--r--src/btparser/utils.h284
-rw-r--r--src/plugins/Makefile.am4
-rw-r--r--src/plugins/abrt-action-analyze-backtrace.c8
-rw-r--r--src/plugins/abrt-action-generate-backtrace.c6
-rw-r--r--tests/Makefile.am4
-rw-r--r--tests/btparser/Makefile.am14
-rw-r--r--tests/btparser/backtrace.at152
-rw-r--r--tests/btparser/backtraces/621492.bt2668
-rw-r--r--tests/btparser/frame.at615
-rw-r--r--tests/btparser/thread.at396
-rw-r--r--tests/btparser/utils.at442
-rw-r--r--tests/strbuf.at2
-rw-r--r--tests/testsuite.at4
36 files changed, 14 insertions, 8679 deletions
diff --git a/abrt.spec.in b/abrt.spec.in
index 143e8b6..3dc4e6e 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 0c4e42d..efd7023 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 3154d5c..2e368af 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 bdf4d90..0000000
--- 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 139b315..0000000
--- 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 <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <assert.h>
-
-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 d5de3ff..0000000
--- 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 <stdbool.h>
-
-#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=<value optimized out>,
- * mask=<value optimized out>, mask_bits=<value optimized out>)
- * 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 58cfa40..0000000
--- 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 2bfae07..0000000
--- 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 <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-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, " <signal handler called>");
-
- 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, "<signal handler called>");
- 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 966dd5d..0000000
--- 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 <stdbool.h>
-#include <stdint.h>
-
-#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=<value optimized out>, 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 ade706f..0000000
--- 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 <stdlib.h> /* 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 0d62020..0000000
--- 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 64ccada..0000000
--- 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 <string.h>
-
-void
-btp_normalize_thread(struct btp_thread *thread)
-{
- btp_normalize_dbus_thread(thread);
- btp_normalize_gdk_thread(thread);
- btp_normalize_glib_thread(thread);
- btp_normalize_glibc_thread(thread);
- btp_normalize_libstdcpp_thread(thread);
- btp_normalize_linux_thread(thread);
- btp_normalize_xorg_thread(thread);
-
- /* If the 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 35fd283..0000000
--- 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 d3d6a13..0000000
--- 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 <stdbool.h>
-
-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 e9c4ef6..0000000
--- 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 <stdbool.h>
-
-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 b5c12b6..0000000
--- 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 <stdbool.h>
-#include <string.h>
-
-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 3d0bca2..0000000
--- 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 <string.h>
-#include <stdlib.h>
-#include <assert.h>
-
-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 1f833de..0000000
--- 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 <stdbool.h>
-
-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 8df9f9c..0000000
--- 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 <stdbool.h>
-
-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 11e8d62..0000000
--- 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 <stdbool.h>
-
-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 05f154d..0000000
--- 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 <stdlib.h>
-#include <string.h>
-#include <assert.h>
-
-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 47a0211..0000000
--- 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 <stdbool.h>
-
-#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 1de329a..0000000
--- 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 <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <regex.h>
-#include <limits.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#include <fcntl.h>
-
-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 680e67e..0000000
--- 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 <stdlib.h>
-#include <stdarg.h>
-#include <stdbool.h>
-#include <stdint.h>
-
-#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 b041b06..040ade1 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 43293c0..eb75d63 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 <btparser/backtrace.h>
+#include <btparser/frame.h>
+#include <btparser/location.h>
#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 1d06871..b5e845b 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 <btparser/backtrace.h>
+#include <btparser/frame.h>
+#include <btparser/location.h>
#include "parse_options.h"
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 7903a30..5a8ad22 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 5dd52e2..0000000
--- 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 d0b1467..0000000
--- 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 <backtrace.h>
-#include <thread.h>
-#include <assert.h>
-#include <stdlib.h>
-
-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 <backtrace.h>
-#include <thread.h>
-#include <frame.h>
-#include <location.h>
-#include <utils.h>
-#include <assert.h>
-
-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 <backtrace.h>
-#include <thread.h>
-#include <location.h>
-#include <utils.h>
-#include <assert.h>
-
-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 <backtrace.h>
-#include <thread.h>
-#include <location.h>
-#include <utils.h>
-#include <assert.h>
-
-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 f1e5404..0000000
--- 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=<value optimized out>)
- 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=<value optimized out>,
- nfds=<value optimized out>, timeout=<value optimized out>)
- at ../sysdeps/unix/sysv/linux/poll.c:87
- __arg2 = 2
- _a3 = -1
- _a1 = 140258994637568
- resultvar = <value optimized out>
- __arg3 = 72197854784913407
- __arg1 = 140258994637568
- _a2 = 2
- resultvar = <value optimized out>
- oldtype = 0
- result = <value optimized out>
-#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=<value optimized out>, 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 = <value optimized out>
-#5 0x00007f90879e4a0b in thread (userdata=0x7f908807ec10)
- at pulse/thread-mainloop.c:94
- mask = {__val = {18446744067267100671,
- 18446744073709551615 <repeats 15 times>}}
-#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 = <value optimized out>
- pd = 0x7f9082edf710
- now = <value optimized out>
- 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 = <value optimized out>
- sp = <value optimized out>
- freesize = <value optimized out>
-#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 = <value optimized out>
- 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 = {<nsAutoLockBase> = {<No data fields>},
- mLock = 0x7f9097c80a80, mLocked = 1}
- pending_work = 0
- busy_socket_ssl_state = <value optimized out>
- needToSetPollableEvent = <value optimized out>
- 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 = <value optimized out>
- pd = 0x7f909932a710
- now = <value optimized out>
- 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 = <value optimized out>
- sp = <value optimized out>
- freesize = <value optimized out>
-#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 = <value optimized out>
- now = {tv_sec = 1281000337, tv_usec = 584686}
- tmo = {tv_sec = 1281000338, tv_nsec = 242686000}
- ticks = <value optimized out>
-#2 0x0000003858c23c2c in PR_WaitCondVar (cvar=0x7f90a82fbd80, timeout=658)
- at ../../../mozilla/nsprpub/pr/src/pthreads/ptsynch.c:419
- rv = <value optimized out>
- 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 = <value optimized out>
- lock = {<nsAutoLockBase> = {<No data fields>},
- 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 = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f90a8222440}, <No data fields>}
- notifyGlobalObserver = 1
- obs = {<nsCOMPtr_base> = {mRawPtr = 0x0}, <No data fields>}
- rv = 0
-#5 0x0000003139a3db88 in NS_ProcessNextEvent_P (
- thread=<value optimized out>, mayWait=<value optimized out>)
- 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 = {<nsCOMPtr_base> = {mRawPtr = 0x0}, <No data fields>}
-#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 = <value optimized out>
- pd = 0x7f909bbff710
- now = <value optimized out>
- 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 = <value optimized out>
- sp = <value optimized out>
- freesize = <value optimized out>
-#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 = <value optimized out>
- now = {tv_sec = 1281000336, tv_usec = 939599}
- tmo = {tv_sec = 1281000337, tv_nsec = 939599000}
- ticks = <value optimized out>
-#2 0x0000003858c23c2c in PR_WaitCondVar (cvar=0x7f90a0ef59c0, timeout=1000)
- at ../../../mozilla/nsprpub/pr/src/pthreads/ptsynch.c:419
- rv = <value optimized out>
- 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 = <value optimized out>
- 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 = <value optimized out>
- pd = 0x7f909ddbd710
- now = <value optimized out>
- 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 = <value optimized out>
- sp = <value optimized out>
- freesize = <value optimized out>
-#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 = <value optimized out>
- now = {tv_sec = 1281000208, tv_usec = 213698}
- tmo = {tv_sec = 1281000508, tv_nsec = 213698000}
- ticks = <value optimized out>
-#2 0x0000003858c23c2c in PR_WaitCondVar (cvar=0x7f90a0e68e80, timeout=300000)
- at ../../../mozilla/nsprpub/pr/src/pthreads/ptsynch.c:419
- rv = <value optimized out>
- 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 = <value optimized out>
- now = <value optimized out>
- lock = {<nsAutoLockBase> = {<No data fields>},
- 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 = <value optimized out>
-#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 = <value optimized out>
- pd = 0x7f9089ad4710
- now = <value optimized out>
- 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 = <value optimized out>
- sp = <value optimized out>
- freesize = <value optimized out>
-#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 = <value optimized out>
- thred = 0x7f908baa59a0
-#2 0x0000003858c23d46 in PR_Wait (mon=0x7f908ba8f570,
- timeout=<value optimized out>)
- 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 = {<nsAutoLockBase> = {<No data fields>},
- 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 = {<nsCOMPtr_base> = {mRawPtr = 0x0}, <No data fields>}
- notifyGlobalObserver = 1
- obs = {<nsCOMPtr_base> = {mRawPtr = 0x0}, <No data fields>}
- rv = 0
-#7 0x0000003139a3db88 in NS_ProcessNextEvent_P (
- thread=<value optimized out>, mayWait=<value optimized out>)
- 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 = {<nsCOMPtr_base> = {mRawPtr = 0x0}, <No data fields>}
-#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 = <value optimized out>
- pd = 0x7f9093acd710
- now = <value optimized out>
- 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 = <value optimized out>
- sp = <value optimized out>
- freesize = <value optimized out>
-#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 = <value optimized out>
- 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 = {<nsAutoLockBase> = {<No data fields>},
- 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 = <value optimized out>
- pd = 0x7f90926cb710
- now = <value optimized out>
- 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 = <value optimized out>
- sp = <value optimized out>
- freesize = <value optimized out>
-#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 = <value optimized out>
- thred = 0x7f9098866120
-#2 0x0000003858c23d46 in PR_Wait (mon=0x7f9097d48de0,
- timeout=<value optimized out>)
- 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 = {<nsAutoLockBase> = {<No data fields>},
- 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 = {<nsCOMPtr_base> = {mRawPtr = 0x0}, <No data fields>}
- notifyGlobalObserver = 1
- obs = {<nsCOMPtr_base> = {mRawPtr = 0x0}, <No data fields>}
- rv = 0
-#7 0x0000003139a3db88 in NS_ProcessNextEvent_P (
- thread=<value optimized out>, mayWait=<value optimized out>)
- 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 = {<nsCOMPtr_base> = {mRawPtr = 0x0}, <No data fields>}
-#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 = <value optimized out>
- pd = 0x7f90930cc710
- now = <value optimized out>
- 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 = <value optimized out>
- sp = <value optimized out>
- freesize = <value optimized out>
-#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 = <value optimized out>
- 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 = <value optimized out>
-#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 = <value optimized out>
- pd = 0x7f909e7be710
- now = <value optimized out>
- 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 = <value optimized out>
- sp = <value optimized out>
- freesize = <value optimized out>
-#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=<value optimized out>,
- nfds=<value optimized out>, timeout=<value optimized out>)
- at ../sysdeps/unix/sysv/linux/poll.c:87
- __arg2 = 1
- _a3 = -1
- _a1 = 140259133114288
- resultvar = <value optimized out>
- __arg3 = 244813135871
- __arg1 = 140259133114288
- _a2 = 1
- resultvar = <value optimized out>
- oldtype = 0
- result = <value optimized out>
-#1 0x0000003858c256ef in _pr_poll_with_poll (pds=0x7f90a0e929c0,
- npds=<value optimized out>, timeout=<value optimized out>)
- 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} <repeats 11 times>, {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 = <value optimized out>
- index = <value optimized out>
- msecs = -1
- ready = <value optimized out>
- start = <value optimized out>
- elapsed = <value optimized out>
- remaining = <value optimized out>
-#2 0x00007f909fd45bbd in nsSocketTransportService::Poll (
- this=<value optimized out>, wait=<value optimized out>,
- interval=0x7f909fce4a4c)
- at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/netwerk/base/src/nsSocketTransportService2.cpp:355
- rv = <value optimized out>
- pollList = 0x7f90a0e929c0
- pollCount = 1
- pollTimeout = 4294967295
- ts = 1100069864
- passedInterval = <value optimized out>
-#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 = <value optimized out>
- pollInterval = 32656
- n = <value optimized out>
-#4 0x00007f909fd4628a in nsSocketTransportService::OnProcessNextEvent (
- this=0x7f90a0e92000, thread=0x7f90a8243af0,
- mayWait=<value optimized out>, depth=<value optimized out>)
- 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 = {<nsCOMPtr_base> = {mRawPtr = 0x7f90a0e92010}, <No data fields>}
- rv = <value optimized out>
-#6 0x0000003139a3db88 in NS_ProcessNextEvent_P (
- thread=<value optimized out>, mayWait=<value optimized out>)
- 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 = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f90a8243af0}, <No data fields>}
- i = <value optimized out>
-#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 = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f90a0e92018}, <No data fields>}
- notifyGlobalObserver = 0
- obs = {<nsCOMPtr_base> = {mRawPtr = 0x0}, <No data fields>}
- rv = 0
-#9 0x0000003139a3db88 in NS_ProcessNextEvent_P (
- thread=<value optimized out>, mayWait=<value optimized out>)
- 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 = {<nsCOMPtr_base> = {mRawPtr = 0x0}, <No data fields>}
-#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 = <value optimized out>
- pd = 0x7f909fce5710
- now = <value optimized out>
- 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 = <value optimized out>
- sp = <value optimized out>
- freesize = <value optimized out>
-#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=<value optimized out>)
- at ../nptl/sysdeps/unix/sysv/linux/pt-raise.c:42
- resultvar = 0
- pid = <value optimized out>
-#1 0x0000003139e1f34e in nsProfileLock::FatalSignalHandler (signo=11,
- info=<value optimized out>, context=<value optimized out>)
- at nsProfileLock.cpp:213
- unblock_sigs = {__val = {1024, 0 <repeats 15 times>}}
- oldact = <value optimized out>
-#2 <signal handler called>
-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=<value optimized out>)
- at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/layout/xul/base/src/tree/src/nsTreeBodyFrame.cpp:2915
- colContext = <value optimized out>
- 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 = <value optimized out>
- currCol = 0x7f908861f760
- oldPageCount = <value optimized out>
-#6 0x00007f909545094d in PaintTreeBody (aFrame=<value optimized out>,
- aCtx=<value optimized out>, aDirtyRect=<value optimized out>,
- aPt=<value optimized out>)
- 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=<value optimized out>, 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=<value optimized out>,
- 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=<value optimized out>,
- 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=<value optimized out>)
- 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 = {<nsCOMPtr_base> = {
- mRawPtr = 0x0}, <No data fields>},
- mPresShellStates = {<nsTArray<nsDisplayListBuilder::PresShellState>> = {<nsTArray_base> = {static sEmptyHdr = {mLength = 0, mCapacity = 0,
- mIsAutoArray = 0},
- mHdr = 0x7fff32dee5a0}, <No data fields>},
- mAutoBuf = "\000\000\000\000\b\000\000\200\000\070\210\227\220\177", '\000' <repeats 14 times>"\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' <repeats 38 times>, " U$K8", '\000' <repeats 11 times>, "<\035\001K8\000\000\000\000|\227}\220\177\000\000\001g@\000\000\000\000\000L\347\336\062\377\177\000"},
- mFramesMarkedForDisplay = {<nsTArray<nsIFrame*>> = {<nsTArray_base> = {static sEmptyHdr = {mLength = 0, mCapacity = 0, mIsAutoArray = 0},
- mHdr = 0x7fff32dee670}, <No data fields>},
- 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' <repeats 14 times>, "%\003\000\340u\227}\220\177\000\000\267\327\201S8\000\000\000@\307\224}\220\177\000\000=\277\202S8", '\000' <repeats 11 times>"\232, \231\231\231\231\231\271?\000\000\000\000\000\000\000\000+Z@", '\000' <repeats 14 times>, "\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 = <value optimized out>
- disableAssert = {mOldValue = 0}
- dirtyRect = {x = 60, y = 7140, width = 15060, height = 48300}
- visibleRegion = {mRectCount = 0, mCurRect = 0x7fff32dee4a0,
- mRectListHead = {<nsRegion::nsRectFast> = {<nsRect> = {x = 0,
- y = 0, width = 0, height = 0}, <No data fields>},
- prev = 0x7fff32dee4a0, next = 0x7fff32dee4a0},
- mBoundRect = {<nsRect> = {x = 0, y = 0, width = 0,
- height = 0}, <No data fields>}}
-#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 = <value optimized out>
- frame = <value optimized out>
-#14 0x00007f9095311ac9 in nsViewManager::RenderViews (this=0x7f9099d40280,
- aView=<value optimized out>, aRC=..., aRegion=<value optimized out>)
- 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 = {<nsRegion::nsRectFast> = {<nsRect> = {x = 0,
- y = 0, width = 0, height = 0}, <No data fields>},
- prev = 0x7f908868d5c8, next = 0x7f908868d5c8},
- mBoundRect = {<nsRect> = {x = 60, y = 7140, width = 15060,
- height = 48300}, <No data fields>}}
- displayRoot = 0x7f9099d40500
- displayRootVM = <value optimized out>
-#15 0x00007f9095312a10 in nsViewManager::Refresh (this=0x7f9099d40280,
- aView=0x7f909116e680, aContext=0x7f907d912a60,
- aRegion=<value optimized out>, aUpdateFlags=1)
- at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/view/src/nsViewManager.cpp:492
- localcx = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f907d912a60}, <No data fields>}
- 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 = {<nsRegion::nsRectFast> = {<nsRect> = {x = 0,
- y = 0, width = 0, height = 0}, <No data fields>},
- prev = 0x7f90a0a7d448, next = 0x7f90a0a7d448},
- mBoundRect = {<nsRect> = {x = 0, y = 0, width = 15060,
- height = 48300}, <No data fields>}}
-#16 0x00007f9095312f8f in nsViewManager::DispatchEvent (this=0x7f9099d40280,
- aEvent=0x7fff32deed40, aView=<value optimized out>,
- aStatus=<value optimized out>)
- at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/view/src/nsViewManager.cpp:1008
- rootVM = {mRawPtr = 0x7f9099d40280}
- widget = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f9097878500}, <No data fields>}
- transparentWindow = <value optimized out>
- view = 0x7f909116e680
- didResize = 0
- event = 0x7fff32deed40
- region = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f907d933600}, <No data fields>}
-#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 = {<nsCOMPtr_base> = {mRawPtr = 0x7f9099d40280}, <No data fields>}
- result = nsEventStatus_eConsumeNoDefault
- view = 0x7f909116e680
-#18 0x00007f909d169999 in nsWindow::DispatchEvent (this=0x7f90a8292b50,
- aEvent=<value optimized out>, 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=<value optimized out>, aEvent=0x7fff32def450)
- at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/widget/src/gtk2/nsWindow.cpp:2614
- translucent = 0
- updateRegion = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f907d933600}, <No data fields>}
- nrects = 1
- r = <value optimized out>
- r_end = 0x7f907d918500
- rc = {<nsCOMPtr_base> = {mRawPtr = 0x7f907d912a60}, <No data fields>}
- boundsRect = {x = 0, y = 0, width = 251, height = 805}
- bufferPixmap = 0x7f907d92f310
- event = {<nsGUIEvent> = {<nsEvent> = {eventStructType = 6 '\006',
- message = 130, refPoint = {x = 0, y = 0}, time = 0, flags = 1,
- userType = {<nsCOMPtr_base> = {
- mRawPtr = 0x0}, <No data fields>},
- target = {<nsCOMPtr_base> = {mRawPtr = 0x0}, <No data fields>},
- currentTarget = {<nsCOMPtr_base> = {
- mRawPtr = 0x0}, <No data fields>},
- originalTarget = {<nsCOMPtr_base> = {
- mRawPtr = 0x0}, <No data fields>}},
- widget = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f90a8292b50}, <No data fields>},
- nativeMsg = 0x0}, renderingContext = 0x7f907d912a60, region =
- 0x7f907d933600, rect = 0x0}
- rects = 0x7f907d9184f0
- bufferPixmapSize = <value optimized out>
- ctx = {mRawPtr = 0x7f907d914ec0}
- status = <value optimized out>
- 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=<value optimized out>, param_values=0x7f907d92f280,
- invocation_hint=<value optimized out>, marshal_data=<value optimized out>)
- at gtkmarshalers.c:84
- callback = 0x7f909d172d34 <expose_event_cb(GtkWidget*, GdkEventExpose*)>
- cc = 0x7f90977a4c70
- data1 = 0x7f9097d03700
- data2 = 0x0
- v_return = <value optimized out>
- __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 = <value optimized out>
- marshal_data = <value optimized out>
- in_marshal = <value optimized out>
- __PRETTY_FUNCTION__ = "IA__g_closure_invoke"
-#23 0x000000384b01f947 in signal_emit_unlocked_R (node=<value optimized out>,
- detail=0, instance=0x7f9097d03700, emission_return=0x7fff32def260,
- instance_and_params=0x7f907d92f280) at gsignal.c:3248
- tmp = <value optimized out>
- 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=<value optimized out>, signal_id=<value optimized out>,
- detail=<value optimized out>, 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 = <value optimized out>
- n_params = 1
- __PRETTY_FUNCTION__ = "IA__g_signal_emit_valist"
-#25 0x000000384b0213a3 in IA__g_signal_emit (instance=<value optimized out>,
- signal_id=<value optimized out>, detail=<value optimized out>)
- 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 = <value optimized out>
- 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 = <value optimized out>
- tmp_list = <value optimized out>
- __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 <Address 0xfb00000000 out of bounds>},
- grab_broken = {type = GDK_EXPOSE, window = 0x7f909100a9d0,
- send_event = 0 '\000', keyboard = 0, implicit = 0,
- grab_window = 0x7f9000000325}}
- private = 0x7f909100a9d0
- child = <value optimized out>
- child_region = <value optimized out>
- r = {x = 2106781904, y = 32656, width = -1862227504, height = 32656}
- l = <value optimized out>
- 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 = <value optimized out>
- 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=<value optimized out>)
- 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 <g_idle_dispatch>
- was_in_call = 0
- user_data = 0x7f907d9145a0
- callback = 0x313921d5b0 <gdk_threads_dispatch>
- cb_funcs = 0x3849efad30
- cb_data = 0x7f907d914760
- current_source_link = {data = 0x7f907d9126a0, next = 0x7fff32df3850}
- need_destroy = <value optimized out>
- source = 0x7f907d9126a0
- current = 0x7f9099d609d0
- i = <value optimized out>
-#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=<value optimized out>) at gmain.c:2591
- max_priority = 120
- timeout = 0
- some_ready = 1
- nfds = 14
- allocated_nfds = <value optimized out>
- fds = <value optimized out>
- __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 = <value optimized out>
- 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 = <value optimized out>
- parent_widget = 0x7f907dab9ee0
- action = <value optimized out>
- accept_button = <value optimized out>
- file_chooser = 0x7f90823486c0
- title = {<nsCString> = {<nsACString_internal> = {
- mData = 0x7f907d951a30 "Za\305\202\304\205cz plik do tej wiadomo\305\233ci", mLength = 32, mFlags = 9}, <No data fields>}, <No data fields>}
- defaultName = {<nsCAutoString> = {<nsFixedCString> = {<nsCString> = {<nsACString_internal> = {mData = 0x7fff32def8a0 "", mLength = 0,
- mFlags = 65553}, <No data fields>}, 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"}, <No data fields>}
- defaultPath = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f908c7f6780}, <No data fields>}
-#39 0x0000003139a78001 in NS_InvokeByIndex_P (that=0x7f907d95c900,
- methodIndex=17, paramCount=1, params=<value optimized out>)
- 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 = <value optimized out>
- gpregs = {140734046863264, 140734046862112, 0, 0, 140258884963168,
- 140259009756772}
- d0 = <value optimized out>
- d5 = <value optimized out>
- result = <value optimized out>
- nr_gpr = 2
- d1 = <value optimized out>
- d6 = <value optimized out>
- nr_fpr = 0
- d2 = <value optimized out>
- d7 = <value optimized out>
- methodAddress = <value optimized out>
- 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 = <value optimized out>
- d4 = <value optimized out>
-#40 0x00007f909e801e8f in XPCWrappedNative::CallMethod (ccx=...,
- mode=<value optimized out>)
- 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 = <value optimized out>
- retval = 0
- paramCount = 1 '\001'
- err = <value optimized out>
- tls = <value optimized out>
- secAction = <value optimized out>
- methodInfo = 0x7f909bdd8b08
- src = 0
- foundDependentParam = 0
- argc = 0
- i = 1 '\001'
- xpcc = 0x7f90823f0700
- argv = 0x7f908097a2d0
- secFlag = <value optimized out>
- autoStringUsed = 0
- invokeResult = <value optimized out>
- param_iid = {m0 = 0, m1 = 0, m2 = 0, m3 = "\323\345\341\212;\000\000"}
- ifaceInfo = 0x7f909103cb60
- paramBuffer = {{<nsXPTCMiniVariant> = {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 = {<XPTTypeDescriptorPrefix> = {
- flags = 1 '\001'}, <No data fields>}, flags = 1 '\001'},
- {<nsXPTCMiniVariant> = {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 = {<XPTTypeDescriptorPrefix> = {
- flags = 0 '\000'}, <No data fields>}, flags = 196 '\304'},
- {<nsXPTCMiniVariant> = {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 = {<XPTTypeDescriptorPrefix> = {
- flags = 184 '\270'}, <No data fields>}, flags = 251 '\373'},
- {<nsXPTCMiniVariant> = {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 = {<XPTTypeDescriptorPrefix> = {
- flags = 0 '\000'}, <No data fields>}, flags = 196 '\304'},
- {<nsXPTCMiniVariant> = {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 = {<XPTTypeDescriptorPrefix> = {
- flags = 184 '\270'}, <No data fields>}, flags = 251 '\373'},
- {<nsXPTCMiniVariant> = {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 = {<XPTTypeDescriptorPrefix> = {
- flags = 192 '\300'}, <No data fields>}, flags = 88 'X'},
- {<nsXPTCMiniVariant> = {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 = {<XPTTypeDescriptorPrefix> = {
- flags = 0 '\000'}, <No data fields>}, flags = 0 '\000'},
- {<nsXPTCMiniVariant> = {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 = {<XPTTypeDescriptorPrefix> = {
- flags = 251 '\373'}, <No data fields>}, flags = 77 'M'}}
- autoString = "\000+v\214\220\177", '\000' <repeats 27 times>, "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 = <value optimized out>
- sm = <value optimized out>
- rt = 0x7f90a0a2ac00
- callee = 0x7f907d95c900
- vtblIndex = 17
- name = <value optimized out>
-#41 0x00007f909e80b09d in XPC_WN_CallMethod (cx=0x7f9080467c00,
- obj=0x7f908c762b00, argc=0, argv=0x7f908097a2d0, vp=<value optimized out>)
- at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/js/src/xpconnect/src/xpcwrappednativejsops.cpp:1740
- funobj = <value optimized out>
- wrapper = <value optimized out>
- member = 0x7f907d971120
- ccx = {<nsAXPCNativeCallContext> = {
- _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 = <value optimized out>
- ok = 59
- clasp = <value optimized out>
- i = <value optimized out>
- mark = 0x7f908097a2f0
- sp = <value optimized out>
- newvp = <value optimized out>
- v = 140258808592640
- ops = <value optimized out>
- hookData = 0x0
- parent = 0x7f908c762b00
- fun = <value optimized out>
- rootedArgsFlag = 32
- native = 0x7f909e80afb5 <XPC_WN_CallMethod(JSContext*, JSObject*, uintN, jsval*, jsval*)>
- script = 0x0
- nslots = <value optimized out>
- 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 <Address 0x7f9000000000 out of bounds>
- 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 <repeats 235 times>}
- 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 = <value optimized out>
- ok = 32656
- clasp = <value optimized out>
- i = <value optimized out>
- mark = 0x7f908097a1b8
- sp = <value optimized out>
- newvp = <value optimized out>
- v = 140258984268032
- ops = <value optimized out>
- hookData = 0x0
- parent = 0x7f90910dcb40
- fun = <value optimized out>
- rootedArgsFlag = 32
- native = 0
- script = 0x7f9088581000
- nslots = <value optimized out>
- hook = 0
-#45 0x00007f909e7feddd in nsXPCWrappedJSClass::CallMethod (
- this=0x7f908c311500, wrapper=<value optimized out>, 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 = {<AutoMarkingPtr> = {
- _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 = <value optimized out>
- ccx = {<nsAXPCNativeCallContext> = {
- _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 = <value optimized out>
- stack_size = <value optimized out>
- success = <value optimized out>
- readyToDoTheCall = -1474013376
- xpcc = 0x7f90823f0700
- context = <value optimized out>
- param_iid = {m0 = 853478080, m1 = 32767, m2 = 0,
- m3 = "\340n\316\177\220\177\000"}
- mark = <value optimized out>
- cx = 0x7f9080467c00
- popPrincipal = 1
- obj = 0x7f9096ef1040
- thisObj = 0x7f9096ef1040
- result = 0
- name = 0x7f909bddbf80 "doCommand"
- kungFuDeathGrip = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f908c311500}, <No data fields>}
-#46 0x0000003139a78be1 in PrepareAndDispatch (self=0x7f907fb15720,
- methodIndex=<value optimized out>, args=<value optimized out>,
- 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 = <value optimized out>
- nr_fpr = <value optimized out>
- value = <value optimized out>
- 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 = <value optimized out>
- info = 0x7f909bddbee8
- nr_gpr = <value optimized out>
- i = <value optimized out>
- 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=<value optimized out>)
- 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 = <value optimized out>
- gpregs = {140259272788352, 140258558707056, 0, 0, 140258804115488,
- 140259010974516}
- d0 = <value optimized out>
- d5 = <value optimized out>
- result = <value optimized out>
- nr_gpr = 2
- d1 = <value optimized out>
- d6 = <value optimized out>
- nr_fpr = 0
- d2 = <value optimized out>
- d7 = <value optimized out>
- methodAddress = <value optimized out>
- 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 = <value optimized out>
- d4 = <value optimized out>
-#49 0x00007f909e801e8f in XPCWrappedNative::CallMethod (ccx=...,
- mode=<value optimized out>)
- 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 = <value optimized out>
- retval = 0
- paramCount = 1 '\001'
- err = <value optimized out>
- tls = <value optimized out>
- secAction = <value optimized out>
- methodInfo = 0x7f909bddbee8
- src = 140259002913588
- foundDependentParam = 0
- argc = 1
- i = 1 '\001'
- xpcc = 0x7f90823f0700
- argv = 0x7f908097a158
- secFlag = <value optimized out>
- autoStringUsed = 0
- invokeResult = <value optimized out>
- param_iid = {m0 = 1, m1 = 0, m2 = 0, m3 = "\323\345\341\212;\000\000"}
- ifaceInfo = 0x7f908c322820
- paramBuffer = {{<nsXPTCMiniVariant> = {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 = {<XPTTypeDescriptorPrefix> = {
- flags = 144 '\220'}, <No data fields>}, flags = 0 '\000'},
- {<nsXPTCMiniVariant> = {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 = {<XPTTypeDescriptorPrefix> = {
- flags = 0 '\000'}, <No data fields>}, flags = 196 '\304'},
- {<nsXPTCMiniVariant> = {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 = {<XPTTypeDescriptorPrefix> = {
- flags = 168 '\250'}, <No data fields>}, flags = 14 '\016'},
- {<nsXPTCMiniVariant> = {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 = {<XPTTypeDescriptorPrefix> = {
- flags = 0 '\000'}, <No data fields>}, flags = 196 '\304'},
- {<nsXPTCMiniVariant> = {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 = {<XPTTypeDescriptorPrefix> = {
- flags = 168 '\250'}, <No data fields>}, flags = 14 '\016'},
- {<nsXPTCMiniVariant> = {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 = {<XPTTypeDescriptorPrefix> = {
- flags = 192 '\300'}, <No data fields>}, flags = 88 'X'},
- {<nsXPTCMiniVariant> = {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 = {<XPTTypeDescriptorPrefix> = {
- flags = 0 '\000'}, <No data fields>}, flags = 0 '\000'},
- {<nsXPTCMiniVariant> = {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 = {<XPTTypeDescriptorPrefix> = {
- flags = 251 '\373'}, <No data fields>}, flags = 77 'M'}}
- autoString = "\000?\312\233\220\177\000\000\000\000\000\000\000\000\000\000\001", '\000' <repeats 15 times>"\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' <repeats 11 times>, "|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 = <value optimized out>
- sm = <value optimized out>
- rt = 0x7f90a0a2ac00
- callee = 0x7f907fb15720
- vtblIndex = 5
- name = <value optimized out>
-#50 0x00007f909e80b09d in XPC_WN_CallMethod (cx=0x7f9080467c00,
- obj=0x7f909bca3f00, argc=1, argv=0x7f908097a158, vp=<value optimized out>)
- at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/js/src/xpconnect/src/xpcwrappednativejsops.cpp:1740
- funobj = <value optimized out>
- wrapper = <value optimized out>
- member = 0x7f907d9263b0
- ccx = {<nsAXPCNativeCallContext> = {
- _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 = <value optimized out>
- ok = 59
- clasp = <value optimized out>
- i = <value optimized out>
- mark = 0x7f908097a190
- sp = <value optimized out>
- newvp = <value optimized out>
- v = 140258808572544
- ops = <value optimized out>
- hookData = 0x0
- parent = 0x7f909bca3f00
- fun = <value optimized out>
- rootedArgsFlag = 32
- native = 0x7f909e80afb5 <XPC_WN_CallMethod(JSContext*, JSObject*, uintN, jsval*, jsval*)>
- script = 0x0
- nslots = <value optimized out>
- 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 <Address 0x7f9000000001 out of bounds>
- 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 <repeats 235 times>}
- 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 = <value optimized out>
- ok = 32656
- clasp = <value optimized out>
- i = <value optimized out>
- mark = 0x7f908097a058
- sp = <value optimized out>
- newvp = <value optimized out>
- v = 140258808571776
- ops = <value optimized out>
- hookData = 0x0
- parent = 0x7f908c762700
- fun = <value optimized out>
- rootedArgsFlag = 32
- native = 0
- script = 0x7f9088605160
- nslots = <value optimized out>
- hook = 0
-#54 0x0000003b8ae553fe in js_InternalInvoke (cx=0x7f9080467c00,
- obj=0x7f908c762700, fval=140258808571776, flags=0,
- argc=<value optimized out>, argv=<value optimized out>,
- 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 = <value optimized out>
-#55 0x0000003b8ae1d3d7 in JS_CallFunctionValue (cx=0x7f9080467c00,
- obj=<value optimized out>, fval=<value optimized out>,
- argc=<value optimized out>, argv=<value optimized out>,
- rval=<value optimized out>)
- at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/js/src/jsapi.cpp:5112
- ok = <value optimized out>
-#56 0x00007f909531b526 in nsJSContext::CallEventHandler (this=0x7f9087e15460,
- aTarget=<value optimized out>, aScope=<value optimized out>,
- 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 = <value optimized out>
- 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 = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f90a0a16c48}, <No data fields>}
- 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 = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f907d94b300}, <No data fields>}
- eventString = {<nsFixedString> = {<nsString> = {<nsAString_internal> = {mData = 0x7f907d94b2e8, mLength = 9, mFlags = 65541}, <No data fields>},
- 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 = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f909768f4a0}, <No data fields>}
- funcval = {mObject = 0x7f908c762780, mContext = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f9087e15460}, <No data fields>}}
- handledScriptError = <value optimized out>
- vrv = {<nsCOMPtr_base> = {mRawPtr = 0x0}, <No data fields>}
-#58 0x00007f90952308e4 in nsEventListenerManager::HandleEventSubType (
- this=0x7f908ba7a700, aListenerStruct=0x7f908ba7a740,
- aListener=0x7f9082311680, aDOMEvent=0x7f907ffe8f38,
- aCurrentTarget=0x7f908234b420, aPhaseFlags=<value optimized out>)
- at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/content/events/src/nsEventListenerManager.cpp:1041
- result = <value optimized out>
-#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 = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f9087e15460}, <No data fields>},
- mScriptIsRunning = 0, mPushedSomething = 1}
- currentGroup = 0
- typeData = 0x0
- dispData = 0x0
- iter = {<nsAutoTObserverArray<nsListenerStruct, 2u>::ForwardIterator> = {<nsAutoTObserverArray<nsListenerStruct, 2u>::Iterator> = {<nsTObserverArray_base::Iterator_base> = {mPosition = 1, mNext = 0x0},
- mArray = @0x7f908ba7a728}, <No data fields>},
- mEnd = {<nsAutoTObserverArray<nsListenerStruct, 2u>::Iterator> = {<nsTObserverArray_base::Iterator_base> = {mPosition = 1,
- mNext = 0x7fff32df1ee0},
- mArray = @0x7f908ba7a728}, <No data fields>}}
-#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 = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f908234b420}, <No data fields>}
- item = 0x7f9097d17d20
-#62 0x00007f9095244f69 in nsEventDispatcher::Dispatch (
- aTarget=<value optimized out>, aPresContext=<value optimized out>,
- 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 = {<nsEventChainVisitor> = {
- mPresContext = 0x7f9080228c00, mEvent = 0x7f907dab9940,
- mDOMEvent = 0x7f907ffe8f38, mEventStatus = nsEventStatus_eIgnore,
- mItemFlags = 0, mItemData = {<nsCOMPtr_base> = {
- mRawPtr = 0x0}, <No data fields>}}, <No data fields>}
- t = {<nsCOMPtr_base> = {mRawPtr = 0x7f908234b420}, <No data fields>}
- topEtci = 0x7f9097d17690
- rv = 0
- pool = {static sEtciPool = 0x7f909782f600, static sEtciPoolUsers = 3}
- targetEtci = 0x7f9097d17d20
- preVisitor = {<nsEventChainVisitor> = {mPresContext = 0x7f9080228c00,
- mEvent = 0x7f907dab9940, mDOMEvent = 0x7f907ffe8f38,
- mEventStatus = nsEventStatus_eIgnore, mItemFlags = 0,
- mItemData = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f9080467400}, <No data fields>}},
- mCanHandle = 1 '\001', mForceContentDispatch = 1 '\001',
- mRelatedTargetIsInAnon = 0 '\000',
- mOriginalTargetIsInAnon = 0 '\000',
- mWantsWillHandleEvent = 0 '\000', mParentTarget = 0x0,
- mEventTargetAtParent = 0x0}
- content = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f908234b420}, <No data fields>}
- isInAnon = <value optimized out>
- status = <value optimized out>
- target = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f908234b420}, <No data fields>}
- externalDOMEvent = 1
- kungFuDeathGrip = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f9080228c00}, <No data fields>}
-#63 0x00007f9095245244 in nsEventDispatcher::DispatchDOMEvent (
- aTarget=0x7f908234b420, aEvent=<value optimized out>,
- 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 = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f907ffe8f48}, <No data fields>}
-#64 0x00007f909522e773 in nsEventListenerManager::DispatchEvent (
- this=<value optimized out>, aEvent=0x7f907ffe8f38, _retval=0x7fff32df2318)
- at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/content/events/src/nsEventListenerManager.cpp:1274
- context = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f9080228c00}, <No data fields>}
- status = nsEventStatus_eIgnore
- rv = <value optimized out>
- targetNode = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f908234b420}, <No data fields>}
- document = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f907fff1000}, <No data fields>}
- shell = <value optimized out>
-#65 0x00007f90951f06db in nsDOMEventRTTearoff::DispatchEvent (
- this=<value optimized out>, aEvt=0x7f907ffe8f38,
- _retval=<value optimized out>)
- at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/content/base/src/nsGenericElement.cpp:1672
- target = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f908ba7a710}, <No data fields>}
-#66 0x00007f90951bdeda in nsContentUtils::DispatchXULCommand (
- aTarget=0x7f908234b420, aTrusted=<value optimized out>,
- 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 = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f907fff1118}, <No data fields>}
- xulCommand = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f907ffe8fa8}, <No data fields>}
- pEvent = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f907ffe8f48}, <No data fields>}
- rv = 0
- doc = <value optimized out>
- event = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f907ffe8f38}, <No data fields>}
- view = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f9080467490}, <No data fields>}
- target = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f907d9518b0}, <No data fields>}
- dummy = -1793133634
-#67 0x00007f9095465398 in nsXULElement::PreHandleEvent (
- this=<value optimized out>, aVisitor=...)
- at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/content/xul/content/src/nsXULElement.cpp:1672
- nsevent = {<nsCOMPtr_base> = {mRawPtr = 0x0}, <No data fields>}
- orig = <value optimized out>
- domDoc = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f907fff1108}, <No data fields>}
- commandElt = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f908234b458}, <No data fields>}
- commandContent = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f908234b420}, <No data fields>}
- xulEvent = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f907fd57f48}, <No data fields>}
- command = {<nsFixedString> = {<nsString> = {<nsAString_internal> = {
- mData = 0x7f908ba762b8, mLength = 14,
- mFlags = 65541}, <No data fields>}, 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 = <value optimized out>
-#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 = <value optimized out>
-#69 0x00007f9095244dfe in nsEventDispatcher::Dispatch (
- aTarget=<value optimized out>, 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 = {<nsEventChainVisitor> = {mPresContext = 0x7f9080228c00,
- mEvent = 0x7f907dab98e0, mDOMEvent = 0x7f907fd57ed8,
- mEventStatus = nsEventStatus_eIgnore, mItemFlags = 0,
- mItemData = {<nsCOMPtr_base> = {
- mRawPtr = 0x0}, <No data fields>}}, mCanHandle = 0 '\000',
- mForceContentDispatch = 1 '\001',
- mRelatedTargetIsInAnon = 0 '\000',
- mOriginalTargetIsInAnon = 1 '\001',
- mWantsWillHandleEvent = 0 '\000', mParentTarget = 0x0,
- mEventTargetAtParent = 0x0}
- content = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f908ca09bf0}, <No data fields>}
- isInAnon = <value optimized out>
- status = <value optimized out>
- target = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f908ca09bf0}, <No data fields>}
- externalDOMEvent = 1
- kungFuDeathGrip = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f9080228c00}, <No data fields>}
-#70 0x00007f9095245244 in nsEventDispatcher::DispatchDOMEvent (
- aTarget=0x7f908ca09bf0, aEvent=<value optimized out>,
- 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 = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f907fd57ee8}, <No data fields>}
-#71 0x00007f909509ee49 in PresShell::HandleDOMEventWithTarget (
- this=0x7f9080229000, aTargetContent=0x7f908ca09bf0,
- aEvent=0x7f907fd57ed8, aStatus=<value optimized out>)
- at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/layout/base/nsPresShell.cpp:6590
- container = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f9080466c08}, <No data fields>}
-#72 0x00007f90951bde99 in nsContentUtils::DispatchXULCommand (
- aTarget=0x7f908ca09bf0, aTrusted=<value optimized out>, 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 = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f9080229000}, <No data fields>}
- docEvent = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f907fff1118}, <No data fields>}
- xulCommand = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f907fd57f48}, <No data fields>}
- pEvent = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f907fd57ee8}, <No data fields>}
- rv = 0
- doc = <value optimized out>
- event = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f907fd57ed8}, <No data fields>}
- view = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f9080467490}, <No data fields>}
- target = {<nsCOMPtr_base> = {mRawPtr = 0x0}, <No data fields>}
- dummy = 0
-#73 0x00007f909518d001 in nsButtonBoxFrame::DoMouseClick (
- this=0x7f907fa84768, aEvent=0x7fff32df2bb0,
- aTrustEvent=<value optimized out>)
- 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 = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f9080229000}, <No data fields>}
-#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=<value optimized out>)
- at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/content/events/src/nsEventDispatcher.cpp:354
- createdELMs = 2410
- firstTarget = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f90888c75b0}, <No data fields>}
- item = 0x0
-#76 0x00007f9095244f69 in nsEventDispatcher::Dispatch (
- aTarget=<value optimized out>, aPresContext=<value optimized out>,
- 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 = {<nsEventChainVisitor> = {
- mPresContext = 0x7f9080228c00, mEvent = 0x7fff32df2bb0,
- mDOMEvent = 0x7f907da565f8, mEventStatus = nsEventStatus_eIgnore,
- mItemFlags = 0, mItemData = {<nsCOMPtr_base> = {
- mRawPtr = 0x0}, <No data fields>}}, <No data fields>}
- t = {<nsCOMPtr_base> = {mRawPtr = 0x7f908ca09bf0}, <No data fields>}
- topEtci = 0x7f9097d170a8
- rv = 0
- pool = {static sEtciPool = 0x7f909782f600, static sEtciPoolUsers = 3}
- targetEtci = 0x7f9097d17118
- preVisitor = {<nsEventChainVisitor> = {mPresContext = 0x7f9080228c00,
- mEvent = 0x7fff32df2bb0, mDOMEvent = 0x0,
- mEventStatus = nsEventStatus_eIgnore, mItemFlags = 0,
- mItemData = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f9080467400}, <No data fields>}},
- mCanHandle = 1 '\001', mForceContentDispatch = 1 '\001',
- mRelatedTargetIsInAnon = 0 '\000',
- mOriginalTargetIsInAnon = 1 '\001',
- mWantsWillHandleEvent = 0 '\000', mParentTarget = 0x0,
- mEventTargetAtParent = 0x0}
- content = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f908ca09bf0}, <No data fields>}
- isInAnon = <value optimized out>
- status = <value optimized out>
- target = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f908ca09bf0}, <No data fields>}
- externalDOMEvent = 0
- kungFuDeathGrip = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f9080228c00}, <No data fields>}
-#77 0x00007f909509eadb in PresShell::HandleEventInternal (
- this=0x7f9080229000, aEvent=0x7fff32df2bb0, aView=<value optimized out>,
- aStatus=0x7fff32df30bc)
- at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/layout/base/nsPresShell.cpp:6525
- eventCB = {<nsDispatchingCallback> = {
- _vptr.nsDispatchingCallback = 0x7f9095a029b0}, mPresShell = {
- mRawPtr = 0x7f9080229000}}
- wasHandlingKeyBoardEvent = 0
- popupStatePusher = {mOldState = openControlled}
- weakView = {mPrev = 0x0, mView = 0x0}
- isHandlingUserInput = 0
- userInpStatePusher = {mIsHandlingUserInput = 0}
- manager = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f9081cd2d00}, <No data fields>}
- rv = 0
-#78 0x00007f909509ef33 in PresShell::HandleEventWithTarget (
- this=0x7f9080229000, aEvent=0x7fff32df2bb0, aFrame=<value optimized out>,
- aContent=<value optimized out>, aStatus=<value optimized out>)
- 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=<value optimized out>,
- aEvent=0x7fff32df3220, aStatus=0x7fff32df30bc)
- at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/content/events/src/nsEventStateManager.cpp:3994
- mouseContent = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f908ca09bf0}, <No data fields>}
- event = {<nsMouseEvent_base> = {<nsInputEvent> = {<nsGUIEvent> = {<nsEvent> = {eventStructType = 10 '\n', message = 327, refPoint = {x = 268,
- y = 55}, time = 12433188, flags = 2049,
- userType = {<nsCOMPtr_base> = {
- mRawPtr = 0x0}, <No data fields>},
- target = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f908ca09bf0}, <No data fields>},
- currentTarget = {<nsCOMPtr_base> = {
- mRawPtr = 0x0}, <No data fields>},
- originalTarget = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f908ca09bf0}, <No data fields>}},
- widget = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f9089f4fc70}, <No data fields>},
- nativeMsg = 0x0}, isShift = 0, isControl = 0, isAlt = 0,
- isMeta = 0}, relatedTarget = {<nsCOMPtr_base> = {
- mRawPtr = 0x0}, <No data fields>}, button = 0, pressure = 0},
- acceptActivation = 0 '\000', ignoreRootScrollFrame = 0 '\000',
- reason = nsMouseEvent::eReal, context = nsMouseEvent::eNormal,
- exit = nsMouseEvent::eChild, clickCount = 1}
- presShell = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f9080229000}, <No data fields>}
- 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 = <value optimized out>
- presContext = {mRawPtr = 0x7f9080228c00}
- ret = 0
-#81 0x00007f909509ebf9 in PresShell::HandleEventInternal (
- this=0x7f9080229000, aEvent=0x7fff32df3220, aView=<value optimized out>,
- aStatus=0x7fff32df30bc)
- at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/layout/base/nsPresShell.cpp:6548
- wasHandlingKeyBoardEvent = <value optimized out>
- popupStatePusher = {mOldState = openAbused}
- weakView = {mPrev = 0x0, mView = 0x7f908a064c00}
- isHandlingUserInput = 1
- userInpStatePusher = {mIsHandlingUserInput = 1}
- manager = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f9081cd2d00}, <No data fields>}
- rv = <value optimized out>
-#82 0x00007f909509f074 in PresShell::HandlePositionedEvent (
- this=0x7f9080229000, aView=0x7f908a064c00,
- aTargetFrame=<value optimized out>, 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 = <value optimized out>
- rootPresContext = <value optimized out>
- eventPoint = {x = 16080, y = 3300}
- targetFrame = 0x7f907fa84768
- frame = <value optimized out>
- dispatchUsingCoordinates = <value optimized out>
- rv = <value optimized out>
-#84 0x00007f9095310bf2 in nsViewManager::HandleEvent (
- this=<value optimized out>, aView=<value optimized out>,
- aPoint=<value optimized out>, aEvent=0x7fff32df3220,
- aCaptured=<value optimized out>)
- at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/view/src/nsViewManager.cpp:1224
- obs = {<nsCOMPtr_base> = {mRawPtr = 0x7f90802290e0}, <No data fields>}
- status = nsEventStatus_eIgnore
-#85 0x00007f9095313621 in nsViewManager::DispatchEvent (this=0x7f908a064b80,
- aEvent=0x7fff32df3220, aView=<value optimized out>,
- aStatus=0x7fff32df31cc)
- at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/view/src/nsViewManager.cpp:1203
- p2a = 60
- offset = <value optimized out>
- baseViewDimensions = <value optimized out>
- pt = warning: bits 32-64 in computed object were optimized out; replacing with zeroes
-{x = 16110, y = 0}
- baseView = <value optimized out>
- view = <value optimized out>
- 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 = {<nsCOMPtr_base> = {mRawPtr = 0x7f908a064b80}, <No data fields>}
- result = nsEventStatus_eIgnore
- view = 0x7f908a064c00
-#87 0x00007f909d169999 in nsWindow::DispatchEvent (this=0x7f9089f4fc70,
- aEvent=<value optimized out>, 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=<value optimized out>, 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 = {<nsMouseEvent_base> = {<nsInputEvent> = {<nsGUIEvent> = {<nsEvent> = {eventStructType = 10 '\n', message = 301, refPoint = {x = 268,
- y = 55}, time = 12433188, flags = 1025,
- userType = {<nsCOMPtr_base> = {
- mRawPtr = 0x0}, <No data fields>},
- target = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f90888c75b0}, <No data fields>},
- currentTarget = {<nsCOMPtr_base> = {
- mRawPtr = 0x0}, <No data fields>},
- originalTarget = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f908ca09bf0}, <No data fields>}},
- widget = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f9089f4fc70}, <No data fields>},
- nativeMsg = 0x0}, isShift = 0, isControl = 0, isAlt = 0,
- isMeta = 0}, relatedTarget = {<nsCOMPtr_base> = {
- mRawPtr = 0x0}, <No data fields>}, 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 = <value optimized out>
-#90 0x0000003138b51003 in _gtk_marshal_BOOLEAN__BOXED (
- closure=0x7f90885b6970, return_value=0x7fff32df34b0,
- n_param_values=<value optimized out>, param_values=0x7f907d92fa90,
- invocation_hint=<value optimized out>, marshal_data=<value optimized out>)
- at gtkmarshalers.c:84
- callback = 0x7f909d171bd2 <button_release_event_cb(GtkWidget*, GdkEventButton*)>
- cc = 0x7f90885b6970
- data1 = 0x7f9088083380
- data2 = 0x0
- v_return = <value optimized out>
- __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 = <value optimized out>
- marshal_data = <value optimized out>
- in_marshal = <value optimized out>
- __PRETTY_FUNCTION__ = "IA__g_closure_invoke"
-#92 0x000000384b01f947 in signal_emit_unlocked_R (node=<value optimized out>,
- detail=0, instance=0x7f9088083380, emission_return=0x7fff32df3600,
- instance_and_params=0x7f907d92fa90) at gsignal.c:3248
- tmp = <value optimized out>
- 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=<value optimized out>, signal_id=<value optimized out>,
- detail=<value optimized out>, 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 = <value optimized out>
- n_params = 1
- __PRETTY_FUNCTION__ = "IA__g_signal_emit_valist"
-#94 0x000000384b0213a3 in IA__g_signal_emit (instance=<value optimized out>,
- signal_id=<value optimized out>, detail=<value optimized out>)
- 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 = <value optimized out>
- return_val = 0
-#96 0x0000003138b47d63 in IA__gtk_propagate_event (widget=0x7f9088083380,
- event=0x7f90886050f0) at gtkmain.c:2442
- tmp = <value optimized out>
- handled_event = <value optimized out>
- __PRETTY_FUNCTION__ = "IA__gtk_propagate_event"
-#97 0x0000003138b48f2b in IA__gtk_main_do_event (event=0x7f90886050f0)
- at gtkmain.c:1647
- event_widget = <value optimized out>
- grab_widget = 0x7f9088083380
- window_group = <value optimized out>
- rewritten_event = <value optimized out>
- tmp_list = <value optimized out>
- __PRETTY_FUNCTION__ = "IA__gtk_main_do_event"
-#98 0x000000313926039c in gdk_event_dispatch (source=<value optimized out>,
- callback=<value optimized out>, user_data=<value optimized out>)
- at gdkevents-x11.c:2372
- display = <value optimized out>
- event = 0x7f90886050f0
-#99 0x0000003849c3bd02 in g_main_dispatch (context=0x7f90a82177a0)
- at gmain.c:1960
- dispatch = 0x3139260350 <gdk_event_dispatch>
- was_in_call = 0
- user_data = 0x0
- callback = 0
- cb_funcs = 0x0
- cb_data = 0x0
- current_source_link = {data = 0x7f90a821d6a0, next = 0x0}
- need_destroy = <value optimized out>
- source = 0x7f90a821d6a0
- current = 0x7f9099d609d0
- i = <value optimized out>
-#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=<value optimized out>) at gmain.c:2591
- max_priority = 2147483647
- timeout = -1
- some_ready = 1
- nfds = 13
- allocated_nfds = <value optimized out>
- fds = <value optimized out>
- __PRETTY_FUNCTION__ = "g_main_context_iterate"
-#102 0x0000003849c3fc9c in IA__g_main_context_iteration (
- context=0x7f90a82177a0, may_block=1) at gmain.c:2654
- retval = <value optimized out>
-#103 0x00007f909d189b13 in nsBaseAppShell::DoProcessNextNativeEvent (
- this=0x7f90a0a7e700, mayWait=<value optimized out>)
- 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=<value optimized out>)
- 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 = {<nsCOMPtr_base> = {mRawPtr = 0x7f90a0a7e708}, <No data fields>}
- rv = <value optimized out>
-#106 0x0000003139a3db88 in NS_ProcessNextEvent_P (
- thread=<value optimized out>, mayWait=<value optimized out>)
- 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 = <value optimized out>
-#109 0x0000003139e1934d in XRE_main (argc=<value optimized out>,
- argv=<value optimized out>, aAppData=<value optimized out>)
- at /usr/src/debug/thunderbird-3.1.1/comm-1.9.2/mozilla/toolkit/xre/nsAppRunner.cpp:3483
- remoteService = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f9099ebc9b0}, <No data fields>}
- appStartup = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f90a0ad9d80}, <No data fields>}
- shuttingDown = 0
- cmdLine = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f9097395cc0}, <No data fields>}
- workingDir = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f909753ce00}, <No data fields>}
- xpcom = {mServiceManager = 0x7f90a829a148}
- desktopStartupIDEnv = <value optimized out>
- updRoot = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f90a821a180}, <No data fields>}
- persistent = 1
- profLD = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f90a0e02fc0}, <No data fields>}
- dirProvider =
- {<nsIDirectoryServiceProvider2> = {<nsIDirectoryServiceProvider> = {<nsISupports> = {
- _vptr.nsISupports = 0x313a02f4c0}, <No data fields>}, <No data fields>}, <nsIProfileStartup> = {<nsISupports> = {
- _vptr.nsISupports = 0x313a02f508}, <No data fields>},
- mAppProvider = {<nsCOMPtr_base> = {
- mRawPtr = 0x0}, <No data fields>},
- mGREDir = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f90a821a300}, <No data fields>},
- mXULAppDir = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f90a821a180}, <No data fields>},
- mProfileDir = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f90a0e02f00}, <No data fields>},
- mProfileLocalDir = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f90a0e02fc0}, <No data fields>},
- mProfileNotified = 1 '\001', mExtensionsLoaded = 1 '\001',
- mAppBundleDirectories = {<nsCOMArray_base> = {mArray = {
- mImpl = 0x0}}, <No data fields>},
- mExtensionDirectories = {<nsCOMArray_base> = {mArray = {
- mImpl = 0x7f90a0e11600}}, <No data fields>},
- mThemeDirectories = {<nsCOMArray_base> = {mArray = {
- mImpl = 0x7f90a0e11650}}, <No data fields>}}
- desktopStartupIDPtr = <value optimized out>
- nativeApp = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f90a82d4250}, <No data fields>}
- startOffline = 0
- profileName = {<nsFixedCString> = {<nsCString> = {<nsACString_internal> = {mData = 0x7f90a0e10218 "default", mLength = 7,
- mFlags = 65541}, <No data fields>}, 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' <repeats 11 times>"\371, \062\246\071\061\000\000"}
- upgraded = <value optimized out>
- versionOK = -1712600656
- appInitiatedRestart = 0
- desktopStartupID = {<nsFixedCString> = {<nsCString> = {<nsACString_internal> = {mData = 0x7fff32df40a0 "", mLength = 0,
- mFlags = 65553}, <No data fields>}, 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 = <value optimized out>
- xremotearg = <value optimized out>
- _g_set_application_name = <value optimized out>
- canRun = 1
- profileLock = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f90a0e11560}, <No data fields>}
- profD = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f90a0e02f00}, <No data fields>}
- version = {<nsFixedCString> = {<nsCString> = {<nsACString_internal> = {mData = 0x7fff32df3fe0 "3.1.1_20100720161535/20100720161535", mLength = 35,
- mFlags = 65553}, <No data fields>}, 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 = <value optimized out>
- osABI = {<nsCString> = {<nsACString_internal> = {
- mData = 0x3139e24927 "Linux_x86_64-gcc3", mLength = 17,
- mFlags = 1}, <No data fields>}, <No data fields>}
- rv = 0
- gtkModules = <value optimized out>
- appData = {<nsXREAppData> = {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}, <No data fields>}
- localIniFile = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f90a821a240}, <No data fields>}
- parser = {
- mSections = {<nsBaseHashtable<nsDepCharHashKey, nsAutoPtr<nsINIParser_internal::INIValue>, nsINIParser_internal::INIValue*>> = {<nsTHashtable<nsBaseHashtableET<nsDepCharHashKey, nsAutoPtr<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 ""}}, <No data fields>}, <No data fields>}, mFileContents = {mRawPtr = 0x7f90a8210400 "[Build"}}
- ar = <value optimized out>
- override = 0x0
- iniFile = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f90a821a240}, <No data fields>}
- i = <value optimized out>
-#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 = <value optimized out>
- appData = 0x7f90a821d080
- appini = {<nsCOMPtr_base> = {
- mRawPtr = 0x7f90a821a0c0}, <No data fields>}
- result = <value optimized out>
-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 <raise+43>
-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 <raise+53>
- 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 92bcc65..0000000
--- 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 <frame.h>
-#include <utils.h>
-#include <assert.h>
-
-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 <frame.h>
-#include <assert.h>
-
-/**
- * @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 <frame.h>
-#include "strbuf.h"
-#include <assert.h>
-#include <string.h>
-
-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 <frame.h>
-#include <utils.h>
-#include <location.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <string.h>
-
-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==<nsIAtom, nsICSSPseudoClass>");
- return 0;
-}
-]])
-
-## ---------------------------- ##
-## btp_frame_skip_function_args ##
-## ---------------------------- ##
-
-AT_TESTFUN([btp_frame_skip_function_args],
-[[
-#include <frame.h>
-#include <location.h>
-#include <assert.h>
-
-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=<value optimized out>)");
- /* 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 <frame.h>
-#include <location.h>
-#include <assert.h>
-#include <stdlib.h>
-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=<value optimized out>, 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<sigc::bound_mem_functor0<void, Driver>, void>::call_it (this=0x6c)",
- "sigc::internal::slot_call0<sigc::bound_mem_functor0<void, Driver>, void>::call_it",
- NULL);
- check(true,
- "sigc::internal::slot_call0<sigc::bound_mem_functor0<void, GameWindow>, void>::call_it(sigc::internal::slot_rep*) ()",
- "sigc::internal::slot_call0<sigc::bound_mem_functor0<void, GameWindow>, void>::call_it(sigc::internal::slot_rep*)",
- NULL);
- /* C++ operator< and templates */
- check(true,
- "operator< <char, std::char_traits<char>, std::allocator<char> > (__s1=<value optimized out>)",
- "operator< <char, std::char_traits<char>, std::allocator<char> >",
- 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<char>, " \
- "std::allocator<char> >, " \
- "boost::filesystem::path_traits> > >" \
- "(boost::filesystem::basic_filesystem_error<" \
- "boost::filesystem::basic_path<" \
- "std::basic_string<char, std::char_traits<char>, " \
- "std::allocator<char> >, " \
- "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 <frame.h>
-#include <location.h>
-#include <assert.h>
-#include <stdlib.h>
-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 <frame.h>
-#include <location.h>
-#include <assert.h>
-#include <stdlib.h>
-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 <frame.h>
-#include <location.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <stdio.h>
-
-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<sigc::bound_mem_functor0<void, GameWindow>, void>::call_it(sigc::internal::slot_rep*)";
- frame.number = 15;
- frame.address = 0x08201bdfULL;
- check("#15 0x08201bdf in sigc::internal::slot_call0<sigc::bound_mem_functor0<void, GameWindow>,"
- " 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=<value optimized out>,\n"
- "interface=<value optimized out>) at _polkitauthenticationagent.c:885", &frame);
-
- return 0;
-}
-]])
-
-## --------------- ##
-## btp_frame_parse ##
-## --------------- ##
-
-AT_TESTFUN([btp_frame_parse],
-[[
-#include <frame.h>
-#include <location.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <string.h>
-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 5a3976e..0000000
--- 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 <thread.h>
-#include <frame.h>
-#include <location.h>
-#include <utils.h>
-#include <assert.h>
-#include <stdlib.h>
-
-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 <thread.h>
-#include <frame.h>
-#include <location.h>
-#include <utils.h>
-#include <assert.h>
-#include <stdlib.h>
-
-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 <thread.h>
-#include <frame.h>
-#include <location.h>
-#include <utils.h>
-#include <assert.h>
-#include <stdlib.h>
-
-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 <thread.h>
-#include <frame.h>
-#include <location.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <stdio.h>
-
-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=<value optimized out>, 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 <thread.h>
-#include <frame.h>
-#include <location.h>
-#include <assert.h>
-#include <stdlib.h>
-
-/**
- * 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 <thread.h>
-#include <assert.h>
-#include <stdlib.h>
-
-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 1364497..0000000
--- 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 <utils.h>
-#include <assert.h>
-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 <utils.h>
-#include <assert.h>
-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 <utils.h>
-#include <assert.h>
-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 <utils.h>
-#include <assert.h>
-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 <utils.h>
-#include <assert.h>
-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 <utils.h>
-#include <assert.h>
-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 <utils.h>
-#include <assert.h>
-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 <utils.h>
-#include <assert.h>
-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 <utils.h>
-#include <assert.h>
-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 <utils.h>
-#include <assert.h>
-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 <utils.h>
-#include <assert.h>
-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 <utils.h>
-#include <assert.h>
-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 <utils.h>
-#include <assert.h>
-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 <utils.h>
-#include <assert.h>
-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 <utils.h>
-#include <assert.h>
-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 <utils.h>
-#include <assert.h>
-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 <utils.h>
-#include <assert.h>
-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 <utils.h>
-#include <assert.h>
-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 d2db8b9..dc60f8d 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 0ddf595..5137b41 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])