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)
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'), }, }
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'), }, }