mirror of
https://git.suyu.dev/suyu/breakpad.git
synced 2026-01-02 12:44:38 +01:00
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:
parent
ba7e0d9657
commit
44c27420e2
4 changed files with 220 additions and 127 deletions
|
|
@ -102,9 +102,9 @@ class StringAssembler: public Section {
|
|||
|
||||
in_cu_ = true;
|
||||
}
|
||||
|
||||
|
||||
// Finish off the current CU's strings.
|
||||
size_t EndCU() {
|
||||
size_t EndCU() {
|
||||
assert(in_cu_);
|
||||
in_cu_ = false;
|
||||
return Size() - cu_start_;
|
||||
|
|
@ -127,7 +127,7 @@ class StringAssembler: public Section {
|
|||
class StabsAssembler: public Section {
|
||||
public:
|
||||
// Create a StabsAssembler that uses StringAssembler for its strings.
|
||||
StabsAssembler(StringAssembler *string_assembler)
|
||||
StabsAssembler(StringAssembler *string_assembler)
|
||||
: Section(string_assembler->endianness()),
|
||||
string_assembler_(string_assembler),
|
||||
value_size_(0),
|
||||
|
|
@ -188,7 +188,7 @@ class StabsAssembler: public Section {
|
|||
cu_header_ = NULL;
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
private:
|
||||
// Data used in a compilation unit header STAB that we won't know until
|
||||
// we've finished the compilation unit.
|
||||
|
|
@ -265,19 +265,19 @@ TEST_F(Stabs, MockStabsInput) {
|
|||
stabs.set_value_size(4);
|
||||
stabs
|
||||
.Stab(N_SO, 149, 40232, 0x18a2a72bU, "builddir/")
|
||||
.Stab(N_FUN, 83, 50010, 0x91a5353fU,
|
||||
.Stab(N_FUN, 83, 50010, 0x91a5353fU,
|
||||
"not the SO with source file name we expected ")
|
||||
.Stab(N_SO, 165, 24791, 0xfe69d23cU, "")
|
||||
.Stab(N_SO, 184, 34178, 0xca4d883aU, "builddir1/")
|
||||
.Stab(N_SO, 83, 40859, 0xd2fe5df3U, "file1.c")
|
||||
.Stab(N_LSYM, 147, 39565, 0x60d4bb8aU, "not the FUN we're looking for")
|
||||
.Stab(N_FUN, 120, 50271, 0xa049f4b1U, "fun1")
|
||||
.Stab(N_BINCL, 150, 15694, 0xef65c659U,
|
||||
.Stab(N_BINCL, 150, 15694, 0xef65c659U,
|
||||
"something to ignore in a FUN body")
|
||||
.Stab(N_SLINE, 147, 4967, 0xd904b3f, "")
|
||||
.Stab(N_SOL, 177, 56135, 0xbd97b1dcU, "header.h")
|
||||
.Stab(N_SLINE, 130, 24610, 0x90f145b, "")
|
||||
.Stab(N_FUN, 45, 32441, 0xbf27cf93U,
|
||||
.Stab(N_FUN, 45, 32441, 0xbf27cf93U,
|
||||
"fun2:some stabs type info here:to trim from the name")
|
||||
.Stab(N_SLINE, 138, 39002, 0x8148b87, "")
|
||||
.Stab(N_SOL, 60, 49318, 0x1d06e025U, "file1.c")
|
||||
|
|
@ -316,7 +316,7 @@ TEST_F(Stabs, MockStabsInput) {
|
|||
.WillOnce(Return(true));
|
||||
EXPECT_CALL(mock_handler, EndCompilationUnit(0xd04b7448U))
|
||||
.WillOnce(Return(true));
|
||||
EXPECT_CALL(mock_handler, StartCompilationUnit(StrEq("file3.c"),
|
||||
EXPECT_CALL(mock_handler, StartCompilationUnit(StrEq("file3.c"),
|
||||
0x11759f10U, NULL))
|
||||
.WillOnce(Return(true));
|
||||
EXPECT_CALL(mock_handler, EndCompilationUnit(0x11cfe4b5U))
|
||||
|
|
@ -337,7 +337,7 @@ TEST_F(Stabs, AbruptCU) {
|
|||
EXPECT_CALL(mock_handler,
|
||||
StartCompilationUnit(StrEq("file2-1.c"), 0xbf10d5e4, NULL))
|
||||
.WillOnce(Return(true));
|
||||
EXPECT_CALL(mock_handler, EndCompilationUnit(NULL))
|
||||
EXPECT_CALL(mock_handler, EndCompilationUnit(0))
|
||||
.WillOnce(Return(true));
|
||||
}
|
||||
|
||||
|
|
@ -359,9 +359,9 @@ TEST_F(Stabs, AbruptFunction) {
|
|||
.WillOnce(Return(true));
|
||||
EXPECT_CALL(mock_handler, StartFunction(StrEq("fun3_1"), 0xbbd4a145U))
|
||||
.WillOnce(Return(true));
|
||||
EXPECT_CALL(mock_handler, EndFunction(NULL))
|
||||
EXPECT_CALL(mock_handler, EndFunction(0))
|
||||
.WillOnce(Return(true));
|
||||
EXPECT_CALL(mock_handler, EndCompilationUnit(NULL))
|
||||
EXPECT_CALL(mock_handler, EndCompilationUnit(0))
|
||||
.WillOnce(Return(true));
|
||||
}
|
||||
|
||||
|
|
@ -394,12 +394,12 @@ TEST_F(Stabs, NoCUEnd) {
|
|||
EXPECT_CALL(mock_handler,
|
||||
StartCompilationUnit(StrEq("file5-1.c"), 0x2f7493c9U, NULL))
|
||||
.WillOnce(Return(true));
|
||||
EXPECT_CALL(mock_handler, EndCompilationUnit(NULL))
|
||||
EXPECT_CALL(mock_handler, EndCompilationUnit(0))
|
||||
.WillOnce(Return(true));
|
||||
EXPECT_CALL(mock_handler,
|
||||
StartCompilationUnit(StrEq("file5-2.c"), 0xf9f1d50fU, NULL))
|
||||
.WillOnce(Return(true));
|
||||
EXPECT_CALL(mock_handler, EndCompilationUnit(NULL))
|
||||
EXPECT_CALL(mock_handler, EndCompilationUnit(0))
|
||||
.WillOnce(Return(true));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue