Extract breakpad symbol files for Linux official builds.

These are archived and submitted to the crash server by the official builder
(coming in a separate buildbot CL).

Review URL: http://codereview.chromium.org/126015


git-svn-id: http://src.chromium.org/svn/trunk/src/build@18286 4ff67af0-8c30-449e-8e8b-ad334ec8d88c
This commit is contained in:
mmoss@chromium.org 2009-06-12 17:19:16 +00:00
Родитель f46e271515
Коммит 407db10a78
2 изменённых файлов: 75 добавлений и 0 удалений

44
linux/dump_app_syms Executable file
Просмотреть файл

@ -0,0 +1,44 @@
#!/bin/sh
# Copyright (c) 2009 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
#
# Helper script to run dump_syms on Chrome Linux executables and "fixup" the
# generated sigs (due to changes to the binary from stripping).
set -e
usage() {
echo "$0 <dump_syms_exe> <binary_with_symbols> <symbols_output>"
}
if [ $# -ne 3 ]; then
usage
exit 1
fi
SCRIPTDIR="$(readlink -f "$(dirname "$0")")"
DUMPSYMS="$1"
INFILE="$2"
OUTFILE="$3"
STRIPPED=$(mktemp -q -t stripped-XXXXX)
if [ $? -ne 0 ]; then
echo "ERROR: Could not create temp stripped '$INFILE'"
exit 1
fi
# Dump the symbols from the given binary.
"$DUMPSYMS" "$INFILE" > "$OUTFILE"
# Strip the binary and calculate the signature of that, since that's what ships.
strip "$INFILE" -o "$STRIPPED"
NEWSIG=$("$SCRIPTDIR/dump_signature.py" "$STRIPPED")
rm "$STRIPPED"
# Replace the old signature with the stripped signature in the symbols file.
INFILE_BASE=$(basename "$INFILE")
sed -i "1s/[0-9A-F]* $INFILE_BASE/$NEWSIG $INFILE_BASE/" "$OUTFILE"

31
linux/dump_signature.py Executable file
Просмотреть файл

@ -0,0 +1,31 @@
#!/usr/bin/python2.4
#
# Copyright (c) 2009 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
#
# This generates symbol signatures with the same algorithm as
# src/breakpad/linux/minidump_writer.cc@17081
import sys
if len(sys.argv) != 2:
sys.stderr.write("Error, no filename specified.\n")
sys.exit(1)
bin = open(sys.argv[1])
data = bin.read(4096)
if len(data) != 4096:
sys.stderr.write("Error, did not read first page of data.\n");
bin.close()
signature = [0] * 16
for i in range(0, 4096):
signature[i % 16] ^= ord(data[i])
out = ''
# Assume we're running on little endian
for i in [3, 2, 1, 0, 5, 4, 7, 6, 8, 9, 10, 11, 12, 13, 14, 15]:
out += '%02X' % signature[i]
out += '0'
sys.stdout.write(out)