bug 378463 - build time logic to extract debug symbols on OS X. r=mento. second try
authorted.mielczarek@gmail.com
Wed, 02 May 2007 11:45:36 -0700
changeset 1013 14ee1b56f0461c45c19c37ca202836a8d8e4c910
parent 1012 38bb0720f1bbf4447945e3b8d367c6121625592e
child 1014 b2de84743915e7ff521d175d2d187d21cbdf464b
push idunknown
push userunknown
push dateunknown
reviewersmento
bugs378463
milestone1.9a5pre
bug 378463 - build time logic to extract debug symbols on OS X. r=mento. second try
Makefile.in
build/macosx/universal/flight.mk
toolkit/airbag/Makefile.in
toolkit/airbag/airbag/src/common/Makefile.in
toolkit/airbag/airbag/src/common/mac/Makefile.in
toolkit/airbag/airbag/src/tools/mac/dump_syms/Makefile.in
toolkit/airbag/test/Makefile.in
toolkit/airbag/tools/make_symbol_store.pl
toolkit/airbag/tools/win32/dump_syms.exe
toolkit/xre/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
@@ -129,26 +129,49 @@ ifdef MOZ_PROFILE
 	echo splitting symbols out of binaries
 	/bin/find $(DIST) -name "*.dll" -exec splitsym {} \;
 	/bin/find $(DIST) -name "*.exe" -exec splitsym {} \;
 	/bin/find $(DIST) -name "*.EXE" -exec splitsym {} \;
 	mkdir -p $(DIST)/$(BUILDID)
 	/bin/find $(DIST) -name "*.dbg" -exec mv {} $(DIST)/$(BUILDID) \;
 endif # MOZ_PROFILE
 endif # MOZILLA_OFFICIAL
+endif # WINNT
+
+ifeq ($(OS_ARCH),WINNT)
+SYM_FIND_CMD := /bin/find . -path dist -prune -o -name "*.exe" \
+    -o -name "*.dll" -o -name "*.EXE" | sed "s/\.[^\.]*$$/\.pdb/"
+# we want to copy PDB files on Windows
+MAKE_SYM_STORE_ARGS := -c
+DUMP_SYMS_BIN := $(topsrcdir)/toolkit/airbag/tools/win32/dump_syms.exe
+endif
+ifeq ($(OS_ARCH),Darwin)
+# need to pass arch flags for universal builds
+ifdef UNIVERSAL_BINARY
+MAKE_SYM_STORE_ARGS := -a "ppc i386"
+SYM_DIST := $(DIST)/universal
+else
+MAKE_SYM_STORE_ARGS := -a $(OS_TEST)
+SYM_DIST := $(DIST)
+endif
+# |file| is stupid on universal binaries, it produces one line of output
+# for the file, and one line of output for each architecture contained within.
+SYM_FIND_CMD := find -L $(SYM_DIST) -type f -a -perm -100 -o -name "*.dylib" \
+    | xargs file -L | grep "Mach-O" | grep -v "for architecture" | cut -f1 -d':'
+DUMP_SYMS_BIN := $(DIST)/host/bin/dump_syms
+endif
 
 buildsymbols:
 ifdef MOZ_DEBUG_SYMBOLS
 ifdef MOZ_AIRBAG
 	echo building symbol store
 	mkdir -p $(DIST)/crashreporter-symbols/$(BUILDID)
