Bug 391361. The integration of breakpad on Solaris.

r=ted.mielczarek,a=beltzner.
This commit is contained in:
alfred.peng%sun.com 2008-03-20 01:13:43 +00:00
Родитель daf1d5d4fc
Коммит 8516bb84ee
13 изменённых файлов: 274 добавлений и 10 удалений

Просмотреть файл

@ -162,7 +162,7 @@ MAKE_SYM_STORE_PATH := $(DIST)/bin
endif
DUMP_SYMS_BIN ?= $(DIST)/host/bin/dump_syms
endif
ifeq ($(OS_ARCH),Linux)
ifeq (,$(filter-out Linux SunOS,$(OS_ARCH)))
MAKE_SYM_STORE_ARGS := --vcs-info
DUMP_SYMS_BIN ?= $(DIST)/host/bin/dump_syms
MAKE_SYM_STORE_PATH := $(DIST)/bin

Просмотреть файл

@ -5362,7 +5362,8 @@ dnl ========================================================
if (test "$OS_ARCH" = "WINNT" -a -z "$GNU_CC" \
|| test "$OS_ARCH" = "Darwin" \
|| test "$OS_ARCH" = "Linux" -a "$CPU_ARCH" = "x86") \
|| test "$OS_ARCH" = "Linux" -a "$CPU_ARCH" = "x86" \
|| test "$OS_ARCH" = "SunOS") \
&& test -z "$HAVE_64BIT_OS"; then
MOZ_CRASHREPORTER=1
fi
@ -5375,7 +5376,7 @@ MOZ_ARG_DISABLE_BOOL(crashreporter,
if test -n "$MOZ_CRASHREPORTER"; then
AC_DEFINE(MOZ_CRASHREPORTER)
if test "$OS_ARCH" = "Linux" && \
if (test "$OS_ARCH" = "Linux" || test "$OS_ARCH" = "SunOS") && \
test -z "$SKIP_LIBRARY_CHECKS"; then
PKG_CHECK_MODULES(MOZ_GTHREAD, gthread-2.0)
AC_SUBST(MOZ_GTHREAD_CFLAGS)

Просмотреть файл

@ -83,6 +83,18 @@ DIRS += \
$(NULL)
endif
ifeq ($(OS_ARCH),SunOS)
# there's no define for this normally
DEFINES += -DXP_SOLARIS
DIRS += \
google-breakpad/src/common \
google-breakpad/src/common/solaris \
google-breakpad/src/client \
google-breakpad/src/client/solaris/handler \
google-breakpad/src/tools/solaris/dump_syms \
$(NULL)
endif
DIRS += client
LOCAL_INCLUDES = -I$(srcdir)/google-breakpad/src

Просмотреть файл

@ -89,6 +89,18 @@ CPPSRCS += http_upload.cc
FORCE_USE_PIC=1
endif
ifeq ($(OS_ARCH),SunOS)
CPPSRCS += crashreporter_linux.cpp
LIBS += \
$(DEPTH)/toolkit/crashreporter/google-breakpad/src/common/solaris/$(LIB_PREFIX)breakpad_solaris_common_s.$(LIB_SUFFIX) \
$(NULL)
LOCAL_INCLUDES += -I$(srcdir)
OS_CXXFLAGS += $(MOZ_GTK2_CFLAGS) $(MOZ_GTHREAD_CFLAGS)
OS_LIBS += $(MOZ_GTK2_LIBS) $(MOZ_GTHREAD_LIBS)
CPPSRCS += http_upload.cc
FORCE_USE_PIC=1
endif
include $(topsrcdir)/config/rules.mk
ifeq ($(OS_ARCH),Darwin)
@ -102,7 +114,7 @@ libs::
rm -f $(DIST)/bin/crashreporter
endif
ifeq ($(OS_ARCH),Linux)
ifeq (,$(filter-out Linux SunOS,$(OS_ARCH)))
export:: $(srcdir)/../google-breakpad/src/common/linux/http_upload.cc
$(INSTALL) $^ .

Просмотреть файл

@ -0,0 +1,60 @@
# ***** BEGIN LICENSE BLOCK *****
# Version: MPL 1.1/GPL 2.0/LGPL 2.1
#
# The contents of this file are subject to the Mozilla Public License Version
# 1.1 (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
# http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS" basis,
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
# for the specific language governing rights and limitations under the
# License.
#
# The Original Code is Mozilla Breakpad integration
#
# The Initial Developer of the Original Code is
# Alfred Peng <alfred.peng@sun.com>
# Portions created by the Initial Developer are Copyright (C) 2007
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
#
# Alternatively, the contents of this file may be used under the terms of
# either the GNU General Public License Version 2 or later (the "GPL"), or
# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
# in which case the provisions of the GPL or the LGPL are applicable instead
# of those above. If you wish to allow use of your version of this file only
# under the terms of either the GPL or the LGPL, and not to allow others to
# use your version of this file under the terms of the MPL, indicate your
# decision by deleting the provisions above and replace them with the notice
# and other provisions required by the GPL or the LGPL. If you do not delete
# the provisions above, a recipient may use your version of this file under
# the terms of any one of the MPL, the GPL or the LGPL.
#
# ***** END LICENSE BLOCK *****
DEPTH = ../../../../../../..
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
include $(DEPTH)/config/autoconf.mk
MODULE = handler
LIBRARY_NAME = exception_handler_s
XPI_NAME = crashreporter
LOCAL_INCLUDES = -I$(srcdir)/../../..
CPPSRCS = \
exception_handler.cc \
minidump_generator.cc \
solaris_lwp.cc \
$(NULL)
# need static lib
FORCE_STATIC_LIB = 1
FORCE_USE_PIC = 1
include $(topsrcdir)/config/rules.mk

Просмотреть файл

@ -47,8 +47,6 @@ HOST_LIBRARY_NAME = host_breakpad_linux_common_s
LOCAL_INCLUDES = -I$(srcdir)/../..
CXXFLAGS := $(filter-out -pedantic,$(CXXFLAGS))
# not compiling http_upload.cc currently
# since it depends on libcurl
CPPSRCS = \

Просмотреть файл

@ -0,0 +1,68 @@
# ***** BEGIN LICENSE BLOCK *****
# Version: MPL 1.1/GPL 2.0/LGPL 2.1
#
# The contents of this file are subject to the Mozilla Public License Version
# 1.1 (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
# http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS" basis,
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
# for the specific language governing rights and limitations under the
# License.
#
# The Original Code is Mozilla Breakpad integration
#
# The Initial Developer of the Original Code is
# Alfred Peng <alfred.peng@sun.com>
# Portions created by the Initial Developer are Copyright (C) 2007
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
#
# Alternatively, the contents of this file may be used under the terms of
# either the GNU General Public License Version 2 or later (the "GPL"), or
# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
# in which case the provisions of the GPL or the LGPL are applicable instead
# of those above. If you wish to allow use of your version of this file only
# under the terms of either the GPL or the LGPL, and not to allow others to
# use your version of this file under the terms of the MPL, indicate your
# decision by deleting the provisions above and replace them with the notice
# and other provisions required by the GPL or the LGPL. If you do not delete
# the provisions above, a recipient may use your version of this file under
# the terms of any one of the MPL, the GPL or the LGPL.
#
# ***** END LICENSE BLOCK *****
DEPTH = ../../../../../..
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
include $(DEPTH)/config/autoconf.mk
MODULE = breakpad_solaris_common
LIBRARY_NAME = breakpad_solaris_common_s
HOST_LIBRARY_NAME = host_breakpad_solaris_common_s
LOCAL_INCLUDES = -I$(srcdir)/../..
# not compiling http_upload.cc currently
# since it depends on libcurl
CPPSRCS = \
dump_symbols.cc \
file_id.cc \
guid_creator.cc \
$(NULL)
HOST_CPPSRCS = \
dump_symbols.cc \
file_id.cc \
guid_creator.cc \
$(NULL)
# need static lib
FORCE_STATIC_LIB = 1
FORCE_USE_PIC = 1
include $(topsrcdir)/config/rules.mk

Просмотреть файл

@ -0,0 +1,66 @@
# ***** BEGIN LICENSE BLOCK *****
# Version: MPL 1.1/GPL 2.0/LGPL 2.1
#
# The contents of this file are subject to the Mozilla Public License Version
# 1.1 (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
# http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS" basis,
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
# for the specific language governing rights and limitations under the
# License.
#
# The Original Code is Mozilla Breakpad integration
#
# The Initial Developer of the Original Code is
# Alfred Peng <alfred.peng@sun.com>
# Portions created by the Initial Developer are Copyright (C) 2007
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
#
# Alternatively, the contents of this file may be used under the terms of
# either the GNU General Public License Version 2 or later (the "GPL"), or
# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
# in which case the provisions of the GPL or the LGPL are applicable instead
# of those above. If you wish to allow use of your version of this file only
# under the terms of either the GPL or the LGPL, and not to allow others to
# use your version of this file under the terms of the MPL, indicate your
# decision by deleting the provisions above and replace them with the notice
# and other provisions required by the GPL or the LGPL. If you do not delete
# the provisions above, a recipient may use your version of this file under
# the terms of any one of the MPL, the GPL or the LGPL.
#
# ***** END LICENSE BLOCK *****
DEPTH = ../../../../../../..
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
include $(DEPTH)/config/autoconf.mk
HOST_PROGRAM = dump_syms
LOCAL_INCLUDES = \
-I$(srcdir)/../../.. \
-I$(srcdir)/../../../common/solaris \
$(NULL)
HOST_CPPSRCS = \
dump_syms.cc \
$(NULL)
HOST_LIBS += \
$(DEPTH)/toolkit/crashreporter/google-breakpad/src/common/solaris/$(LIB_PREFIX)host_breakpad_solaris_common_s.$(LIB_SUFFIX) \
$(DEPTH)/toolkit/crashreporter/google-breakpad/src/common/$(LIB_PREFIX)host_breakpad_common_s.$(LIB_SUFFIX) \
$(NULL)
HOST_LDFLAGS += -lelf -ldemangle
# force C++ linking
CPP_PROG_LINK = 1
FORCE_USE_PIC = 1
include $(topsrcdir)/config/rules.mk

Просмотреть файл

@ -57,14 +57,15 @@
#include <fcntl.h>
#include <sys/types.h>
#include <unistd.h>
#elif defined(XP_SOLARIS)
#include "client/solaris/handler/exception_handler.h"
#include <fcntl.h>
#include <sys/types.h>
#include <unistd.h>
#else
#error "Not yet implemented for this platform"
#endif // defined(XP_WIN32)
#ifndef HAVE_CPP_2BYTE_WCHAR_T
#error "This code expects a 2 byte wchar_t. You should --disable-crashreporter."
#endif
#include <stdlib.h>
#include <time.h>
#include <prenv.h>

Просмотреть файл

@ -94,6 +94,15 @@ LIBS += \
$(NULL)
endif
ifeq ($(OS_ARCH),SunOS)
LIBS += \
$(DEPTH)/toolkit/crashreporter/google-breakpad/src/client/solaris/handler/$(LIB_PREFIX)exception_handler_s.$(LIB_SUFFIX) \
$(DEPTH)/toolkit/crashreporter/google-breakpad/src/client/$(LIB_PREFIX)minidump_file_writer_s.$(LIB_SUFFIX) \
$(DEPTH)/toolkit/crashreporter/google-breakpad/src/common/solaris/$(LIB_PREFIX)breakpad_solaris_common_s.$(LIB_SUFFIX) \
$(DEPTH)/toolkit/crashreporter/google-breakpad/src/common/$(LIB_PREFIX)breakpad_common_s.$(LIB_SUFFIX) \
$(NULL)
endif
ifndef MOZ_ENABLE_LIBXUL
check:: $(PROGRAM)
$(RUN_TEST_PROGRAM) $(DIST)/bin/TestCrashReporterAPI

Просмотреть файл

@ -278,6 +278,7 @@ def GetPlatformSpecificDumper(**kwargs):
return {'win32': Dumper_Win32,
'cygwin': Dumper_Win32,
'linux2': Dumper_Linux,
'sunos5': Dumper_Solaris,
'darwin': Dumper_Mac}[sys.platform](**kwargs)
def SourceIndex(fileStream, outputPath):
@ -402,6 +403,11 @@ class Dumper:
if line.startswith("FILE"):
# FILE index filename
(x, index, filename) = line.split(None, 2)
if sys.platform == "sunos5":
start = filename.find(self.srcdir)
if start == -1:
start = 0
filename = filename[start:]
filename = self.FixFilenameCase(filename.rstrip())
sourcepath = filename
if self.vcsinfo:
@ -528,6 +534,24 @@ class Dumper_Linux(Dumper):
os.system("gzip %s" % full_path)
print rel_path + ".gz"
class Dumper_Solaris(Dumper):
def RunFileCommand(self, file):
"""Utility function, returns the output of file(1)"""
try:
output = os.popen("file " + file).read()
return output.split('\t')[1];
except:
return ""
def ShouldProcess(self, file):
"""This function will allow processing of files that are
executable, or end with the .so extension, and additionally
file(1) reports as being ELF files. It expects to find the file
command in PATH."""
if file.endswith(".so") or os.access(file, os.X_OK):
return self.RunFileCommand(file).startswith("ELF")
return False
class Dumper_Mac(Dumper):
def ShouldProcess(self, file):
"""This function will allow processing of files that are

Просмотреть файл

@ -226,6 +226,10 @@ ifeq ($(OS_ARCH),BeOS)
EXTRA_DSO_LDOPTS += -lbe -ltracker
endif
ifeq ($(OS_ARCH),SunOS)
EXTRA_DSO_LDOPTS += -lelf -ldemangle -lCstd
endif
ifeq ($(OS_ARCH),WINNT)
EXTRA_DSO_LDOPTS += $(call EXPAND_LIBNAME,shell32 ole32 uuid version winspool comdlg32 imm32 winmm wsock32 msimg32)
ifneq (,$(MOZ_DEBUG)$(NS_TRACE_MALLOC))

Просмотреть файл

@ -203,6 +203,15 @@ SHARED_LIBRARY_LIBS += \
$(DEPTH)/toolkit/crashreporter/google-breakpad/src/common/linux/$(LIB_PREFIX)breakpad_linux_common_s.$(LIB_SUFFIX) \
$(NULL)
endif
ifeq ($(OS_ARCH),SunOS)
SHARED_LIBRARY_LIBS += \
$(DEPTH)/toolkit/crashreporter/google-breakpad/src/client/solaris/handler/$(LIB_PREFIX)exception_handler_s.$(LIB_SUFFIX) \
$(DEPTH)/toolkit/crashreporter/google-breakpad/src/client/$(LIB_PREFIX)minidump_file_writer_s.$(LIB_SUFFIX) \
$(DEPTH)/toolkit/crashreporter/google-breakpad/src/common/$(LIB_PREFIX)breakpad_common_s.$(LIB_SUFFIX) \
$(DEPTH)/toolkit/crashreporter/google-breakpad/src/common/solaris/$(LIB_PREFIX)breakpad_solaris_common_s.$(LIB_SUFFIX) \
$(NULL)
endif
endif
include $(topsrcdir)/config/rules.mk