diff options
Diffstat (limited to 'orderfile/post_process_orderfile.py')
-rwxr-xr-x | orderfile/post_process_orderfile.py | 91 |
1 files changed, 0 insertions, 91 deletions
diff --git a/orderfile/post_process_orderfile.py b/orderfile/post_process_orderfile.py deleted file mode 100755 index e24ab1cd..00000000 --- a/orderfile/post_process_orderfile.py +++ /dev/null @@ -1,91 +0,0 @@ -#!/usr/bin/env python2 -# -*- coding: utf-8 -*- -# Copyright 2019 The Chromium OS Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Script to do post-process on orderfile generated by C3. - -The goal of this script is to take in an orderfile generated by C3, and do -the following post process: - -1. Take in the result of nm command on Chrome binary to find out all the -Builtin functions and put them after the input symbols. - -2. Put special markers "chrome_begin_ordered_code" and "chrome_end_ordered_code" -in begin and end of the file. - -The results of the file is intended to be uploaded and consumed when linking -Chrome in Chrome OS. -""" - -from __future__ import division, print_function - -import argparse -import os -import sys - - -def _parse_nm_output(stream): - for line in (line.rstrip() for line in stream): - if not line: - continue - - pieces = line.split() - if len(pieces) != 3: - continue - - _, ty, symbol = pieces - if ty not in 'tT': - continue - - # We'll sometimes see synthesized symbols that start with $. There isn't - # much we can do about or with them, regrettably. - if symbol.startswith('$'): - continue - - yield symbol - - -def _remove_duplicates(iterable): - seen = set() - for item in iterable: - if item in seen: - continue - seen.add(item) - yield item - - -def run(c3_ordered_stream, chrome_nm_stream, output_stream): - head_marker = 'chrome_begin_ordered_code' - tail_marker = 'chrome_end_ordered_code' - - c3_ordered_syms = [x.strip() for x in c3_ordered_stream.readlines()] - all_chrome_syms = set(_parse_nm_output(chrome_nm_stream)) - # Sort by name, so it's predictable. Otherwise, these should all land in the - # same hugepage anyway, so order doesn't matter as much. - builtin_syms = sorted(s for s in all_chrome_syms if s.startswith('Builtins_')) - output = _remove_duplicates([head_marker] + c3_ordered_syms + builtin_syms + - [tail_marker]) - output_stream.write('\n'.join(output)) - - -def main(argv): - parser = argparse.ArgumentParser() - parser.add_argument('--chrome_nm', required=True, dest='chrome_nm') - parser.add_argument('--input', required=True, dest='input_file') - parser.add_argument('--output', required=True, dest='output_file') - - options = parser.parse_args(argv) - - if not os.path.exists(options.input_file): - sys.exit('Input orderfile doesn\'t exist.') - - with open(options.input_file) as in_stream, \ - open(options.chrome_nm) as chrome_nm_stream, \ - open(options.output_file, 'w') as out_stream: - run(in_stream, chrome_nm_stream, out_stream) - - -if __name__ == '__main__': - sys.exit(main(sys.argv[1:])) |