| #!/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()) |