Index: build/linux/dump_signature.py |
diff --git a/build/linux/dump_signature.py b/build/linux/dump_signature.py |
index 9ba865acbb3e61ca610a66f7d463143b990ddea4..63180d07b4a1275f993690ba54d5b35c28c38037 100755 |
--- a/build/linux/dump_signature.py |
+++ b/build/linux/dump_signature.py |
@@ -1,20 +1,40 @@ |
-#!/usr/bin/python2.4 |
+#!/usr/bin/python |
# |
# Copyright (c) 2009 The Chromium Authors. All rights reserved. |
Lei Zhang
2010/04/05 22:57:50
nit: 2010
agl
2010/04/05 23:04:17
Done.
|
# 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 |
+# src/breakpad/src/common/linux/file_id.cc@461 |
import sys |
import struct |
Lei Zhang
2010/04/05 22:57:50
nit: struct then sys. (this is my fault)
agl
2010/04/05 23:04:17
Done.
|
+import subprocess |
if len(sys.argv) != 2: |
sys.stderr.write("Error, no filename specified.\n") |
sys.exit(1) |
+# Shell out to objdump to get the offset of the .text section |
+objdump = subprocess.Popen(['objdump', '-h', sys.argv[1]], stdout = subprocess.PIPE) |
+(sections, _) = objdump.communicate() |
+if objdump.returncode != 0: |
+ sys.stderr.write('Failed to run objdump to find .text section.\n') |
+ sys.exit(1) |
+ |
+text_section = [x for x in sections.split('\n') if '.text' in x] |
Lei Zhang
2010/04/05 22:57:50
text_section = [x for x in sections.splitlines() i
agl
2010/04/05 23:04:17
Done.
|
+if len(text_section) == 0: |
+ sys.stderr.write('objdump failed to find a .text section.\n') |
+ sys.exit(1) |
+text_section = text_section[0] |
+file_offset = int(text_section.split()[5], 16) |
Lei Zhang
2010/04/05 22:57:50
can you put this in a try: except ValueError block
agl
2010/04/05 23:04:17
Done.
|
+ |
bin = open(sys.argv[1]) |
+bin.seek(file_offset) |
+if bin.tell() != file_offset: |
+ sys.stderr.write("Failed to seek to the .text segment. Truncated file?\n"); |
+ sys.exit(1) |
+ |
data = bin.read(4096) |
if len(data) != 4096: |
sys.stderr.write("Error, did not read first page of data.\n"); |