示例#1
0
def _extract_symbols_from_one_binary(binary):
  # If the marker is already written, we should already have the
  # extracted symbols.
  marker_path = _get_symbol_marker(binary)
  if os.path.exists(marker_path):
    logging.info('Skip extracting symbols from: %s' % binary)
    return

  logging.info('Extracting symbols from: %s' % binary)
  dump_syms_tool = build_common.get_build_path_for_executable(
      'dump_syms', is_host=True)
  p = concurrent_subprocess.Popen([dump_syms_tool, binary])
  my_filter = _DumpSymsFilter()
  p.handle_output(my_filter)
  syms = ''.join(my_filter.stdout_result)
  # The first line should look like:
  # MODULE Linux arm 0222CE01F27D6870B1FA991F84B9E0460 libc.so
  symhash = syms.splitlines()[0].split()[3]
  base = os.path.basename(binary)
  sympath = os.path.join(_SYMBOL_OUT_DIR, base, symhash, base + '.sym')
  file_util.makedirs_safely(os.path.dirname(sympath))

  with open(sympath, 'w') as f:
    f.write(syms)

  # Create the marker directory so we will not need to extract symbols
  # in the next time.
  file_util.makedirs_safely(marker_path)
示例#2
0
文件: toolchain.py 项目: zhangpf/arc
def _get_tool_map():
    android_build_tools_dir = _get_android_build_tools_dir()
    android_sdk_build_tools_dir = get_android_sdk_build_tools_dir()

    return {
        'host': {
            'cxx': os.getenv('HOSTCXX', 'g++'),
            'cc': os.getenv('HOSTCC', 'gcc'),
            'asm': os.getenv('HOSTCC', 'gcc'),
            'ld': os.getenv('HOSTLD', 'g++'),
            'ar': os.getenv('HOSTAR', 'ar'),
            'nm': os.getenv('HOSTNM', 'nm'),
            'objcopy': os.getenv('HOSTOBJCOPY', 'objcopy'),
            'objdump': os.getenv('HOSTOBJDUMP', 'objdump'),
            'addr2line': os.getenv('HOSTADDR2LINE', 'addr2line'),
            'strip': os.getenv('HOSTSTRIP', 'strip'),
            'runner': _get_native_runner('host'),
            'valgrind_runner': _get_valgrind_runner('host'),
            'gdb': 'gdb',
            'create_nmf': _get_create_nmf(),
            'deps': [],
            'adb': _get_adb_path_for_localhost(),
            'clangxx': os.path.join(_CLANG_BIN_DIR, 'clang++'),
            'clang': os.path.join(_CLANG_BIN_DIR, 'clang'),
        },
        'nacl_i686': {
            'cxx':
            (os.path.join(get_nacl_toolchain_path(), 'x86_64-nacl-g++') +
             ' -m32'),
            'cc': (os.path.join(get_nacl_toolchain_path(), 'x86_64-nacl-gcc') +
                   ' -m32'),
            'asm':
            os.path.join(_PNACL_BIN_PATH, 'i686-nacl-clang'),
            'ld':
            os.path.join(get_nacl_toolchain_path(), 'i686-nacl-g++'),
            'ar':
            os.path.join(_PNACL_BIN_PATH, 'i686-nacl-ar'),
            'nm':
            os.path.join(_PNACL_BIN_PATH, 'i686-nacl-nm'),
            'objcopy':
            os.path.join(_PNACL_BIN_PATH, 'i686-nacl-objcopy'),
            'objdump':
            os.path.join(_PNACL_BIN_PATH, 'i686-nacl-objdump'),
            'addr2line':
            os.path.join(_PNACL_BIN_PATH, 'i686-nacl-addr2line'),
            'strip':
            os.path.join(_PNACL_BIN_PATH, 'i686-nacl-strip'),
            'runner':
            ' '.join(get_nacl_runner(32)),
            'runner_without_test_library':
            ' '.join(get_nacl_runner(32, use_test_library=False)),
            # The target does not support Valgrind. Use nacl_runner.
            'valgrind_runner':
            ' '.join(get_nacl_runner(32)),
            'valgrind_runner_without_test_library':
            ' '.join(get_nacl_runner(32, use_test_library=False)),
            'ncval':
            os.path.join(_NACL_TOOLS_PATH, 'ncval'),
            'gdb':
            os.path.join(get_nacl_toolchain_path(), 'i686-nacl-gdb'),
            'irt':
            'nacl_irt_x86_32.nexe',
            'deps': [_NACL_DEPS_PATH],
            'llvm_tblgen':
            build_common.get_build_path_for_executable('llvm-tblgen',
                                                       is_host=True),
            'clangxx':
            os.path.join(_PNACL_BIN_PATH, 'i686-nacl-clang++'),
            'clang':
            os.path.join(_PNACL_BIN_PATH, 'i686-nacl-clang'),
        },
        'nacl_x86_64': {
            'cxx':
            os.path.join(get_nacl_toolchain_path(), 'x86_64-nacl-g++'),
            'cc':
            os.path.join(get_nacl_toolchain_path(), 'x86_64-nacl-gcc'),
            'ld':
            os.path.join(get_nacl_toolchain_path(), 'x86_64-nacl-g++'),
            'asm':
            os.path.join(_PNACL_BIN_PATH, 'x86_64-nacl-clang'),
            'ar':
            os.path.join(_PNACL_BIN_PATH, 'x86_64-nacl-ar'),
            'nm':
            os.path.join(_PNACL_BIN_PATH, 'x86_64-nacl-nm'),
            'objcopy':
            os.path.join(_PNACL_BIN_PATH, 'x86_64-nacl-objcopy'),
            'objdump':
            os.path.join(_PNACL_BIN_PATH, 'x86_64-nacl-objdump'),
            'addr2line':
            os.path.join(_PNACL_BIN_PATH, 'x86_64-nacl-addr2line'),
            'strip':
            os.path.join(_PNACL_BIN_PATH, 'x86_64-nacl-strip'),
            'runner':
            ' '.join(get_nacl_runner(64)),
            'runner_without_test_library':
            ' '.join(get_nacl_runner(64, use_test_library=False)),
            # The target does not support Valgrind. Use nacl_runner.
            'valgrind_runner':
            ' '.join(get_nacl_runner(64)),
            'valgrind_runner_without_test_library':
            ' '.join(get_nacl_runner(64, use_test_library=False)),
            'ncval':
            os.path.join(_NACL_TOOLS_PATH, 'ncval'),
            'gdb':
            os.path.join(get_nacl_toolchain_path(), 'x86_64-nacl-gdb'),
            'irt':
            'nacl_irt_x86_64.nexe',
            'deps': [_NACL_DEPS_PATH],
            'llvm_tblgen':
            build_common.get_build_path_for_executable('llvm-tblgen',
                                                       is_host=True),
            'clangxx':
            os.path.join(_PNACL_BIN_PATH, 'x86_64-nacl-clang++'),
            'clang':
            os.path.join(_PNACL_BIN_PATH, 'x86_64-nacl-clang'),
        },
        'bare_metal_i686': {
            'cxx':
            os.getenv('TARGETCXX', 'g++-4.8'),
            'cc':
            os.getenv('TARGETCC', 'gcc-4.8'),
            'asm':
            os.getenv('TARGETCC', 'gcc-4.8'),
            'clangxx':
            os.path.join(_CLANG_BIN_DIR, 'clang++'),
            'clang':
            os.path.join(_CLANG_BIN_DIR, 'clang'),
            'ld':
            os.getenv('TARGETLD', 'g++-4.8'),
            'ar':
            os.getenv('TARGETAR', 'ar'),
            'nm':
            os.getenv('TARGETNM', 'nm'),
            'objcopy':
            os.getenv('TARGETOBJCOPY', 'objcopy'),
            'objdump':
            os.getenv('TARGETOBJDUMP', 'objdump'),
            'addr2line':
            os.getenv('TARGETADDR2LINE', 'addr2line'),
            'strip':
            os.getenv('TARGETSTRIP', 'strip'),
            'runner':
            ' '.join(get_bare_metal_runner('x86_32')),
            'runner_without_test_library':
            ' '.join(get_bare_metal_runner('x86_32', use_test_library=False)),
            'valgrind_runner':
            _get_valgrind_runner('bare_metal_i686', nacl_arch='x86_32'),
            'valgrind_runner_without_test_library':
            _get_valgrind_runner('bare_metal_i686',
                                 use_test_library=False,
                                 nacl_arch='x86_32'),
            'gdb':
            'gdb',
            'deps': [],
            'llvm_tblgen':
            build_common.get_build_path_for_executable('llvm-tblgen',
                                                       is_host=True),
        },
        'bare_metal_arm': {
            'cxx':
            os.getenv('TARGETCXX', ' arm-linux-gnueabihf-g++'),
            'cc':
            os.getenv('TARGETCC', ' arm-linux-gnueabihf-gcc'),
            'asm':
            os.getenv('TARGETCC', ' arm-linux-gnueabihf-gcc'),
            'clangxx':
            os.path.join(_CLANG_BIN_DIR, 'clang++'),
            'clang':
            os.path.join(_CLANG_BIN_DIR, 'clang'),
            'clang.ld':
            os.path.join(_CLANG_BIN_DIR, 'clang'),
            'ld':
            os.getenv('TARGETLD', 'arm-linux-gnueabihf-g++'),
            'ar':
            os.getenv('TARGETAR', 'arm-linux-gnueabihf-ar'),
            'nm':
            os.getenv('TARGETNM', 'arm-linux-gnueabihf-nm'),
            'objcopy':
            os.getenv('TARGETOBJCOPY', 'arm-linux-gnueabihf-objcopy'),
            'objdump':
            os.getenv('TARGETOBJDUMP', 'arm-linux-gnueabihf-objdump'),
            'addr2line':
            os.getenv('TARGETADDR2LINE', 'arm-linux-gnueabihf-addr2line'),
            'strip':
            os.getenv('TARGETSTRIP', 'arm-linux-gnueabihf-strip'),
            'runner':
            ' '.join(get_bare_metal_runner('arm', use_qemu_arm=True)),
            'runner_without_test_library':
            ' '.join(
                get_bare_metal_runner('arm',
                                      use_qemu_arm=True,
                                      use_test_library=False)),
            # We do not support valgrind on Bare Metal ARM.
            'valgrind_runner':
            ' '.join(get_bare_metal_runner('arm', use_qemu_arm=True)),
            'valgrind_runner_without_test_library':
            ' '.join(
                get_bare_metal_runner(use_qemu_arm=True,
                                      use_test_library=False)),
            'gdb':
            build_common.get_gdb_multiarch_path(),
            'deps': [],
            'llvm_tblgen':
            build_common.get_build_path_for_executable('llvm-tblgen',
                                                       is_host=True),
        },
        'java': {
            'aapt':
            os.getenv('AAPT', os.path.join(android_sdk_build_tools_dir,
                                           'aapt')),
            'aidl':
            os.path.join(android_sdk_build_tools_dir, 'aidl'),
            'dx':
            os.getenv('DX', os.path.join(android_sdk_build_tools_dir, 'dx')),
            'deps': [],
            'dex2oat':
            build_common.get_build_path_for_executable(
                'dex2oatd' if OPTIONS.is_debug_code_enabled() else 'dex2oat',
                is_host=True),
            'dexdump':
            os.path.join(android_sdk_build_tools_dir, 'dexdump'),
            'java-event-log-tags':
            os.path.join(android_build_tools_dir, 'java-event-log-tags.py'),
            'jar':
            _get_java_command('jar'),
            'jarjar':
            os.getenv('JARJAR',
                      os.path.join(_DEXMAKER_PATH, 'lib', 'jarjar.jar')),
            'java':
            _get_java_command('java'),
            'javac':
            _get_java_command('javac'),
            'runner':
            _get_native_runner('java'),
            'zipalign':
            os.path.join(android_sdk_build_tools_dir, 'zipalign'),
        },
    }
