Index: tracing/bin/symbolize_trace |
diff --git a/tracing/bin/symbolize_trace b/tracing/bin/symbolize_trace |
index adb26739cce3c75165c50ab153e0cb2cde19d0c3..9b1e4a56fb256b22e09819e79e8c78c26c2a1292 100755 |
--- a/tracing/bin/symbolize_trace |
+++ b/tracing/bin/symbolize_trace |
@@ -23,6 +23,7 @@ sys.path.append(_SYMBOLS_PATH) |
import symbols.elf_symbolizer as elf_symbolizer |
import symbolize_trace_atos_regex |
+import symbolize_trace_macho_reader |
# Relevant trace event phases from Chromium's |
@@ -95,8 +96,13 @@ class Symbolizer(object): |
# 16 for the address, 2 for "0x", 1 for the space |
chars_per_address = 19 |
+ load_address = (symbolize_trace_macho_reader. |
+ ReadMachOTextLoadAddress(symfile.symbolizable_path)) |
+ assert load_address is not None |
+ |
cmd_base = [self.symbolizer_path, '-arch', 'x86_64', '-l', |
- '0x0', '-o' , symfile.symbolizable_path] |
+ '0x%x' % load_address, '-o', |
+ symfile.symbolizable_path] |
chars_for_other_arguments = len(' '.join(cmd_base)) + 1 |
# The maximum number of inputs that can be processed at once is limited by |
@@ -110,10 +116,12 @@ class Symbolizer(object): |
keys_to_process = all_keys[0:input_count] |
cmd = list(cmd_base) |
- cmd.extend([hex(int(x)) for x in keys_to_process]) |
+ cmd.extend([hex(int(x) + load_address) |
+ for x in keys_to_process]) |
output_array = subprocess.check_output(cmd).split('\n') |
for i in range(len(keys_to_process)): |
- for frame in symfile.frames_by_address.values()[i + processed_keys_count]: |
+ for frame in (symfile.frames_by_address.values() |
+ [i + processed_keys_count]): |
frame.name = self._matcher.Match(output_array[i]) |
processed_keys_count += len(keys_to_process) |
all_keys = all_keys[input_count:] |