|  | // Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file | 
|  | // for details. All rights reserved. Use of this source code is governed by a | 
|  | // BSD-style license that can be found in the LICENSE file. | 
|  |  | 
|  | #include "vm/compiler/assembler/disassembler.h" | 
|  | #include "vm/compiler/assembler/assembler.h" | 
|  | #include "vm/unit_test.h" | 
|  | #include "vm/virtual_memory.h" | 
|  |  | 
|  | namespace dart { | 
|  |  | 
|  | #if !defined(PRODUCT) | 
|  |  | 
|  | ISOLATE_UNIT_TEST_CASE(Disassembler) { | 
|  | compiler::ObjectPoolBuilder object_pool_builder; | 
|  | compiler::Assembler assembler(&object_pool_builder); | 
|  |  | 
|  | // The used instructions work on all platforms. | 
|  | Register reg = static_cast<Register>(0); | 
|  | assembler.PopRegister(reg); | 
|  | assembler.Stop("testing disassembler"); | 
|  |  | 
|  | // Only verify that the disassembler does not crash. | 
|  | AssemblerTest test("Disassembler", &assembler, Thread::Current()->zone()); | 
|  | test.Assemble(); | 
|  | Disassembler::Disassemble(test.entry(), test.entry() + assembler.CodeSize()); | 
|  | } | 
|  |  | 
|  | ISOLATE_UNIT_TEST_CASE(Disassembler_InvalidInput) { | 
|  | // Test that Disassembler doesn't crash even if the input is nonsense. | 
|  | uint32_t bad_input[] = { | 
|  | 0x00000000, 0xFFFFFFFF, 0x12345678, 0x9ABCDEF0, 0x01110001, | 
|  | 0xDEADC0DE, 0xBAADF00D, 0xDABADEEE, 0xDABAD111, 0xB000DEAD, | 
|  | 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, | 
|  | }; | 
|  | Disassembler::Disassemble( | 
|  | reinterpret_cast<uword>(&bad_input[0]), | 
|  | reinterpret_cast<uword>(ARRAY_SIZE(bad_input) + &bad_input[0])); | 
|  | } | 
|  |  | 
|  | #endif  // !PRODUCT | 
|  |  | 
|  | }  // namespace dart |