| Index: tools/binary_size/run_binary_size_analysis.py | 
| diff --git a/tools/binary_size/run_binary_size_analysis.py b/tools/binary_size/run_binary_size_analysis.py | 
| index 7647a22dcb69b351b429f0e6e35911dd39e1b8be..91f9cf8622585783fdbabb1beafc725654c11035 100755 | 
| --- a/tools/binary_size/run_binary_size_analysis.py | 
| +++ b/tools/binary_size/run_binary_size_analysis.py | 
| @@ -544,6 +544,35 @@ def _find_in_system_path(binary): | 
| return binary_path | 
| return None | 
|  | 
| +def CheckDebugFormatSupport(library, addr2line_binary): | 
| +  """Kills the program if debug data is in an unsupported format. | 
| + | 
| +  There are two common versions of the DWARF debug formats and | 
| +  since we are right now transitioning from DWARF2 to newer formats, | 
| +  it's possible to have a mix of tools that are not compatible. Detect | 
| +  that and abort rather than produce meaningless output.""" | 
| +  tool_output = subprocess.check_output([addr2line_binary, '--version']) | 
| +  version_re = re.compile(r'^GNU [^ ]+ .* (\d+).(\d+).*?$', re.M) | 
| +  parsed_output = version_re.match(tool_output) | 
| +  major = int(parsed_output.group(1)) | 
| +  minor = int(parsed_output.group(2)) | 
| +  supports_dwarf4 = major > 2 or major == 2 and minor > 22 | 
| + | 
| +  if supports_dwarf4: | 
| +    return | 
| + | 
| +  print('Checking version of debug information in %s.' % library) | 
| +  debug_info = subprocess.check_output(['readelf', '--debug-dump=info', | 
| +                                       '--dwarf-depth=1', library]) | 
| +  dwarf_version_re = re.compile(r'^\s+Version:\s+(\d+)$', re.M) | 
| +  parsed_dwarf_format_output = dwarf_version_re.search(debug_info) | 
| +  version = int(parsed_dwarf_format_output.group(1)) | 
| +  if version > 2: | 
| +    print('The supplied tools only support DWARF2 debug data but the binary\n' + | 
| +          'uses DWARF%d. Update the tools or compile the binary\n' % version + | 
| +          'with -gdwarf-2.') | 
| +    sys.exit(1) | 
| + | 
|  | 
| def main(): | 
| usage = """%prog [options] | 
| @@ -638,8 +667,10 @@ def main(): | 
| assert nm_binary, 'Unable to find nm in the path. Use --nm-binary '\ | 
| 'to specify location.' | 
|  | 
| -  print('nm: %s' % nm_binary) | 
| print('addr2line: %s' % addr2line_binary) | 
| +  print('nm: %s' % nm_binary) | 
| + | 
| +  CheckDebugFormatSupport(opts.library, addr2line_binary) | 
|  | 
| symbols = GetNmSymbols(opts.nm_in, opts.nm_out, opts.library, | 
| opts.jobs, opts.verbose is True, | 
|  |