示例#3
0
文件: toolchain.py 项目: epowers/arc
def _get_tool_map():
  android_build_tools_dir = _get_android_build_tools_dir()
  android_sdk_build_tools_dir = get_android_sdk_build_tools_dir()

  return {
      'host': {
          'cxx': os.getenv('HOSTCXX', 'g++'),
          'cc': os.getenv('HOSTCC', 'gcc'),
          'asm': os.getenv('HOSTCC', 'gcc'),
          'ld': os.getenv('HOSTLD', 'g++'),
          'ar': os.getenv('HOSTAR', 'ar'),
          'nm': os.getenv('HOSTNM', 'nm'),
          'objcopy': os.getenv('HOSTOBJCOPY', 'objcopy'),
          'objdump': os.getenv('HOSTOBJDUMP', 'objdump'),
          'addr2line': os.getenv('HOSTADDR2LINE', 'addr2line'),
          'strip': os.getenv('HOSTSTRIP', 'strip'),
          'runner': _get_native_runner('host'),
          'valgrind_runner': _get_valgrind_runner('host'),
          'gdb': 'gdb',
          'create_nmf': _get_create_nmf(),
          'deps': [],
          'adb': _get_adb_path_for_localhost(),
          'clangxx': os.path.join(_CLANG_BIN_DIR, 'clang++'),
          'clang': os.path.join(_CLANG_BIN_DIR, 'clang'),
      },
      'nacl_i686': {
          'cxx': (os.path.join(get_nacl_toolchain_path(), 'x86_64-nacl-g++') +
                  ' -m32'),
          'cc': (os.path.join(get_nacl_toolchain_path(), 'x86_64-nacl-gcc') +
                 ' -m32'),
          'asm': os.path.join(_PNACL_BIN_PATH, 'i686-nacl-clang'),
          'ld': os.path.join(get_nacl_toolchain_path(), 'i686-nacl-g++'),
          'ar': os.path.join(_PNACL_BIN_PATH, 'i686-nacl-ar'),
          'nm': os.path.join(_PNACL_BIN_PATH, 'i686-nacl-nm'),
          'objcopy': os.path.join(_PNACL_BIN_PATH, 'i686-nacl-objcopy'),
          'objdump': os.path.join(_PNACL_BIN_PATH, 'i686-nacl-objdump'),
          'addr2line': os.path.join(_PNACL_BIN_PATH, 'i686-nacl-addr2line'),
          'strip': os.path.join(_PNACL_BIN_PATH, 'i686-nacl-strip'),
          'runner': ' '.join(get_nacl_runner(32)),
          'runner_without_test_library': ' '.join(
              get_nacl_runner(32, use_test_library=False)),
          # The target does not support Valgrind. Use nacl_runner.
          'valgrind_runner': ' '.join(get_nacl_runner(32)),
          'valgrind_runner_without_test_library': ' '.join(
              get_nacl_runner(32, use_test_library=False)),
          'ncval': os.path.join(_NACL_TOOLS_PATH, 'ncval'),
          'gdb': os.path.join(get_nacl_toolchain_path(), 'i686-nacl-gdb'),
          'irt': 'nacl_irt_x86_32.nexe',
          'deps': [_NACL_DEPS_PATH],
          'llvm_tblgen': build_common.get_build_path_for_executable(
              'llvm-tblgen', is_host=True),
          'clangxx': os.path.join(_PNACL_BIN_PATH, 'i686-nacl-clang++'),
          'clang': os.path.join(_PNACL_BIN_PATH, 'i686-nacl-clang'),
      },
      'nacl_x86_64': {
          'cxx': os.path.join(get_nacl_toolchain_path(), 'x86_64-nacl-g++'),
          'cc': os.path.join(get_nacl_toolchain_path(), 'x86_64-nacl-gcc'),
          'ld': os.path.join(get_nacl_toolchain_path(), 'x86_64-nacl-g++'),
          'asm': os.path.join(_PNACL_BIN_PATH, 'x86_64-nacl-clang'),
          'ar': os.path.join(_PNACL_BIN_PATH, 'x86_64-nacl-ar'),
          'nm': os.path.join(_PNACL_BIN_PATH, 'x86_64-nacl-nm'),
          'objcopy': os.path.join(_PNACL_BIN_PATH, 'x86_64-nacl-objcopy'),
          'objdump': os.path.join(_PNACL_BIN_PATH, 'x86_64-nacl-objdump'),
          'addr2line': os.path.join(_PNACL_BIN_PATH, 'x86_64-nacl-addr2line'),
          'strip': os.path.join(_PNACL_BIN_PATH, 'x86_64-nacl-strip'),
          'runner': ' '.join(get_nacl_runner(64)),
          'runner_without_test_library': ' '.join(
              get_nacl_runner(64, use_test_library=False)),
          # The target does not support Valgrind. Use nacl_runner.
          'valgrind_runner': ' '.join(get_nacl_runner(64)),
          'valgrind_runner_without_test_library': ' '.join(
              get_nacl_runner(64, use_test_library=False)),
          'ncval': os.path.join(_NACL_TOOLS_PATH, 'ncval'),
          'gdb': os.path.join(get_nacl_toolchain_path(), 'x86_64-nacl-gdb'),
          'irt': 'nacl_irt_x86_64.nexe',
          'deps': [_NACL_DEPS_PATH],
          'llvm_tblgen': build_common.get_build_path_for_executable(
              'llvm-tblgen', is_host=True),
          'clangxx': os.path.join(_PNACL_BIN_PATH, 'x86_64-nacl-clang++'),
          'clang': os.path.join(_PNACL_BIN_PATH, 'x86_64-nacl-clang'),
      },
      'bare_metal_i686': {
          'cxx': os.getenv('TARGETCXX', 'g++-4.8'),
          'cc': os.getenv('TARGETCC', 'gcc-4.8'),
          'asm': os.getenv('TARGETCC', 'gcc-4.8'),
          'clangxx': os.path.join(_CLANG_BIN_DIR, 'clang++'),
          'clang': os.path.join(_CLANG_BIN_DIR, 'clang'),
          'ld': os.getenv('TARGETLD', 'g++-4.8'),
          'ar': os.getenv('TARGETAR', 'ar'),
          'nm': os.getenv('TARGETNM', 'nm'),
          'objcopy': os.getenv('TARGETOBJCOPY', 'objcopy'),
          'objdump': os.getenv('TARGETOBJDUMP', 'objdump'),
          'addr2line': os.getenv('TARGETADDR2LINE', 'addr2line'),
          'strip': os.getenv('TARGETSTRIP', 'strip'),
          'runner': ' '.join(get_bare_metal_runner('x86_32')),
          'runner_without_test_library': ' '.join(
              get_bare_metal_runner('x86_32', use_test_library=False)),
          'valgrind_runner': _get_valgrind_runner('bare_metal_i686',
                                                  nacl_arch='x86_32'),
          'valgrind_runner_without_test_library': _get_valgrind_runner(
              'bare_metal_i686', use_test_library=False, nacl_arch='x86_32'),
          'gdb': 'gdb',
          'deps': [],
          'llvm_tblgen': build_common.get_build_path_for_executable(
              'llvm-tblgen', is_host=True),
      },
      'bare_metal_arm': {
          'cxx': os.getenv('TARGETCXX', ' arm-linux-gnueabihf-g++'),
          'cc': os.getenv('TARGETCC', ' arm-linux-gnueabihf-gcc'),
          'asm': os.getenv('TARGETCC', ' arm-linux-gnueabihf-gcc'),
          'clangxx': os.path.join(_CLANG_BIN_DIR, 'clang++'),
          'clang': os.path.join(_CLANG_BIN_DIR, 'clang'),
          'clang.ld': os.path.join(_CLANG_BIN_DIR, 'clang'),
          'ld': os.getenv('TARGETLD', 'arm-linux-gnueabihf-g++'),
          'ar': os.getenv('TARGETAR', 'arm-linux-gnueabihf-ar'),
          'nm': os.getenv('TARGETNM', 'arm-linux-gnueabihf-nm'),
          'objcopy': os.getenv('TARGETOBJCOPY', 'arm-linux-gnueabihf-objcopy'),
          'objdump': os.getenv('TARGETOBJDUMP', 'arm-linux-gnueabihf-objdump'),
          'addr2line': os.getenv('TARGETADDR2LINE',
                                 'arm-linux-gnueabihf-addr2line'),
          'strip': os.getenv('TARGETSTRIP', 'arm-linux-gnueabihf-strip'),
          'runner': ' '.join(get_bare_metal_runner('arm', use_qemu_arm=True)),
          'runner_without_test_library': ' '.join(
              get_bare_metal_runner('arm', use_qemu_arm=True,
                                    use_test_library=False)),
          # We do not support valgrind on Bare Metal ARM.
          'valgrind_runner': ' '.join(get_bare_metal_runner(
              'arm', use_qemu_arm=True)),
          'valgrind_runner_without_test_library': ' '.join(
              get_bare_metal_runner(use_qemu_arm=True, use_test_library=False)),
          'gdb': build_common.get_gdb_multiarch_path(),
          'deps': [],
          'llvm_tblgen': build_common.get_build_path_for_executable(
              'llvm-tblgen', is_host=True),
      },
      'java': {
          'aapt': os.getenv(
              'AAPT', os.path.join(android_sdk_build_tools_dir, 'aapt')),
          'aidl': os.path.join(android_sdk_build_tools_dir, 'aidl'),
          'dx': os.getenv(
              'DX', os.path.join(android_sdk_build_tools_dir, 'dx')),
          'deps': [],
          'dex2oat': build_common.get_build_path_for_executable(
              'dex2oatd' if OPTIONS.is_debug_code_enabled() else 'dex2oat',
              is_host=True),
          'dexdump': os.path.join(android_sdk_build_tools_dir, 'dexdump'),
          'java-event-log-tags': os.path.join(android_build_tools_dir,
                                              'java-event-log-tags.py'),
          'jar': _get_java_command('jar'),
          'jarjar': os.getenv('JARJAR', os.path.join(
              _DEXMAKER_PATH, 'lib', 'jarjar.jar')),
          'java': _get_java_command('java'),
          'javac': _get_java_command('javac'),
          'runner': _get_native_runner('java'),
          'zipalign': os.path.join(android_sdk_build_tools_dir, 'zipalign'),
      },
  }