Fix compiler warnings on Ubuntu Precise. Pull in gmock r408 in the process.
BUG=490 Review URL: https://breakpad.appspot.com/448002 git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@1034 4c0a9323-5329-0410-9bdc-e9ce6186880e
This commit is contained in:
@@ -92,41 +92,41 @@ unsigned char read_cmp[] =
|
||||
TEST(DisassemblerX86Test, SimpleReturnInstruction) {
|
||||
DisassemblerX86 dis(just_return, sizeof(just_return)-1, 0);
|
||||
EXPECT_EQ(1, dis.NextInstruction());
|
||||
EXPECT_EQ(true, dis.currentInstructionValid());
|
||||
EXPECT_TRUE(dis.currentInstructionValid());
|
||||
EXPECT_EQ(0, dis.flags());
|
||||
EXPECT_EQ(true, dis.endOfBlock());
|
||||
EXPECT_TRUE(dis.endOfBlock());
|
||||
EXPECT_EQ(libdis::insn_controlflow, dis.currentInstructionGroup());
|
||||
const libdis::x86_insn_t* instruction = dis.currentInstruction();
|
||||
EXPECT_EQ(libdis::insn_controlflow, instruction->group);
|
||||
EXPECT_EQ(libdis::insn_return, instruction->type);
|
||||
EXPECT_EQ(0, dis.NextInstruction());
|
||||
EXPECT_EQ(false, dis.currentInstructionValid());
|
||||
EXPECT_FALSE(dis.currentInstructionValid());
|
||||
EXPECT_EQ(NULL, dis.currentInstruction());
|
||||
}
|
||||
|
||||
TEST(DisassemblerX86Test, SimpleInvalidInstruction) {
|
||||
DisassemblerX86 dis(invalid_instruction, sizeof(invalid_instruction)-1, 0);
|
||||
EXPECT_EQ(0, dis.NextInstruction());
|
||||
EXPECT_EQ(false, dis.currentInstructionValid());
|
||||
EXPECT_FALSE(dis.currentInstructionValid());
|
||||
}
|
||||
|
||||
TEST(DisassemblerX86Test, BadReadLeadsToBranch) {
|
||||
DisassemblerX86 dis(read_eax_jmp_eax, sizeof(read_eax_jmp_eax)-1, 0);
|
||||
EXPECT_EQ(2, dis.NextInstruction());
|
||||
EXPECT_EQ(true, dis.currentInstructionValid());
|
||||
EXPECT_TRUE(dis.currentInstructionValid());
|
||||
EXPECT_EQ(0, dis.flags());
|
||||
EXPECT_EQ(false, dis.endOfBlock());
|
||||
EXPECT_FALSE(dis.endOfBlock());
|
||||
EXPECT_EQ(libdis::insn_move, dis.currentInstructionGroup());
|
||||
EXPECT_EQ(true, dis.setBadRead());
|
||||
EXPECT_TRUE(dis.setBadRead());
|
||||
EXPECT_EQ(2, dis.NextInstruction());
|
||||
EXPECT_EQ(true, dis.currentInstructionValid());
|
||||
EXPECT_TRUE(dis.currentInstructionValid());
|
||||
EXPECT_EQ(0, dis.flags());
|
||||
EXPECT_EQ(false, dis.endOfBlock());
|
||||
EXPECT_FALSE(dis.endOfBlock());
|
||||
EXPECT_EQ(libdis::insn_logic, dis.currentInstructionGroup());
|
||||
EXPECT_EQ(2, dis.NextInstruction());
|
||||
EXPECT_EQ(true, dis.currentInstructionValid());
|
||||
EXPECT_TRUE(dis.currentInstructionValid());
|
||||
EXPECT_EQ(google_breakpad::DISX86_BAD_BRANCH_TARGET, dis.flags());
|
||||
EXPECT_EQ(false, dis.endOfBlock());
|
||||
EXPECT_FALSE(dis.endOfBlock());
|
||||
EXPECT_EQ(libdis::insn_controlflow, dis.currentInstructionGroup());
|
||||
}
|
||||
|
||||
@@ -134,111 +134,110 @@ TEST(DisassemblerX86Test, BadWriteLeadsToPushedArg) {
|
||||
DisassemblerX86 dis(write_eax_arg_to_call,
|
||||
sizeof(write_eax_arg_to_call)-1, 0);
|
||||
EXPECT_EQ(6, dis.NextInstruction());
|
||||
EXPECT_EQ(true, dis.currentInstructionValid());
|
||||
EXPECT_TRUE(dis.currentInstructionValid());
|
||||
EXPECT_EQ(0, dis.flags());
|
||||
EXPECT_EQ(false, dis.endOfBlock());
|
||||
EXPECT_FALSE(dis.endOfBlock());
|
||||
EXPECT_EQ(libdis::insn_move, dis.currentInstructionGroup());
|
||||
EXPECT_EQ(true, dis.setBadWrite());
|
||||
EXPECT_TRUE(dis.setBadWrite());
|
||||
EXPECT_EQ(3, dis.NextInstruction());
|
||||
EXPECT_EQ(true, dis.currentInstructionValid());
|
||||
EXPECT_TRUE(dis.currentInstructionValid());
|
||||
EXPECT_EQ(0, dis.flags());
|
||||
EXPECT_EQ(false, dis.endOfBlock());
|
||||
EXPECT_FALSE(dis.endOfBlock());
|
||||
EXPECT_EQ(libdis::insn_arithmetic, dis.currentInstructionGroup());
|
||||
EXPECT_EQ(1, dis.NextInstruction());
|
||||
EXPECT_EQ(true, dis.currentInstructionValid());
|
||||
EXPECT_TRUE(dis.currentInstructionValid());
|
||||
EXPECT_EQ(0, dis.flags());
|
||||
EXPECT_EQ(false, dis.endOfBlock());
|
||||
EXPECT_FALSE(dis.endOfBlock());
|
||||
EXPECT_EQ(5, dis.NextInstruction());
|
||||
EXPECT_EQ(true, dis.currentInstructionValid());
|
||||
EXPECT_TRUE(dis.currentInstructionValid());
|
||||
EXPECT_EQ(google_breakpad::DISX86_BAD_ARGUMENT_PASSED, dis.flags());
|
||||
EXPECT_EQ(libdis::insn_controlflow, dis.currentInstructionGroup());
|
||||
EXPECT_EQ(false, dis.endOfBlock());
|
||||
EXPECT_FALSE(dis.endOfBlock());
|
||||
}
|
||||
|
||||
|
||||
TEST(DisassemblerX86Test, BadReadLeadsToBlockWrite) {
|
||||
DisassemblerX86 dis(read_edi_stosb, sizeof(read_edi_stosb)-1, 0);
|
||||
EXPECT_EQ(2, dis.NextInstruction());
|
||||
EXPECT_EQ(true, dis.currentInstructionValid());
|
||||
EXPECT_TRUE(dis.currentInstructionValid());
|
||||
EXPECT_EQ(0, dis.flags());
|
||||
EXPECT_EQ(false, dis.endOfBlock());
|
||||
EXPECT_FALSE(dis.endOfBlock());
|
||||
EXPECT_EQ(libdis::insn_move, dis.currentInstructionGroup());
|
||||
EXPECT_EQ(true, dis.setBadRead());
|
||||
EXPECT_TRUE(dis.setBadRead());
|
||||
EXPECT_EQ(2, dis.NextInstruction());
|
||||
EXPECT_EQ(true, dis.currentInstructionValid());
|
||||
EXPECT_TRUE(dis.currentInstructionValid());
|
||||
EXPECT_EQ(0, dis.flags());
|
||||
EXPECT_EQ(false, dis.endOfBlock());
|
||||
EXPECT_FALSE(dis.endOfBlock());
|
||||
EXPECT_EQ(libdis::insn_move, dis.currentInstructionGroup());
|
||||
EXPECT_EQ(2, dis.NextInstruction());
|
||||
EXPECT_EQ(true, dis.currentInstructionValid());
|
||||
EXPECT_TRUE(dis.currentInstructionValid());
|
||||
EXPECT_EQ(google_breakpad::DISX86_BAD_BLOCK_WRITE, dis.flags());
|
||||
EXPECT_EQ(false, dis.endOfBlock());
|
||||
EXPECT_FALSE(dis.endOfBlock());
|
||||
EXPECT_EQ(libdis::insn_string, dis.currentInstructionGroup());
|
||||
}
|
||||
|
||||
TEST(DisassemblerX86Test, BadReadClobberThenWrite) {
|
||||
DisassemblerX86 dis(read_clobber_write, sizeof(read_clobber_write)-1, 0);
|
||||
EXPECT_EQ(2, dis.NextInstruction());
|
||||
EXPECT_EQ(true, dis.currentInstructionValid());
|
||||
EXPECT_TRUE(dis.currentInstructionValid());
|
||||
EXPECT_EQ(0, dis.flags());
|
||||
EXPECT_EQ(false, dis.endOfBlock());
|
||||
EXPECT_FALSE(dis.endOfBlock());
|
||||
EXPECT_EQ(libdis::insn_arithmetic, dis.currentInstructionGroup());
|
||||
EXPECT_EQ(true, dis.setBadRead());
|
||||
EXPECT_TRUE(dis.setBadRead());
|
||||
EXPECT_EQ(2, dis.NextInstruction());
|
||||
EXPECT_EQ(true, dis.currentInstructionValid());
|
||||
EXPECT_TRUE(dis.currentInstructionValid());
|
||||
EXPECT_EQ(0, dis.flags());
|
||||
EXPECT_EQ(false, dis.endOfBlock());
|
||||
EXPECT_FALSE(dis.endOfBlock());
|
||||
EXPECT_EQ(libdis::insn_move, dis.currentInstructionGroup());
|
||||
EXPECT_EQ(2, dis.NextInstruction());
|
||||
EXPECT_EQ(true, dis.currentInstructionValid());
|
||||
EXPECT_TRUE(dis.currentInstructionValid());
|
||||
EXPECT_EQ(0, dis.flags());
|
||||
EXPECT_EQ(false, dis.endOfBlock());
|
||||
EXPECT_FALSE(dis.endOfBlock());
|
||||
EXPECT_EQ(libdis::insn_move, dis.currentInstructionGroup());
|
||||
}
|
||||
|
||||
TEST(DisassemblerX86Test, BadReadXCHGThenWrite) {
|
||||
DisassemblerX86 dis(read_xchg_write, sizeof(read_xchg_write)-1, 0);
|
||||
EXPECT_EQ(2, dis.NextInstruction());
|
||||
EXPECT_EQ(true, dis.currentInstructionValid());
|
||||
EXPECT_TRUE(dis.currentInstructionValid());
|
||||
EXPECT_EQ(0, dis.flags());
|
||||
EXPECT_EQ(false, dis.endOfBlock());
|
||||
EXPECT_FALSE(dis.endOfBlock());
|
||||
EXPECT_EQ(libdis::insn_arithmetic, dis.currentInstructionGroup());
|
||||
EXPECT_EQ(true, dis.setBadRead());
|
||||
EXPECT_TRUE(dis.setBadRead());
|
||||
EXPECT_EQ(1, dis.NextInstruction());
|
||||
EXPECT_EQ(true, dis.currentInstructionValid());
|
||||
EXPECT_TRUE(dis.currentInstructionValid());
|
||||
EXPECT_EQ(0, dis.flags());
|
||||
EXPECT_EQ(false, dis.endOfBlock());
|
||||
EXPECT_FALSE(dis.endOfBlock());
|
||||
EXPECT_EQ(libdis::insn_move, dis.currentInstructionGroup());
|
||||
EXPECT_EQ(2, dis.NextInstruction());
|
||||
EXPECT_EQ(true, dis.currentInstructionValid());
|
||||
EXPECT_TRUE(dis.currentInstructionValid());
|
||||
EXPECT_EQ(0, dis.flags());
|
||||
EXPECT_EQ(false, dis.endOfBlock());
|
||||
EXPECT_FALSE(dis.endOfBlock());
|
||||
EXPECT_EQ(libdis::insn_move, dis.currentInstructionGroup());
|
||||
EXPECT_EQ(2, dis.NextInstruction());
|
||||
EXPECT_EQ(true, dis.currentInstructionValid());
|
||||
EXPECT_TRUE(dis.currentInstructionValid());
|
||||
EXPECT_EQ(google_breakpad::DISX86_BAD_WRITE, dis.flags());
|
||||
EXPECT_EQ(false, dis.endOfBlock());
|
||||
EXPECT_FALSE(dis.endOfBlock());
|
||||
EXPECT_EQ(libdis::insn_move, dis.currentInstructionGroup());
|
||||
}
|
||||
|
||||
TEST(DisassemblerX86Test, BadReadThenCMP) {
|
||||
DisassemblerX86 dis(read_cmp, sizeof(read_cmp)-1, 0);
|
||||
EXPECT_EQ(2, dis.NextInstruction());
|
||||
EXPECT_EQ(true, dis.currentInstructionValid());
|
||||
EXPECT_TRUE(dis.currentInstructionValid());
|
||||
EXPECT_EQ(0, dis.flags());
|
||||
EXPECT_EQ(false, dis.endOfBlock());
|
||||
EXPECT_FALSE(dis.endOfBlock());
|
||||
EXPECT_EQ(libdis::insn_arithmetic, dis.currentInstructionGroup());
|
||||
EXPECT_EQ(true, dis.setBadRead());
|
||||
EXPECT_TRUE(dis.setBadRead());
|
||||
EXPECT_EQ(3, dis.NextInstruction());
|
||||
EXPECT_EQ(true, dis.currentInstructionValid());
|
||||
EXPECT_TRUE(dis.currentInstructionValid());
|
||||
EXPECT_EQ(google_breakpad::DISX86_BAD_COMPARISON, dis.flags());
|
||||
EXPECT_EQ(false, dis.endOfBlock());
|
||||
EXPECT_FALSE(dis.endOfBlock());
|
||||
EXPECT_EQ(libdis::insn_comparison, dis.currentInstructionGroup());
|
||||
EXPECT_EQ(2, dis.NextInstruction());
|
||||
EXPECT_EQ(true, dis.currentInstructionValid());
|
||||
EXPECT_TRUE(dis.currentInstructionValid());
|
||||
EXPECT_EQ(google_breakpad::DISX86_BAD_COMPARISON, dis.flags());
|
||||
EXPECT_EQ(false, dis.endOfBlock());
|
||||
EXPECT_FALSE(dis.endOfBlock());
|
||||
EXPECT_EQ(libdis::insn_controlflow, dis.currentInstructionGroup());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user