diff options
Diffstat (limited to 'deps/v8/tools/wasm-compilation-hints/inject-compilation-hints.py')
-rwxr-xr-x | deps/v8/tools/wasm-compilation-hints/inject-compilation-hints.py | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/deps/v8/tools/wasm-compilation-hints/inject-compilation-hints.py b/deps/v8/tools/wasm-compilation-hints/inject-compilation-hints.py new file mode 100755 index 0000000000..fd4b65b8ff --- /dev/null +++ b/deps/v8/tools/wasm-compilation-hints/inject-compilation-hints.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python + +# Copyright 2019 the V8 project authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be found +# in the LICENSE file. + +import argparse +import io +import sys + +from wasm import * + +FUNCTION_SECTION_ID = 3 + +def parse_args(): + parser = argparse.ArgumentParser(\ + description="Inject compilation hints into a Wasm module.") + parser.add_argument("-i", "--in-wasm-file", \ + type=str, \ + help="original wasm module") + parser.add_argument("-o", "--out-wasm-file", \ + type=str, \ + help="wasm module with injected hints") + parser.add_argument("-x", "--hints-file", \ + type=str, required=True, \ + help="binary hints file to be injected as a custom section " + \ + "'compilationHints'") + return parser.parse_args() + +if __name__ == "__main__": + args = parse_args() + in_wasm_file = args.in_wasm_file if args.in_wasm_file else sys.stdin.fileno() + out_wasm_file = args.out_wasm_file if args.out_wasm_file else sys.stdout.fileno() + hints_bs = open(args.hints_file, "rb").read() + with io.open(in_wasm_file, "rb") as fin: + with io.open(out_wasm_file, "wb") as fout: + magic_number, bs = read_magic_number(fin); + fout.write(bs) + version, bs = read_version(fin); + fout.write(bs) + num_declared_functions = None + while True: + id, bs = read_varuintN(fin) + fout.write(bs) + if id == None: + break + payload_length, bs = read_varuintN(fin) + fout.write(bs) + + # Peek into function section for upcoming validity check. + if id == FUNCTION_SECTION_ID: + num_declared_functions, bs = peek_varuintN(fin) + + bs = fin.read(payload_length) + fout.write(bs) + + # Instert hint section after function section. + if id == FUNCTION_SECTION_ID: + assert len(hints_bs) == num_declared_functions, "unexpected number of hints" + write_compilation_hints_section(fout, hints_bs) |