66 lines
		
	
	
	
		
			2.4 KiB
			
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
	
		
			2.4 KiB
			
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
| #!/usr/bin/env python
 | |
| from __future__ import print_function
 | |
| import argparse
 | |
| import os
 | |
| import sys
 | |
| 
 | |
| from lib.config import LINUX_BINARIES, PLATFORM
 | |
| from lib.util import execute, get_objcopy_path, get_out_dir
 | |
| 
 | |
| def add_debug_link_into_binaries(directory, target_cpu, debug_dir):
 | |
|   for binary in LINUX_BINARIES:
 | |
|     binary_path = os.path.join(directory, binary)
 | |
|     if os.path.isfile(binary_path):
 | |
|       add_debug_link_into_binary(binary_path, target_cpu, debug_dir)
 | |
| 
 | |
| def add_debug_link_into_binary(binary_path, target_cpu, debug_dir):
 | |
|   try:
 | |
|     objcopy = get_objcopy_path(target_cpu)
 | |
|   except:
 | |
|     if PLATFORM == 'linux' and (target_cpu == 'x86' or target_cpu == 'arm' or
 | |
|        target_cpu == 'arm64'):
 | |
|       # Skip because no objcopy binary on the given target.
 | |
|       return
 | |
|     raise
 | |
|   debug_name = get_debug_name(binary_path)
 | |
|   # Make sure the path to the binary is not relative because of cwd param.
 | |
|   real_binary_path = os.path.realpath(binary_path)
 | |
|   cmd = [objcopy, '--add-gnu-debuglink=' + debug_name, real_binary_path]
 | |
|   execute(cmd, cwd=debug_dir)
 | |
| 
 | |
| def get_debug_name(binary_path):
 | |
|   return os.path.basename(binary_path) + '.debug'
 | |
| 
 | |
| def main():
 | |
|   args = parse_args()
 | |
|   if args.file:
 | |
|     add_debug_link_into_binary(args.file, args.target_cpu, args.debug_dir)
 | |
|   else:
 | |
|     add_debug_link_into_binaries(args.directory, args.target_cpu,
 | |
|                                  args.debug_dir)
 | |
| 
 | |
| def parse_args():
 | |
|   parser = argparse.ArgumentParser(description='Add debug link to binaries')
 | |
|   parser.add_argument('-d', '--directory',
 | |
|                       help='Path to the dir that contains files to add links',
 | |
|                       default=get_out_dir(),
 | |
|                       required=False)
 | |
|   parser.add_argument('-f', '--file',
 | |
|                       help='Path to a specific file to add debug link',
 | |
|                       required=False)
 | |
|   parser.add_argument('-s', '--debug-dir',
 | |
|                       help='Path to the dir that contain the debugs',
 | |
|                       default=None,
 | |
|                       required=True)
 | |
|   parser.add_argument('-v', '--verbose',
 | |
|                       action='store_true',
 | |
|                       help='Prints the output of the subprocesses')
 | |
|   parser.add_argument('--target-cpu',
 | |
|                       default='',
 | |
|                       required=False,
 | |
|                       help='Target cpu of binaries to add debug link')
 | |
| 
 | |
|   return parser.parse_args()
 | |
| 
 | |
| if __name__ == '__main__':
 | |
|   sys.exit(main())
 | 
