diff options
Diffstat (limited to 'deps/v8/test/unittests/assembler/macro-assembler-x64-unittest.cc')
-rw-r--r-- | deps/v8/test/unittests/assembler/macro-assembler-x64-unittest.cc | 59 |
1 files changed, 54 insertions, 5 deletions
diff --git a/deps/v8/test/unittests/assembler/macro-assembler-x64-unittest.cc b/deps/v8/test/unittests/assembler/macro-assembler-x64-unittest.cc index b7e5b0ffbe..9924b620ee 100644 --- a/deps/v8/test/unittests/assembler/macro-assembler-x64-unittest.cc +++ b/deps/v8/test/unittests/assembler/macro-assembler-x64-unittest.cc @@ -40,6 +40,57 @@ namespace v8 { namespace internal { + +#define __ masm. + +// Test the x64 assembler by compiling some simple functions into +// a buffer and executing them. These tests do not initialize the +// V8 library, create a context, or use any V8 objects. + +using MacroAssemblerX64Test = TestWithIsolate; + +TEST_F(MacroAssemblerX64Test, TestHardAbort) { + auto buffer = AllocateAssemblerBuffer(); + MacroAssembler masm(isolate(), AssemblerOptions{}, CodeObjectRequired::kNo, + buffer->CreateView()); + __ set_root_array_available(false); + __ set_abort_hard(true); + + __ Abort(AbortReason::kNoReason); + + CodeDesc desc; + masm.GetCode(isolate(), &desc); + buffer->MakeExecutable(); + auto f = GeneratedCode<void>::FromBuffer(isolate(), buffer->start()); + + ASSERT_DEATH_IF_SUPPORTED({ f.Call(); }, "abort: no reason"); +} + +TEST_F(MacroAssemblerX64Test, TestCheck) { + auto buffer = AllocateAssemblerBuffer(); + MacroAssembler masm(isolate(), AssemblerOptions{}, CodeObjectRequired::kNo, + buffer->CreateView()); + __ set_root_array_available(false); + __ set_abort_hard(true); + + // Fail if the first parameter is 17. + __ movl(rax, Immediate(17)); + __ cmpl(rax, arg_reg_1); + __ Check(Condition::not_equal, AbortReason::kNoReason); + __ ret(0); + + CodeDesc desc; + masm.GetCode(isolate(), &desc); + buffer->MakeExecutable(); + auto f = GeneratedCode<void, int>::FromBuffer(isolate(), buffer->start()); + + f.Call(0); + f.Call(18); + ASSERT_DEATH_IF_SUPPORTED({ f.Call(17); }, "abort: no reason"); +} + +#undef __ + namespace test_macro_assembler_x64 { // Test the x64 assembler by compiling some simple functions into @@ -51,8 +102,6 @@ namespace test_macro_assembler_x64 { // This calling convention is used on Linux, with GCC, and on Mac OS, // with GCC. A different convention is used on 64-bit windows. -using MacroAssemblerX64Test = TestWithIsolate; - using F0 = int(); #define __ masm-> @@ -60,14 +109,14 @@ using F0 = int(); static void EntryCode(MacroAssembler* masm) { // Smi constant register is callee save. __ pushq(kRootRegister); -#ifdef V8_COMPRESS_POINTERS_IN_SHARED_CAGE +#ifdef V8_COMPRESS_POINTERS __ pushq(kPtrComprCageBaseRegister); #endif __ InitializeRootRegister(); } static void ExitCode(MacroAssembler* masm) { -#ifdef V8_COMPRESS_POINTERS_IN_SHARED_CAGE +#ifdef V8_COMPRESS_POINTERS __ popq(kPtrComprCageBaseRegister); #endif __ popq(kRootRegister); @@ -468,7 +517,7 @@ TEST_F(MacroAssemblerX64Test, EmbeddedObj) { code->Print(os); #endif using myF0 = Address(); - auto f = GeneratedCode<myF0>::FromAddress(isolate, code->entry()); + auto f = GeneratedCode<myF0>::FromAddress(isolate, code->code_entry_point()); Object result = Object(f.Call()); CHECK_EQ(old_array->ptr(), result.ptr()); |