summaryrefslogtreecommitdiff
path: root/test/run-objdump.py
diff options
context:
space:
mode:
authorSam Clegg <sbc@chromium.org>2017-05-25 13:52:24 -0700
committerGitHub <noreply@github.com>2017-05-25 13:52:24 -0700
commit261df56ff70732a19d1211ca98c358de2fc22d57 (patch)
tree2c2ba2fe2ca43e208391cc5655278ff124986c33 /test/run-objdump.py
parentcfcdab032b9fc3f16f9b6259de4ebc509e269def (diff)
downloadwabt-261df56ff70732a19d1211ca98c358de2fc22d57.tar.gz
wabt-261df56ff70732a19d1211ca98c358de2fc22d57.tar.bz2
wabt-261df56ff70732a19d1211ca98c358de2fc22d57.zip
Rename wasmdump to wasm-objdump (#455)
This is more consistent with how llvm and binutils name such tools.
Diffstat (limited to 'test/run-objdump.py')
-rwxr-xr-xtest/run-objdump.py120
1 files changed, 120 insertions, 0 deletions
diff --git a/test/run-objdump.py b/test/run-objdump.py
new file mode 100755
index 00000000..24a777b6
--- /dev/null
+++ b/test/run-objdump.py
@@ -0,0 +1,120 @@
+#!/usr/bin/env python
+#
+# Copyright 2016 WebAssembly Community Group participants
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+import argparse
+import os
+import sys
+import tempfile
+
+import find_exe
+import utils
+
+SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
+GEN_WASM_PY = os.path.join(SCRIPT_DIR, 'gen-wasm.py')
+
+def main(args):
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-v', '--verbose', help='print more diagnotic messages.',
+ action='store_true')
+ parser.add_argument('-o', '--out-dir', metavar='PATH',
+ help='output directory for files.')
+ parser.add_argument('--bindir', metavar='PATH',
+ default=find_exe.GetDefaultPath(),
+ help='directory to search for all executables.')
+ parser.add_argument('--no-error-cmdline',
+ help='don\'t display the subprocess\'s commandline when'
+ + ' an error occurs', dest='error_cmdline',
+ action='store_false')
+ parser.add_argument('-p', '--print-cmd',
+ help='print the commands that are run.',
+ action='store_true')
+ parser.add_argument('--headers', action='store_true')
+ parser.add_argument('--no-check', action='store_true')
+ parser.add_argument('-c', '--compile-only', action='store_true')
+ parser.add_argument('--dump-verbose', action='store_true')
+ parser.add_argument('--dump-debug', action='store_true')
+ parser.add_argument('--gen-wasm', action='store_true',
+ help='parse with gen-wasm')
+ parser.add_argument('--spec', action='store_true')
+ parser.add_argument('-r', '--relocatable', action='store_true')
+ parser.add_argument('--no-canonicalize-leb128s', action='store_true')
+ parser.add_argument('--debug-names', action='store_true')
+ parser.add_argument('file', help='test file.')
+ options = parser.parse_args(args)
+
+ if options.gen_wasm and options.spec:
+ parser.error('Can\'t use both --gen-wasm and --spec')
+
+ gen_wasm = utils.Executable(sys.executable, GEN_WASM_PY,
+ error_cmdline=options.error_cmdline)
+
+ wast2wasm = utils.Executable(
+ find_exe.GetWast2WasmExecutable(options.bindir),
+ error_cmdline=options.error_cmdline)
+ wast2wasm.AppendOptionalArgs({
+ '--debug-names': options.debug_names,
+ '--no-check': options.no_check,
+ '--no-canonicalize-leb128s': options.no_canonicalize_leb128s,
+ '--spec': options.spec,
+ '-v': options.verbose,
+ '-r': options.relocatable,
+ '-c': options.compile_only,
+ })
+
+ wasm_objdump = utils.Executable(
+ find_exe.GetWasmdumpExecutable(options.bindir),
+ error_cmdline=options.error_cmdline)
+ wasm_objdump.AppendOptionalArgs({
+ '-h': options.headers,
+ '-x': options.dump_verbose,
+ '--debug': options.dump_debug,
+ })
+
+ gen_wasm.verbose = options.print_cmd
+ wast2wasm.verbose = options.print_cmd
+ wasm_objdump.verbose = options.print_cmd
+
+ filename = options.file
+
+ with utils.TempDirectory(options.out_dir, 'objdump-') as out_dir:
+ basename = os.path.basename(filename)
+ basename_noext = os.path.splitext(basename)[0]
+ if options.gen_wasm:
+ out_file = os.path.join(out_dir, basename_noext + '.wasm')
+ gen_wasm.RunWithArgs('-o', out_file, filename)
+ else:
+ if options.spec:
+ out_file = os.path.join(out_dir, basename_noext + '.json')
+ else:
+ out_file = os.path.join(out_dir, basename_noext + '.wasm')
+ wast2wasm.RunWithArgs('-o', out_file, filename)
+
+ if options.spec:
+ wasm_files = utils.GetModuleFilenamesFromSpecJSON(out_file)
+ wasm_files = [utils.ChangeDir(f, out_dir) for f in wasm_files]
+ else:
+ wasm_files = [out_file]
+
+ wasm_objdump.RunWithArgs('-r', '-d', *wasm_files)
+
+
+if __name__ == '__main__':
+ try:
+ sys.exit(main(sys.argv[1:]))
+ except utils.Error as e:
+ sys.stderr.write(str(e) + '\n')
+ sys.exit(1)