From e333cdebd147cfb056dcf39467d02af4c8ee80d2 Mon Sep 17 00:00:00 2001 From: "ted.mielczarek%gmail.com" Date: Wed, 6 Dec 2006 01:16:05 +0000 Subject: [PATCH] bug 359151 Generate symbol files from pdb if airbag is enabled. r=preed. Use |make splitsymbols| to generate symbols. --- Makefile.in | 16 ++++ toolkit/airbag/tools/make_symbol_store.pl | 107 ++++++++++++++++++++++ toolkit/airbag/tools/upload_symbols.sh | 55 +++++++++++ 3 files changed, 178 insertions(+) create mode 100755 toolkit/airbag/tools/make_symbol_store.pl create mode 100755 toolkit/airbag/tools/upload_symbols.sh diff --git a/Makefile.in b/Makefile.in index 4e1634437f7b..b0e42792362e 100644 --- a/Makefile.in +++ b/Makefile.in @@ -125,6 +125,15 @@ ifdef MOZ_DEBUG_SYMBOLS -cp `/bin/find . -path "./dist" -prune -o -name "*.dll" | sed "s/\.dll$$/\.pdb/" | xargs` $(DIST)/$(BUILDID) -cp `/bin/find . -path "./dist" -prune -o -name "*.exe" | sed "s/\.exe$$/\.pdb/" | xargs` $(DIST)/$(BUILDID) -cp `/bin/find . -path "./dist" -prune -o -name "*.EXE" | sed "s/\.EXE$$/\.pdb/" | xargs` $(DIST)/$(BUILDID) +ifdef MOZ_AIRBAG + echo building airbag symbol store + mkdir -p $(DIST)/airbag-symbols/$(BUILDID) + /bin/find $(DIST)/$(BUILDID)/ -name "*.pdb" | \ + xargs $(topsrcdir)/toolkit/airbag/tools/make_symbol_store.pl -c \ + $(topsrcdir)/toolkit/airbag/tools/win32/dump_syms.exe \ + $(DIST)/airbag-symbols/$(BUILDID) > \ + $(DIST)/airbag-symbols/$(BUILDID)/$(BUILDID)-symbols.txt +endif # MOZ_AIRBAG endif # MOZ_DEBUG_SYMBOLS ifdef MOZ_PROFILE echo splitting symbols out of binaries @@ -136,6 +145,13 @@ ifdef MOZ_PROFILE endif # MOZ_PROFILE endif # MOZILLA_OFFICIAL +uploadsymbols: +ifdef MOZ_DEBUG_SYMBOLS +ifdef MOZ_AIRBAG + $(topsrcdir)/toolkit/airbag/tools/upload_symbols.sh $(DIST)/airbag-symbols/$(BUILDID) +endif +endif + ## XXXvlad -- the test and cp should be removed once bug 249782 is ## completely fixed signnss: diff --git a/toolkit/airbag/tools/make_symbol_store.pl b/toolkit/airbag/tools/make_symbol_store.pl new file mode 100755 index 000000000000..a30c53d92bb2 --- /dev/null +++ b/toolkit/airbag/tools/make_symbol_store.pl @@ -0,0 +1,107 @@ +#!/usr/bin/perl -w +# ***** 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.org code. +# +# The Initial Developer of the Original Code is +# Ted Mielczarek +# Portions created by the Initial Developer are Copyright (C) 2006 +# 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 ***** +# +# Usage: make_symbol_store.pl +# Runs dump_syms on each pdb 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 +# on the command line, so can be called as part of a pipe using +# find -name "*.pdb" | xargs make_symbol_store.pl +# Parameters accepted: +# -c : Copy pdb files to the same directory structure as sym files + +use FileHandle; +use File::Path; +use File::Copy; +use File::Basename; + +print "Usage: make_symbol_store.pl >\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 +sub rename_symbol_file +{ + my ($symbol_file, $dest_path) = @_; + my $fh = FileHandle->new($symbol_file, "r"); + return "" unless $fh; + + my $line = <$fh>; + $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); + 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 $dump_syms = shift; +my $symbol_path = shift; +foreach my $pdbfile (@ARGV) { + my ($sf) = fileparse($pdbfile, ".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 "") { + my $out = $newpath; + $out =~ s/^$symbol_path//; + $out =~ s|^/||; + print "$out/${sf}.pdb\n"; + copy($pdbfile, $newpath); + } +} diff --git a/toolkit/airbag/tools/upload_symbols.sh b/toolkit/airbag/tools/upload_symbols.sh new file mode 100755 index 000000000000..aee73ecbaf1b --- /dev/null +++ b/toolkit/airbag/tools/upload_symbols.sh @@ -0,0 +1,55 @@ +#!/bin/sh +# +# ***** 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.org code. +# +# The Initial Developer of the Original Code is +# Ted Mielczarek +# Portions created by the Initial Developer are Copyright (C) 2006 +# 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 ***** +# +# This script expects the following environment variables to be set: +# AIRBAG_SYMBOL_SERVER : host to upload symbols to +# AIRBAG_SYMBOL_USER : username on that host +# AIRBAG_SYMBOL_PATH : path on that host to put symbols in +# +: ${AIRBAG_SYMBOL_SERVER?} ${AIRBAG_SYMBOL_USER?} ${AIRBAG_SYMBOL_PATH?} ${1?"You must specify a symbol directory to upload"} +PREVD=$PWD +cd $1 +echo "Packing symbols..." +BUILD_ID=`basename $PWD` +tar -cvjf ${BUILD_ID}.tar.bz2 * +echo "Transferring symbols..." +rsync -avvz -e "ssh -2" ${BUILD_ID}.tar.bz2 ${AIRBAG_SYMBOL_USER}@${AIRBAG_SYMBOL_SERVER}:${AIRBAG_SYMBOL_PATH}/ +echo "Unpacking symbols on remote host..." +ssh -2 -l ${AIRBAG_SYMBOL_USER} ${AIRBAG_SYMBOL_SERVER} "cd ${AIRBAG_SYMBOL_PATH}; tar -xvjf ${BUILD_ID}.tar.bz2; rm -fv ${BUILD_ID}.tar.bz2" +echo "Symbol transfer completed" +cd $PREVD