-	/bin/find . -path "./dist" -prune -o -name "*.exe"                \
-          -o -name "*.dll" -o -name "*.EXE" | sed "s/\.[^\.]*$$/\.pdb/" | \
-	  xargs $(topsrcdir)/toolkit/airbag/tools/make_symbol_store.pl -c \
-	  $(topsrcdir)/toolkit/airbag/tools/win32/dump_syms.exe           \
+	$(SYM_FIND_CMD) | \
+	  xargs $(topsrcdir)/toolkit/airbag/tools/make_symbol_store.pl    \
+	  $(MAKE_SYM_STORE_ARGS) $(DUMP_SYMS_BIN)                         \
 	  $(DIST)/crashreporter-symbols/$(BUILDID) >                      \
 	  $(DIST)/crashreporter-symbols/$(BUILDID)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION)-$(OS_ARCH)-$(BUILDID)-symbols.txt
 	echo packing symbols
 	mkdir -p $(topsrcdir)/../$(BUILDID)
 	cd $(DIST)/crashreporter-symbols/$(BUILDID) && \
           zip -r9D ../crashreporter-symbols-$(BUILDID).zip .
 	mv $(DIST)/crashreporter-symbols/crashreporter-symbols-$(BUILDID).zip \
           $(topsrcdir)/../$(BUILDID)
@@ -157,20 +180,21 @@ endif # MOZ_AIRBAG
 
 uploadsymbols:
 ifdef MOZ_DEBUG_SYMBOLS
 ifdef MOZ_AIRBAG
 	$(topsrcdir)/toolkit/airbag/tools/upload_symbols.sh $(topsrcdir)/../$(BUILDID)/crashreporter-symbols-$(BUILDID).zip
 endif
 endif
 
+ifeq ($(OS_ARCH),WINNT)
 signnss:
 ifdef MOZILLA_OFFICIAL
 	echo signing NSS libs
 	cd $(DIST)/bin; ./shlibsign.exe -v -i softokn3.dll
 	cd $(DIST)/bin; ./shlibsign.exe -v -i freebl3.dll
 endif # MOZILLA_OFFICIAL
 
-BUILDID = $(shell cat $(DEPTH)/config/build_number)
 deliver: splitsymbols rebase signnss
 
 endif # WINNT
 
+BUILDID = $(shell cat $(DEPTH)/config/build_number)
--- a/build/macosx/universal/flight.mk
+++ b/build/macosx/universal/flight.mk
@@ -81,19 +81,19 @@ endif # } xulrunner
 endif # } !camino
 
 postflight_all:
 # Build the universal package out of only the bits that would be released.
 # Call the packager to set this up.  Set UNIVERSAL_BINARY= to avoid producing
 # a universal binary too early, before the unified bits have been staged.
 # Set SIGN_NSS= to skip shlibsign.
 	$(MAKE) -C $(OBJDIR_PPC)/$(INSTALLER_DIR) \
-          UNIVERSAL_BINARY= SIGN_NSS= stage-package
+          UNIVERSAL_BINARY= SIGN_NSS= PKG_SKIP_STRIP=1 stage-package
 	$(MAKE) -C $(OBJDIR_X86)/$(INSTALLER_DIR) \
-          UNIVERSAL_BINARY= SIGN_NSS= stage-package
+          UNIVERSAL_BINARY= SIGN_NSS= PKG_SKIP_STRIP=1 stage-package
 # Remove .chk files that may have been copied from the NSS build.  These will
 # cause unify to warn or fail if present.  New .chk files that are
 # appropriate for the merged libraries will be generated when the universal
 # dmg is built.
 	rm -f $(DIST_PPC)/$(MOZ_PKG_APPNAME)/$(APPNAME)/$(APP_CONTENTS)/*.chk \
 	      $(DIST_X86)/$(MOZ_PKG_APPNAME)/$(APPNAME)/$(APP_CONTENTS)/*.chk
 # The only difference betewen the two trees now should be the
 # about:buildconfig page.  Fix it up.
--- a/toolkit/airbag/Makefile.in
+++ b/toolkit/airbag/Makefile.in
@@ -56,19 +56,22 @@ DIRS = \
 
 ifeq  ($(OS_ARCH),WINNT)
 	DIRS += airbag/src/common/windows \
 		airbag/src/client/windows \
 		$(NULL)
 endif
 
 ifeq ($(OS_ARCH),Darwin)
-	DIRS += airbag/src/common/mac \
-		airbag/src/client/mac/handler \
-		$(NULL)
+DIRS += \
+  airbag/src/common/ \
+  airbag/src/common/mac \
+  airbag/src/client/mac/handler \
+  airbag/src/tools/mac/dump_syms \
+  $(NULL)
 endif
 
 DIRS += client
 
 LOCAL_INCLUDES = -I$(srcdir)/airbag/src
 DEFINES += -DUNICODE -D_UNICODE
 
 XPIDLSRCS = \
new file mode 100644
--- /dev/null
+++ b/toolkit/airbag/airbag/src/common/Makefile.in
@@ -0,0 +1,65 @@
+# ***** 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
+# Ted Mielczarek <ted.mielczarek@gmail.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_common
+LIBRARY_NAME	= breakpad_common_s
+HOST_LIBRARY_NAME = host_breakpad_common_s
+
+LOCAL_INCLUDES 	= -I$(srcdir)/..
+
+CPPSRCS	= \
+  string_conversion.cc \
+  $(NULL)
+
+CSRCS = \
+  convert_UTF.c \
+  $(NULL)
+
+HOST_CPPSRCS = $(CPPSRCS)
+
+HOST_CSRCS = $(CSRCS)
+
+# need static lib
+FORCE_STATIC_LIB = 1
+
+include $(topsrcdir)/config/rules.mk
--- a/toolkit/airbag/airbag/src/common/mac/Makefile.in
+++ b/toolkit/airbag/airbag/src/common/mac/Makefile.in
@@ -38,31 +38,36 @@ DEPTH		= ../../../../../..
 topsrcdir	= @top_srcdir@
 srcdir		= @srcdir@
 VPATH		= @srcdir@
 
 include $(DEPTH)/config/autoconf.mk
 
 MODULE		= breakpad_mac_common
 LIBRARY_NAME	= breakpad_mac_common_s
+HOST_LIBRARY_NAME = host_breakpad_mac_common_s
 
 LOCAL_INCLUDES 	= -I$(srcdir)/../..
 
-CPPSRCS		= \
-		file_id.cc \
-		macho_id.cc \
-		macho_walker.cc \
-		string_utilities.cc \
-		../string_conversion.cc \
-		$(NULL)
+# This is a little weird, but we're building a host and a target lib here.
+# The host lib is used for dump_syms, and the target lib for the
+# crash reporter client.  Therefore, we don't need all the srcs in both.
+CPPSRCS	= \
+  file_id.cc \
+  macho_id.cc \
+  macho_walker.cc \
+  string_utilities.cc \
+  $(NULL)
 
-CMSRCS		= \
-		HTTPMultipartUpload.m \
-		$(NULL)
+CMSRCS = \
+  HTTPMultipartUpload.m \
+  $(NULL)
 
-CSRCS           = \
-		../convert_UTF.c
+HOST_CPPSRCS = $(CPPSRCS)
 
+HOST_CMMSRCS = \
+  dump_syms.mm \
+  $(NULL)
 
 # need static lib
 FORCE_STATIC_LIB = 1
 
 include $(topsrcdir)/config/rules.mk
new file mode 100644
--- /dev/null
+++ b/toolkit/airbag/airbag/src/tools/mac/dump_syms/Makefile.in
@@ -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
+# Ted Mielczarek <ted.mielczarek@gmail.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/mac \
+  $(NULL)
+
+HOST_CMSRCS = \
+  dump_syms_tool.m \
+  $(NULL)
+
+HOST_LIBS += \
+  $(DEPTH)/toolkit/airbag/airbag/src/common/mac/$(LIB_PREFIX)host_breakpad_mac_common_s.$(LIB_SUFFIX) \
+  $(DEPTH)/toolkit/airbag/airbag/src/common/$(LIB_PREFIX)host_breakpad_common_s.$(LIB_SUFFIX) \
+  $(NULL)
+
+HOST_LDFLAGS += \
+  -framework Foundation \
+  -lcrypto \
+  $(NULL)
+
+# force C++ linking
+CPP_PROG_LINK = 1
+
+include $(topsrcdir)/config/rules.mk
--- a/toolkit/airbag/test/Makefile.in
+++ b/toolkit/airbag/test/Makefile.in
@@ -73,16 +73,17 @@ LIBS += \
 LIBS += $(call expand_libname shell32)
 OS_LIBS += $(call EXPAND_LIBNAME,ole32)
 endif
 
 ifeq ($(OS_ARCH),Darwin)
 OS_LIBS += -framework Cocoa -lcrypto
 LIBS += \
 	$(DEPTH)/toolkit/airbag/airbag/src/client/mac/handler/$(LIB_PREFIX)exception_handler_s.$(LIB_SUFFIX) \
+	$(DEPTH)/toolkit/airbag/airbag/src/common/$(LIB_PREFIX)breakpad_common_s.$(LIB_SUFFIX) \
 	$(DEPTH)/toolkit/airbag/airbag/src/common/mac/$(LIB_PREFIX)breakpad_mac_common_s.$(LIB_SUFFIX) \
 	$(NULL)
 LOCAL_INCLUDES += -I$(srcdir) -I$(srcdir)/../airbag/src/common/mac/
 endif
 
 ifndef MOZ_ENABLE_LIBXUL
 check:: $(PROGRAM)
 	$(RUN_TEST_PROGRAM) $(DIST)/bin/TestCrashReporterAPI
--- a/toolkit/airbag/tools/make_symbol_store.pl
+++ b/toolkit/airbag/tools/make_symbol_store.pl
@@ -30,79 +30,99 @@
 # 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 *****
 #
-# Usage: make_symbol_store.pl <params> <dump_syms path> <symbol store path> <pdb files>
-#   Runs dump_syms on each pdb file specified on the command line,
+# Usage: make_symbol_store.pl <params> <dump_syms path> <symbol store path>
+#                             <debug info files>
+#   Runs dump_syms on each debug info file specified on the command line,
 #   then places the resulting symbol file in the proper directory
-#   structure in the symbol store path.  Accepts multiple pdb files
+#   structure in the symbol store path.  Accepts multiple files
 #   on the command line, so can be called as part of a pipe using
-#   find <dir> -name "*.pdb" | xargs make_symbol_store.pl <dump_syms> <storepath>
+#   find <dir> | xargs make_symbol_store.pl <dump_syms> <storepath>
 #   Parameters accepted:
-#     -c : Copy pdb files to the same directory structure as sym files
+#     -c           : Copy debug info files to the same directory structure
+#                    as sym files
+#     -a "<archs>" : Run dump_syms -a <arch> for each space separated
+#                    cpu architecture in <archs> (only on OS X)
 
 use FileHandle;
 use File::Path;
 use File::Copy;
 use File::Basename;
 
-print "Usage: make_symbol_store.pl <dump_syms path> <storepath> <pdb files>>\n" and exit if scalar @ARGV < 3;
+print "Usage: make_symbol_store.pl <params>" .
+  "<dump_syms path> <storepath> <debug info files>\n"
+  and exit if scalar @ARGV < 3;
 
 # Given a symbol file generated by dump_syms,
 # and a directory to store the resulting symbol path,
 # move the symbol file into the directory structure
-# expected by the airbag processor:
-# file.pdb/GUID+age/file.sym
+# expected by the breakpad processor.  For details, see:
+# http://google-breakpad.googlecode.com/svn/trunk/src/processor/simple_symbol_supplier.h
 sub rename_symbol_file
 {
     my ($symbol_file, $dest_path) = @_;
     my $fh = FileHandle->new($symbol_file, "r");
     return "" unless $fh;
 
     my $line = <$fh>;
+    return "" unless $line;
     $line =~ s/\s*$//;
     $fh->close();
     return "" unless $line =~ m/^MODULE/;
 
-    my ($guid,$age,$dbgfile) = (split(/ +/, $line))[1..3];
-    $guid =~ s/\-//g;
-    my $newpath = $dest_path . "/" . $dbgfile . "/" . uc($guid . $age);
+    # the first line of a sym file looks like:
+    # MODULE os cpu identifier debug_file
+    my ($guid,$dbgfile) = (split(/ +/, $line))[3..4];
+    my $newpath = $dest_path . "/" . $dbgfile . "/" . $guid;
     eval { mkpath($newpath) };
     return "" if $@;
 
     if(move($symbol_file, $newpath)) {
         my $out = $newpath;
         my ($f) = fileparse($symbol_file);
         $out =~ s/^$dest_path//;
         $out =~ s|^/||;
         print "$out/$f\n";
         return $newpath;
     }
 
     return "";
 }
 
-my $copy_pdbs = 0;
-if($ARGV[0] eq '-c') {
-    $copy_pdbs = 1;
-    shift;
+my $copy_dbg = 0;
+my @archs = ('');
+while (@ARGV && $ARGV[0] =~ m/^-/) {
+    my $arg = shift;
+    if ($arg eq '-c') {
+        $copy_dbg = 1;
+    }
+    elsif ($arg eq '-a') {
+        @archs = (split(/\s+/, shift));
+    }
 }
+
 my $dump_syms = shift;
 my $symbol_path = shift;
-foreach my $pdbfile (@ARGV) {
-    next unless -f $pdbfile;
-    my ($sf) = fileparse($pdbfile, ".pdb");
+foreach my $dbgfile (@ARGV) {
+    next unless -f $dbgfile;
+    # get filename without path or .pdb extension, if it exists
+    my ($sf) = fileparse($dbgfile, ".pdb");
     my $symfile = $symbol_path . "/" . $sf . ".sym";
-    system("$dump_syms $pdbfile > $symfile");
-    my $newpath = rename_symbol_file $symfile, $symbol_path;
-    if($copy_pdbs && $newpath ne "") {
+    foreach my $arch (@archs) {
+      my $a = '';
+      $a = "-a $arch" if $arch ne '';
+      system("${dump_syms} ${a} ${dbgfile} > ${symfile}");
+      my $newpath = rename_symbol_file $symfile, $symbol_path;
+      if ($copy_dbg && $newpath ne "") {
         my $out = $newpath;
         $out =~ s/^$symbol_path//;
         $out =~ s|^/||;
         print "$out/${sf}.pdb\n";
-        copy($pdbfile, $newpath);
+        copy($dbgfile, $newpath);
+      }
     }
 }
index 0705ac8b07a62d55cb4bb3baa66e2f3854727a24..d7eeca4c07e6c7ae4f7c208e6d11454e0872cb6e
GIT binary patch
literal 18432
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
--- a/toolkit/xre/Makefile.in
+++ b/toolkit/xre/Makefile.in
@@ -195,16 +195,17 @@ ifeq ($(OS_ARCH),WINNT)
 SHARED_LIBRARY_LIBS += \
 	$(DEPTH)/toolkit/airbag/airbag/src/client/windows/handler/$(LIB_PREFIX)exception_handler_s.$(LIB_SUFFIX) \
 	$(DEPTH)/toolkit/airbag/airbag/src/common/windows/$(LIB_PREFIX)breakpad_windows_common_s.$(LIB_SUFFIX)
 endif
 
 ifeq ($(OS_ARCH),Darwin)
 SHARED_LIBRARY_LIBS += \
 	$(DEPTH)/toolkit/airbag/airbag/src/client/mac/handler/$(LIB_PREFIX)exception_handler_s.$(LIB_SUFFIX) \
+	$(DEPTH)/toolkit/airbag/airbag/src/common/$(LIB_PREFIX)breakpad_common_s.$(LIB_SUFFIX) \
 	$(DEPTH)/toolkit/airbag/airbag/src/common/mac/$(LIB_PREFIX)breakpad_mac_common_s.$(LIB_SUFFIX)
 endif
 endif
 
 include $(topsrcdir)/config/rules.mk
 
 ifdef BUILD_STATIC_LIBS
 export::