v8/test/cctest/BUILD.gn
binji 66ae5f7d71 Implement ldrex/strex instructions in ARM simulator
This CL implements ldrex, ldrexb, ldrexh, strex, strexb, and strexh in the
Simulator. These instructions provide "exclusive" access, which provides mutual
exclusion for concurrent threads of execution.

The ARM specification gives some leeway to implementors, but essentially
describes each processor as having Local Monitor and Global Monitor. The Local
Monitor is used to check the exclusivity state without having to synchronize
with other processors. The Global Monitor is shared between processors. We
model both to make it easier to match behavior with the spec.

When running with multiple OS threads, each thread has its own isolate, and
each isolate has its own Simulator. The Local Monitor is stored directly on the
Simulator, and the Global Monitor is stored as a lazy singleton. The Global
Monitor maintains a linked-list of all Simulators.

All loads/stores (even non-exclusive) are guarded by the Global Monitor's mutex.

BUG=v8:4614

Review-Url: https://codereview.chromium.org/2006183004
Cr-Commit-Position: refs/heads/master@{#42481}
2017-01-18 22:17:46 +00:00

448 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) ###
"asmjs/test-asm-typer.cc",
"ast-types-fuzz.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-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-heap.cc",
"heap/test-incremental-marking.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-scanner-streams.cc",
"parsing/test-scanner.cc",
"print-extension.cc",
"print-extension.h",
"profiler-extension.cc",
"profiler-extension.h",
"test-access-checks.cc",
"test-accessor-assembler.cc",
"test-accessors.cc",
"test-api-accessors.cc",
"test-api-fast-accessor-builder.cc",
"test-api-interceptors.cc",
"test-api.cc",
"test-api.h",
"test-array-list.cc",
"test-ast-types.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-hashing.cc",
"test-hashmap.cc",
"test-heap-profiler.cc",
"test-hydrogen-types.cc",
"test-identity-map.cc",
"test-inobject-slack-tracking.cc",
"test-list.cc",
"test-liveedit.cc",
"test-lockers.cc",
"test-log.cc",
"test-mementos.cc",
"test-modules.cc",
"test-object.cc",
"test-parsing.cc",
"test-platform.cc",
"test-profile-generator.cc",
"test-random-number-generator.cc",
"test-receiver-check-hidden-prototype.cc",
"test-regexp.cc",
"test-representation.cc",
"test-sampler-api.cc",
"test-serialize.cc",
"test-simd.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-typedarrays.cc",
"test-types.cc",
"test-unbound-queue.cc",
"test-unboxed-doubles.cc",
"test-unique.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",
"wasm/test-managed.cc",
"wasm/test-run-wasm-64.cc",
"wasm/test-run-wasm-asmjs.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.cc",
"wasm/test-wasm-breakpoints.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",
"wasm/test-run-wasm-simd.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-utils-arm64.cc",
"test-utils-arm64.h",
"wasm/test-run-wasm-simd-lowering.cc",
]
} 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",
"wasm/test-run-wasm-simd-lowering.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",
"wasm/test-run-wasm-simd-lowering.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",
"wasm/test-run-wasm-simd-lowering.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",
"wasm/test-run-wasm-simd-lowering.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",
"wasm/test-run-wasm-simd-lowering.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",
"wasm/test-run-wasm-simd.cc",
]
} else if (v8_current_cpu == "x87") {
sources += [ ### gcmole(arch:x87) ###
"test-assembler-x87.cc",
"test-code-stubs-x87.cc",
"test-code-stubs.cc",
"test-code-stubs.h",
"test-disasm-x87.cc",
"test-log-stack-tracer.cc",
"test-macro-assembler-x87.cc",
"test-run-wasm-relocation-x87.cc",
"wasm/test-run-wasm-simd-lowering.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",
"wasm/test-run-wasm-simd-lowering.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",
"wasm/test-run-wasm-simd-lowering.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_libbase",
"../..:v8_libplatform",
"../..:wasm_module_runner",
"../..:wasm_test_signatures",
"//build/config/sanitizers: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" ]
}
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/sanitizers:deps",
"//build/win:default_exe_manifest",
]
}