| #!/usr/bin/env python3 | |
| # | |
| # Copyright 2021 The Chromium Authors | |
| # Use of this source code is governed by a BSD-style license that can be | |
| # found in the LICENSE file. | |
| import argparse | |
| import subprocess | |
| import sys | |
| def main() -> int: | |
| parser = argparse.ArgumentParser( | |
| description="Strip binary using LLVM tools." | |
| ) | |
| parser.add_argument( | |
| "--llvm-strip-binary-path", help="Path to llvm-strip executable." | |
| ) | |
| parser.add_argument( | |
| "--llvm-objcopy-binary-path", | |
| required=True, | |
| help="Path to llvm-objcopy executable.", | |
| ) | |
| parser.add_argument("--binary-input", help="Input ELF binary.") | |
| parser.add_argument( | |
| "--symbol-output", help="File to write extracted debug info (.debug)." | |
| ) | |
| parser.add_argument( | |
| "--stripped-binary-output", help="File to write stripped binary." | |
| ) | |
| args = parser.parse_args() | |
| # Replicate the behavior of: | |
| # eu-strip <binary_input> -o <stripped_binary_output> -f <symbol_output> | |
| subprocess.check_output( | |
| [ | |
| args.llvm_objcopy_binary_path, | |
| "--only-keep-debug", | |
| args.binary_input, | |
| args.symbol_output, | |
| ] | |
| ) | |
| subprocess.check_output( | |
| [ | |
| args.llvm_strip_binary_path, | |
| "--strip-debug", | |
| "--strip-unneeded", | |
| "-o", | |
| args.stripped_binary_output, | |
| args.binary_input, | |
| ] | |
| ) | |
| subprocess.check_output( | |
| [ | |
| args.llvm_objcopy_binary_path, | |
| f"--add-gnu-debuglink={args.symbol_output}", | |
| args.stripped_binary_output, | |
| ] | |
| ) | |
| return 0 | |
| if __name__ == "__main__": | |
| sys.exit(main()) |