OLD | NEW |
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <stdlib.h> | 5 #include <stdlib.h> |
6 #include <string.h> | 6 #include <string.h> |
7 | 7 |
8 #include "src/objects-inl.h" | 8 #include "src/objects-inl.h" |
9 #include "src/snapshot/code-serializer.h" | 9 #include "src/snapshot/code-serializer.h" |
10 #include "src/version.h" | 10 #include "src/version.h" |
(...skipping 419 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
430 { | 430 { |
431 HandleScope scope(test.current_isolate()); | 431 HandleScope scope(test.current_isolate()); |
432 test.InvalidateVersion(); | 432 test.InvalidateVersion(); |
433 test.InvalidateWireBytes(); | 433 test.InvalidateWireBytes(); |
434 test.Deserialize(); | 434 test.Deserialize(); |
435 } | 435 } |
436 Cleanup(test.current_isolate()); | 436 Cleanup(test.current_isolate()); |
437 Cleanup(); | 437 Cleanup(); |
438 } | 438 } |
439 | 439 |
| 440 std::unique_ptr<const uint8_t[]> CreatePayload(const uint8_t* start, |
| 441 size_t size) { |
| 442 uint8_t* ret = new uint8_t[size]; |
| 443 memcpy(ret, start, size); |
| 444 return std::unique_ptr<const uint8_t[]>(const_cast<const uint8_t*>(ret)); |
| 445 } |
| 446 |
| 447 TEST(ModuleBuilder) { |
| 448 v8::internal::AccountingAllocator allocator; |
| 449 Zone zone(&allocator, ZONE_NAME); |
| 450 ZoneBuffer buffer(&zone); |
| 451 WasmSerializationTest::BuildWireBytes(&zone, &buffer); |
| 452 CHECK_GT(buffer.size(), 0); |
| 453 size_t third = buffer.size() / 3; |
| 454 size_t first_mark = third - 2; |
| 455 size_t second_mark = buffer.size() - 2 - third; |
| 456 CHECK(0 < first_mark); |
| 457 CHECK(first_mark < second_mark); |
| 458 CHECK(second_mark < buffer.size()); |
| 459 Isolate* i_isolate = CcTest::InitIsolateOnce(); |
| 460 v8::WasmModuleObjectBuilder builder(CcTest::isolate()); |
| 461 std::unique_ptr<const uint8_t[]> first_part = |
| 462 CreatePayload(buffer.begin(), first_mark); |
| 463 std::unique_ptr<const uint8_t[]> second_part = |
| 464 CreatePayload(buffer.begin() + first_mark, second_mark - first_mark); |
| 465 std::unique_ptr<const uint8_t[]> third_part = |
| 466 CreatePayload(buffer.begin() + second_mark, buffer.size() - second_mark); |
| 467 builder.OnBytesReceived(std::move(first_part), first_mark); |
| 468 builder.OnBytesReceived(std::move(second_part), second_mark - first_mark); |
| 469 builder.OnBytesReceived(std::move(third_part), buffer.size() - second_mark); |
| 470 { |
| 471 HandleScope scope(i_isolate); |
| 472 v8::MaybeLocal<v8::WasmCompiledModule> maybe_module = builder.Finish(); |
| 473 CHECK(!maybe_module.IsEmpty()); |
| 474 } |
| 475 } |
| 476 |
| 477 TEST(FailingModuleBuilder) { |
| 478 v8::internal::AccountingAllocator allocator; |
| 479 Zone zone(&allocator, ZONE_NAME); |
| 480 ZoneBuffer buffer(&zone); |
| 481 WasmSerializationTest::BuildWireBytes(&zone, &buffer); |
| 482 CHECK_GT(buffer.size(), 0); |
| 483 size_t third = buffer.size() / 3; |
| 484 size_t first_mark = third - 2; |
| 485 size_t second_mark = buffer.size() - 2 - third; |
| 486 CHECK(0 < first_mark); |
| 487 CHECK(first_mark < second_mark); |
| 488 CHECK(second_mark < buffer.size()); |
| 489 Isolate* i_isolate = CcTest::InitIsolateOnce(); |
| 490 v8::WasmModuleObjectBuilder builder(CcTest::isolate()); |
| 491 std::unique_ptr<const uint8_t[]> first_part = |
| 492 CreatePayload(buffer.begin(), first_mark); |
| 493 builder.OnBytesReceived(std::move(first_part), first_mark); |
| 494 { |
| 495 HandleScope scope(i_isolate); |
| 496 v8::MaybeLocal<v8::WasmCompiledModule> maybe_module = builder.Finish(); |
| 497 CHECK(maybe_module.IsEmpty()); |
| 498 } |
| 499 } |
| 500 |
440 bool False(v8::Local<v8::Context> context) { return false; } | 501 bool False(v8::Local<v8::Context> context) { return false; } |
441 | 502 |
442 TEST(BlockWasmCodeGen) { | 503 TEST(BlockWasmCodeGen) { |
443 v8::internal::AccountingAllocator allocator; | 504 v8::internal::AccountingAllocator allocator; |
444 Zone zone(&allocator, ZONE_NAME); | 505 Zone zone(&allocator, ZONE_NAME); |
445 ZoneBuffer buffer(&zone); | 506 ZoneBuffer buffer(&zone); |
446 WasmSerializationTest::BuildWireBytes(&zone, &buffer); | 507 WasmSerializationTest::BuildWireBytes(&zone, &buffer); |
447 Isolate* isolate = CcTest::InitIsolateOnce(); | 508 Isolate* isolate = CcTest::InitIsolateOnce(); |
448 HandleScope scope(isolate); | 509 HandleScope scope(isolate); |
449 testing::SetupIsolateForWasmModule(isolate); | 510 testing::SetupIsolateForWasmModule(isolate); |
(...skipping 619 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1069 ModuleOrigin::kWasmOrigin); | 1130 ModuleOrigin::kWasmOrigin); |
1070 CHECK_EQ(kExpectedValue, result); | 1131 CHECK_EQ(kExpectedValue, result); |
1071 // Free the buffer as the tracker does not know about it. | 1132 // Free the buffer as the tracker does not know about it. |
1072 if (!memory->has_guard_region()) { | 1133 if (!memory->has_guard_region()) { |
1073 isolate->array_buffer_allocator()->Free( | 1134 isolate->array_buffer_allocator()->Free( |
1074 memory->backing_store(), NumberToSize(memory->byte_length())); | 1135 memory->backing_store(), NumberToSize(memory->byte_length())); |
1075 } | 1136 } |
1076 } | 1137 } |
1077 Cleanup(); | 1138 Cleanup(); |
1078 } | 1139 } |
OLD | NEW |