c39c6eba00
The interpreter was not able to call imported wasm functions (hitting UNIMPLEMENTED). This CL fixes this by creating a "CWasmEntry", which is signature-specific. It has JS linkage and receives the wasm code object to call and a buffer containing all arguments (similar to the interpreter entry). It loads all arguments from the buffer and calls the given code object. The c-wasm-entry code objects are cached per instance, such that we only create them once per signature. These wasm entry stubs will also allow us to call back to compiled code from the interpreter, which we might want to do to reduce the slowdown of executing wasm for debugging. R=titzer@chromium.org Bug: chromium:735792 Change-Id: I7fecec3a7bec62a9de40fff115b684759b12a28b Reviewed-on: https://chromium-review.googlesource.com/600308 Commit-Queue: Clemens Hammacher <clemensh@chromium.org> Reviewed-by: Ben Titzer <titzer@chromium.org> Cr-Commit-Position: refs/heads/master@{#47195}
443 lines
13 KiB
Plaintext
443 lines
13 KiB
Plaintext
# Copyright 2016 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("../../gni/v8.gni")
|
|
|
|
v8_executable("cctest") {
|
|
testonly = true
|
|
|
|
sources = [
|
|
"$target_gen_dir/resources.cc",
|
|
|
|
### gcmole(all) ###
|
|
"../../test/common/wasm/flag-utils.h",
|
|
"../../test/common/wasm/test-signatures.h",
|
|
"../../test/common/wasm/wasm-macro-gen.h",
|
|
"cctest.cc",
|
|
"cctest.h",
|
|
"compiler/c-signature.h",
|
|
"compiler/call-tester.h",
|
|
"compiler/code-assembler-tester.h",
|
|
"compiler/codegen-tester.cc",
|
|
"compiler/codegen-tester.h",
|
|
"compiler/function-tester.cc",
|
|
"compiler/function-tester.h",
|
|
"compiler/graph-builder-tester.h",
|
|
"compiler/test-basic-block-profiler.cc",
|
|
"compiler/test-branch-combine.cc",
|
|
"compiler/test-code-assembler.cc",
|
|
"compiler/test-code-generator.cc",
|
|
"compiler/test-gap-resolver.cc",
|
|
"compiler/test-graph-visualizer.cc",
|
|
"compiler/test-instruction.cc",
|
|
"compiler/test-js-constant-cache.cc",
|
|
"compiler/test-js-context-specialization.cc",
|
|
"compiler/test-js-typed-lowering.cc",
|
|
"compiler/test-jump-threading.cc",
|
|
"compiler/test-linkage.cc",
|
|
"compiler/test-loop-analysis.cc",
|
|
"compiler/test-loop-assignment-analysis.cc",
|
|
"compiler/test-machine-operator-reducer.cc",
|
|
"compiler/test-multiple-return.cc",
|
|
"compiler/test-node.cc",
|
|
"compiler/test-operator.cc",
|
|
"compiler/test-representation-change.cc",
|
|
"compiler/test-run-bytecode-graph-builder.cc",
|
|
"compiler/test-run-calls-to-external-references.cc",
|
|
"compiler/test-run-deopt.cc",
|
|
"compiler/test-run-intrinsics.cc",
|
|
"compiler/test-run-jsbranches.cc",
|
|
"compiler/test-run-jscalls.cc",
|
|
"compiler/test-run-jsexceptions.cc",
|
|
"compiler/test-run-jsobjects.cc",
|
|
"compiler/test-run-jsops.cc",
|
|
"compiler/test-run-load-store.cc",
|
|
"compiler/test-run-machops.cc",
|
|
"compiler/test-run-native-calls.cc",
|
|
"compiler/test-run-stackcheck.cc",
|
|
"compiler/test-run-stubs.cc",
|
|
"compiler/test-run-unwinding-info.cc",
|
|
"compiler/test-run-variables.cc",
|
|
"compiler/test-run-wasm-machops.cc",
|
|
"compiler/value-helper.h",
|
|
"expression-type-collector-macros.h",
|
|
"ffi/test-ffi.cc",
|
|
"gay-fixed.cc",
|
|
"gay-fixed.h",
|
|
"gay-precision.cc",
|
|
"gay-precision.h",
|
|
"gay-shortest.cc",
|
|
"gay-shortest.h",
|
|
"heap/heap-tester.h",
|
|
"heap/heap-utils.cc",
|
|
"heap/heap-utils.h",
|
|
"heap/test-alloc.cc",
|
|
"heap/test-array-buffer-tracker.cc",
|
|
"heap/test-compaction.cc",
|
|
"heap/test-concurrent-marking.cc",
|
|
"heap/test-heap.cc",
|
|
"heap/test-incremental-marking.cc",
|
|
"heap/test-invalidated-slots.cc",
|
|
"heap/test-lab.cc",
|
|
"heap/test-mark-compact.cc",
|
|
"heap/test-page-promotion.cc",
|
|
"heap/test-spaces.cc",
|
|
"interpreter/bytecode-expectations-printer.cc",
|
|
"interpreter/bytecode-expectations-printer.h",
|
|
"interpreter/interpreter-tester.cc",
|
|
"interpreter/interpreter-tester.h",
|
|
"interpreter/source-position-matcher.cc",
|
|
"interpreter/source-position-matcher.h",
|
|
"interpreter/test-bytecode-generator.cc",
|
|
"interpreter/test-interpreter-intrinsics.cc",
|
|
"interpreter/test-interpreter.cc",
|
|
"interpreter/test-source-positions.cc",
|
|
"libplatform/test-tracing.cc",
|
|
"libsampler/test-sampler.cc",
|
|
"parsing/test-parse-decision.cc",
|
|
"parsing/test-preparser.cc",
|
|
"parsing/test-scanner-streams.cc",
|
|
"parsing/test-scanner.cc",
|
|
"print-extension.cc",
|
|
"print-extension.h",
|
|
"profiler-extension.cc",
|
|
"profiler-extension.h",
|
|
"scope-test-helper.h",
|
|
"setup-isolate-for-tests.cc",
|
|
"setup-isolate-for-tests.h",
|
|
"test-access-checks.cc",
|
|
"test-accessor-assembler.cc",
|
|
"test-accessors.cc",
|
|
"test-allocation.cc",
|
|
"test-api-accessors.cc",
|
|
"test-api-interceptors.cc",
|
|
"test-api.cc",
|
|
"test-api.h",
|
|
"test-array-list.cc",
|
|
"test-ast.cc",
|
|
"test-atomicops.cc",
|
|
"test-bignum-dtoa.cc",
|
|
"test-bignum.cc",
|
|
"test-bit-vector.cc",
|
|
"test-circular-queue.cc",
|
|
"test-code-cache.cc",
|
|
"test-code-layout.cc",
|
|
"test-code-stub-assembler.cc",
|
|
"test-compiler.cc",
|
|
"test-constantpool.cc",
|
|
"test-conversions.cc",
|
|
"test-cpu-profiler.cc",
|
|
"test-date.cc",
|
|
"test-debug.cc",
|
|
"test-decls.cc",
|
|
"test-deoptimization.cc",
|
|
"test-dictionary.cc",
|
|
"test-diy-fp.cc",
|
|
"test-double.cc",
|
|
"test-dtoa.cc",
|
|
"test-elements-kind.cc",
|
|
"test-fast-dtoa.cc",
|
|
"test-feedback-vector.cc",
|
|
"test-feedback-vector.h",
|
|
"test-field-type-tracking.cc",
|
|
"test-fixed-dtoa.cc",
|
|
"test-flags.cc",
|
|
"test-func-name-inference.cc",
|
|
"test-global-handles.cc",
|
|
"test-global-object.cc",
|
|
"test-hashmap.cc",
|
|
"test-heap-profiler.cc",
|
|
"test-identity-map.cc",
|
|
"test-inobject-slack-tracking.cc",
|
|
"test-intl.cc",
|
|
"test-list.cc",
|
|
"test-liveedit.cc",
|
|
"test-lockers.cc",
|
|
"test-log.cc",
|
|
"test-managed.cc",
|
|
"test-mementos.cc",
|
|
"test-modules.cc",
|
|
"test-object.cc",
|
|
"test-orderedhashtable.cc",
|
|
"test-parsing.cc",
|
|
"test-platform.cc",
|
|
"test-profile-generator.cc",
|
|
"test-random-number-generator.cc",
|
|
"test-regexp.cc",
|
|
"test-representation.cc",
|
|
"test-sampler-api.cc",
|
|
"test-serialize.cc",
|
|
"test-strings.cc",
|
|
"test-strtod.cc",
|
|
"test-symbols.cc",
|
|
"test-thread-termination.cc",
|
|
"test-threads.cc",
|
|
"test-trace-event.cc",
|
|
"test-traced-value.cc",
|
|
"test-transitions.cc",
|
|
"test-transitions.h",
|
|
"test-typedarrays.cc",
|
|
"test-types.cc",
|
|
"test-unbound-queue.cc",
|
|
"test-unboxed-doubles.cc",
|
|
"test-unscopables-hidden-prototype.cc",
|
|
"test-usecounters.cc",
|
|
"test-utils.cc",
|
|
"test-version.cc",
|
|
"test-weakmaps.cc",
|
|
"test-weaksets.cc",
|
|
"trace-extension.cc",
|
|
"trace-extension.h",
|
|
"types-fuzz.h",
|
|
"unicode-helpers.h",
|
|
"wasm/test-c-wasm-entry.cc",
|
|
"wasm/test-run-wasm-64.cc",
|
|
"wasm/test-run-wasm-asmjs.cc",
|
|
"wasm/test-run-wasm-atomics.cc",
|
|
"wasm/test-run-wasm-interpreter.cc",
|
|
"wasm/test-run-wasm-js.cc",
|
|
"wasm/test-run-wasm-module.cc",
|
|
"wasm/test-run-wasm-relocation.cc",
|
|
"wasm/test-run-wasm-simd.cc",
|
|
"wasm/test-run-wasm.cc",
|
|
"wasm/test-wasm-breakpoints.cc",
|
|
"wasm/test-wasm-interpreter-entry.cc",
|
|
"wasm/test-wasm-stack.cc",
|
|
"wasm/test-wasm-trap-position.cc",
|
|
"wasm/wasm-run-utils.h",
|
|
]
|
|
|
|
if (v8_current_cpu == "arm") {
|
|
sources += [ ### gcmole(arch:arm) ###
|
|
"test-assembler-arm.cc",
|
|
"test-code-stubs-arm.cc",
|
|
"test-code-stubs.cc",
|
|
"test-code-stubs.h",
|
|
"test-disasm-arm.cc",
|
|
"test-macro-assembler-arm.cc",
|
|
"test-run-wasm-relocation-arm.cc",
|
|
"test-simulator-arm.cc",
|
|
]
|
|
} else if (v8_current_cpu == "arm64") {
|
|
sources += [ ### gcmole(arch:arm64) ###
|
|
"test-assembler-arm64.cc",
|
|
"test-code-stubs-arm64.cc",
|
|
"test-code-stubs.cc",
|
|
"test-code-stubs.h",
|
|
"test-disasm-arm64.cc",
|
|
"test-fuzz-arm64.cc",
|
|
"test-javascript-arm64.cc",
|
|
"test-js-arm64-variables.cc",
|
|
"test-run-wasm-relocation-arm64.cc",
|
|
"test-simulator-arm64.cc",
|
|
"test-utils-arm64.cc",
|
|
"test-utils-arm64.h",
|
|
]
|
|
} else if (v8_current_cpu == "x86") {
|
|
sources += [ ### gcmole(arch:ia32) ###
|
|
"test-assembler-ia32.cc",
|
|
"test-code-stubs-ia32.cc",
|
|
"test-code-stubs.cc",
|
|
"test-code-stubs.h",
|
|
"test-disasm-ia32.cc",
|
|
"test-log-stack-tracer.cc",
|
|
"test-macro-assembler-ia32.cc",
|
|
"test-run-wasm-relocation-ia32.cc",
|
|
]
|
|
} else if (v8_current_cpu == "mips") {
|
|
sources += [ ### gcmole(arch:mips) ###
|
|
"test-assembler-mips.cc",
|
|
"test-code-stubs-mips.cc",
|
|
"test-code-stubs.cc",
|
|
"test-code-stubs.h",
|
|
"test-disasm-mips.cc",
|
|
"test-macro-assembler-mips.cc",
|
|
]
|
|
} else if (v8_current_cpu == "mipsel") {
|
|
sources += [ ### gcmole(arch:mipsel) ###
|
|
"test-assembler-mips.cc",
|
|
"test-code-stubs-mips.cc",
|
|
"test-code-stubs.cc",
|
|
"test-code-stubs.h",
|
|
"test-disasm-mips.cc",
|
|
"test-macro-assembler-mips.cc",
|
|
]
|
|
} else if (v8_current_cpu == "mips64") {
|
|
sources += [ ### gcmole(arch:mips64) ###
|
|
"test-assembler-mips64.cc",
|
|
"test-code-stubs-mips64.cc",
|
|
"test-code-stubs.cc",
|
|
"test-code-stubs.h",
|
|
"test-disasm-mips64.cc",
|
|
"test-macro-assembler-mips64.cc",
|
|
]
|
|
} else if (v8_current_cpu == "mips64el") {
|
|
sources += [ ### gcmole(arch:mips64el) ###
|
|
"test-assembler-mips64.cc",
|
|
"test-code-stubs-mips64.cc",
|
|
"test-code-stubs.cc",
|
|
"test-code-stubs.h",
|
|
"test-disasm-mips64.cc",
|
|
"test-macro-assembler-mips64.cc",
|
|
]
|
|
} else if (v8_current_cpu == "x64") {
|
|
sources += [ ### gcmole(arch:x64) ###
|
|
"test-assembler-x64.cc",
|
|
"test-code-stubs-x64.cc",
|
|
"test-code-stubs.cc",
|
|
"test-code-stubs.h",
|
|
"test-disasm-x64.cc",
|
|
"test-log-stack-tracer.cc",
|
|
"test-macro-assembler-x64.cc",
|
|
"test-run-wasm-relocation-x64.cc",
|
|
]
|
|
} else if (v8_current_cpu == "ppc" || v8_current_cpu == "ppc64") {
|
|
sources += [ ### gcmole(arch:ppc) ###
|
|
"test-assembler-ppc.cc",
|
|
"test-code-stubs.cc",
|
|
"test-code-stubs.h",
|
|
"test-disasm-ppc.cc",
|
|
]
|
|
} else if (v8_current_cpu == "s390" || v8_current_cpu == "s390x") {
|
|
sources += [ ### gcmole(arch:s390) ###
|
|
"test-assembler-s390.cc",
|
|
"test-code-stubs.cc",
|
|
"test-code-stubs.h",
|
|
"test-disasm-s390.cc",
|
|
]
|
|
}
|
|
|
|
if (is_linux) {
|
|
# TODO(machenbach): Translate 'or OS=="qnx"' from gyp.
|
|
sources += [ "test-platform-linux.cc" ]
|
|
} else if (is_win) {
|
|
sources += [ "test-platform-win32.cc" ]
|
|
}
|
|
|
|
configs = [
|
|
"../..:external_config",
|
|
"../..:internal_config_base",
|
|
]
|
|
|
|
# TODO(machenbach): Translate from gyp.
|
|
#["OS=="aix"", {
|
|
# "ldflags": [ "-Wl,-bbigtoc" ],
|
|
#}],
|
|
|
|
deps = [
|
|
":resources",
|
|
"../..:v8_builtins_generators",
|
|
"../..:v8_libbase",
|
|
"../..:v8_libplatform",
|
|
"../..:wasm_module_runner",
|
|
"//build/config:exe_and_shlib_deps",
|
|
"//build/win:default_exe_manifest",
|
|
]
|
|
|
|
defines = []
|
|
|
|
if (is_component_build) {
|
|
# cctest can't be built against a shared library, so we
|
|
# need to depend on the underlying static target in that case.
|
|
deps += [ "../..:v8_maybe_snapshot" ]
|
|
defines += [ "BUILDING_V8_SHARED" ]
|
|
} else {
|
|
deps += [ "../..:v8" ]
|
|
}
|
|
|
|
if (v8_enable_i18n_support) {
|
|
defines += [ "V8_INTL_SUPPORT" ]
|
|
} else {
|
|
sources -= [ "test-intl.cc" ]
|
|
}
|
|
|
|
cflags = []
|
|
ldflags = []
|
|
|
|
# crbug.com/676417: Suppress symbol import warning from linker.
|
|
if (is_win && is_component_build) {
|
|
ldflags += [
|
|
"/ignore:4217",
|
|
"/ignore:4049",
|
|
]
|
|
remove_configs = [ "//build/config/win:default_incremental_linking" ]
|
|
configs += [ "//build/config/win:no_incremental_linking" ]
|
|
}
|
|
|
|
if (v8_current_cpu == "ppc" || v8_current_cpu == "ppc64" ||
|
|
v8_current_cpu == "arm" || v8_current_cpu == "arm64" ||
|
|
v8_current_cpu == "s390" || v8_current_cpu == "s390x" ||
|
|
v8_current_cpu == "mips" || v8_current_cpu == "mips64" ||
|
|
v8_current_cpu == "mipsel" || v8_current_cpu == "mipsel64") {
|
|
# Disable fmadd/fmsub so that expected results match generated code in
|
|
# RunFloat64MulAndFloat64Add1 and friends.
|
|
cflags += [ "-ffp-contract=off" ]
|
|
}
|
|
|
|
if (is_win) {
|
|
# This warning is benignly triggered by the U16 and U32 macros in
|
|
# bytecode-utils.h.
|
|
# C4309: 'static_cast': truncation of constant value
|
|
cflags += [ "/wd4309" ]
|
|
|
|
# MSVS wants this for gay-{precision,shortest}.cc.
|
|
cflags += [ "/bigobj" ]
|
|
}
|
|
}
|
|
|
|
action("resources") {
|
|
visibility = [ ":*" ] # Only targets in this file can depend on this.
|
|
|
|
script = "../../tools/js2c.py"
|
|
|
|
# The script depends on this other script, this rule causes a rebuild if it
|
|
# changes.
|
|
inputs = [
|
|
"../../tools/jsmin.py",
|
|
]
|
|
|
|
# NOSORT
|
|
sources = [
|
|
"../../tools/splaytree.js",
|
|
"../../tools/codemap.js",
|
|
"../../tools/csvparser.js",
|
|
"../../tools/consarray.js",
|
|
"../../tools/profile.js",
|
|
"../../tools/profile_view.js",
|
|
"../../tools/logreader.js",
|
|
"log-eq-of-logging-and-traversal.js",
|
|
]
|
|
|
|
outputs = [
|
|
"$target_gen_dir/resources.cc",
|
|
]
|
|
|
|
args = [
|
|
rebase_path("$target_gen_dir/resources.cc", root_build_dir),
|
|
"TEST",
|
|
]
|
|
args += rebase_path(sources, root_build_dir)
|
|
}
|
|
|
|
v8_executable("generate-bytecode-expectations") {
|
|
sources = [
|
|
"interpreter/bytecode-expectations-printer.cc",
|
|
"interpreter/bytecode-expectations-printer.h",
|
|
"interpreter/generate-bytecode-expectations.cc",
|
|
]
|
|
|
|
configs = [
|
|
"../..:external_config",
|
|
"../..:internal_config_base",
|
|
]
|
|
|
|
deps = [
|
|
"../..:v8",
|
|
"../..:v8_libbase",
|
|
"../..:v8_libplatform",
|
|
"//build/config:exe_and_shlib_deps",
|
|
"//build/win:default_exe_manifest",
|
|
]
|
|
}
|