12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- #!/usr/bin/env python3
- from __future__ import print_function
- import os
- import sys
- import subprocess
- def run(*args):
- return subprocess.check_output(list(args), shell=False).strip()
- def gen_renames_1(d):
- for l in d.split('\n'):
- l = l.strip()
- if ' ' in l:
- yield l.split(' ')[-1]
- def have_prefix(l, p):
- for x in l:
- if not x.startswith(p):
- return False
- return True
- def gen_renames_2(p, d):
- l = list(gen_renames_1(d))
- a = have_prefix(l, '_')
- for s in l:
- if 'asan_globals' in s:
- continue
- if s in ['HMAC', 'SHA1', 'SHA256', 'SHA256', 'SHA512', 'RC4', 'MD5', 'SHA384']:
- continue
- if a and s[1:] in ['HMAC', 'SHA1', 'SHA256', 'SHA256', 'SHA512', 'RC4', 'MD5', 'SHA384']:
- continue
- if a:
- yield s + ' _' + p + s[1:]
- else:
- yield s + ' ' + p + s
- def gen_renames(p, d):
- return '\n'.join(gen_renames_2(p, d)).strip() + '\n'
- def rename_syms(where, ret):
- p = 'v1_'
- # find symbols to rename
- syms = run(where + 'llvm-nm', '--extern-only', '--defined-only', '-A', ret)
- # prepare rename plan
- renames = gen_renames(p, syms)
- tmp = ret + '.syms'
- with open(tmp, 'w') as f:
- f.write(renames)
- # rename symbols
- run(where + 'llvm-objcopy', '--redefine-syms=' + tmp, ret)
- os.unlink(tmp)
- if __name__ == '__main__':
- rename_syms(os.path.dirname(sys.argv[3]) + '/', sys.argv[1])
|