blob: ab72b02c9774e226408e5a92c5b38e723de91921 [file] [log] [blame] [edit]
// 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