diff options
Diffstat (limited to 'src/processor/stackwalker_arm_unittest.cc')
-rw-r--r-- | src/processor/stackwalker_arm_unittest.cc | 63 |
1 files changed, 49 insertions, 14 deletions
diff --git a/src/processor/stackwalker_arm_unittest.cc b/src/processor/stackwalker_arm_unittest.cc index 29deac87..b50f4e99 100644 --- a/src/processor/stackwalker_arm_unittest.cc +++ b/src/processor/stackwalker_arm_unittest.cc @@ -91,7 +91,7 @@ class StackwalkerARMFixture { // By default, none of the modules have symbol info; call // SetModuleSymbols to override this. - EXPECT_CALL(supplier, GetCStringSymbolData(_, _, _, _)) + EXPECT_CALL(supplier, GetCStringSymbolData(_, _, _, _, _)) .WillRepeatedly(Return(MockSymbolSupplier::NOT_FOUND)); // Avoid GMOCK WARNING "Uninteresting mock function call - returning @@ -102,9 +102,11 @@ class StackwalkerARMFixture { // Set the Breakpad symbol information that supplier should return for // MODULE to INFO. void SetModuleSymbols(MockCodeModule *module, const string &info) { - char *buffer = supplier.CopySymbolDataAndOwnTheCopy(info); - EXPECT_CALL(supplier, GetCStringSymbolData(module, &system_info, _, _)) + size_t buffer_size; + char *buffer = supplier.CopySymbolDataAndOwnTheCopy(info, &buffer_size); + EXPECT_CALL(supplier, GetCStringSymbolData(module, &system_info, _, _, _)) .WillRepeatedly(DoAll(SetArgumentPointee<3>(buffer), + SetArgumentPointee<4>(buffer_size), Return(MockSymbolSupplier::FOUND))); } @@ -147,8 +149,11 @@ TEST_F(SanityCheck, NoResolver) { &frame_symbolizer); // This should succeed even without a resolver or supplier. vector<const CodeModule*> modules_without_symbols; - ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + vector<const CodeModule*> modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); ASSERT_EQ(0U, modules_without_symbols.size()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); frames = call_stack.frames(); ASSERT_EQ(1U, frames->size()); StackFrameARM *frame = static_cast<StackFrameARM *>(frames->at(0)); @@ -167,8 +172,11 @@ TEST_F(GetContextFrame, Simple) { StackwalkerARM walker(&system_info, &raw_context, -1, &stack_region, &modules, &frame_symbolizer); vector<const CodeModule*> modules_without_symbols; - ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + vector<const CodeModule*> modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); ASSERT_EQ(0U, modules_without_symbols.size()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); frames = call_stack.frames(); ASSERT_EQ(1U, frames->size()); StackFrameARM *frame = static_cast<StackFrameARM *>(frames->at(0)); @@ -184,8 +192,11 @@ TEST_F(GetContextFrame, NoStackMemory) { StackwalkerARM walker(&system_info, &raw_context, -1, NULL, &modules, &frame_symbolizer); vector<const CodeModule*> modules_without_symbols; - ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + vector<const CodeModule*> modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); ASSERT_EQ(0U, modules_without_symbols.size()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); frames = call_stack.frames(); ASSERT_EQ(1U, frames->size()); StackFrameARM *frame = static_cast<StackFrameARM *>(frames->at(0)); @@ -234,10 +245,13 @@ TEST_F(GetCallerFrame, ScanWithoutSymbols) { StackwalkerARM walker(&system_info, &raw_context, -1, &stack_region, &modules, &frame_symbolizer); vector<const CodeModule*> modules_without_symbols; - ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + vector<const CodeModule*> modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); ASSERT_EQ(2U, modules_without_symbols.size()); ASSERT_EQ("module1", modules_without_symbols[0]->debug_file()); ASSERT_EQ("module2", modules_without_symbols[1]->debug_file()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); frames = call_stack.frames(); ASSERT_EQ(3U, frames->size()); @@ -302,8 +316,11 @@ TEST_F(GetCallerFrame, ScanWithFunctionSymbols) { StackwalkerARM walker(&system_info, &raw_context, -1, &stack_region, &modules, &frame_symbolizer); vector<const CodeModule*> modules_without_symbols; - ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + vector<const CodeModule*> modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); ASSERT_EQ(0U, modules_without_symbols.size()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); frames = call_stack.frames(); ASSERT_EQ(2U, frames->size()); @@ -365,10 +382,13 @@ TEST_F(GetCallerFrame, ScanFirstFrame) { StackwalkerARM walker(&system_info, &raw_context, -1, &stack_region, &modules, &frame_symbolizer); vector<const CodeModule*> modules_without_symbols; - ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + vector<const CodeModule*> modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); ASSERT_EQ(2U, modules_without_symbols.size()); ASSERT_EQ("module1", modules_without_symbols[0]->debug_file()); ASSERT_EQ("module2", modules_without_symbols[1]->debug_file()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); frames = call_stack.frames(); ASSERT_EQ(2U, frames->size()); @@ -477,8 +497,11 @@ struct CFIFixture: public StackwalkerARMFixture { &modules, &frame_symbolizer); walker.SetContextFrameValidity(context_frame_validity); vector<const CodeModule*> modules_without_symbols; - ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + vector<const CodeModule*> modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); ASSERT_EQ(0U, modules_without_symbols.size()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); frames = call_stack.frames(); ASSERT_EQ(2U, frames->size()); @@ -671,8 +694,11 @@ TEST_F(CFI, RejectBackwards) { StackwalkerARM walker(&system_info, &raw_context, -1, &stack_region, &modules, &frame_symbolizer); vector<const CodeModule*> modules_without_symbols; - ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + vector<const CodeModule*> modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); ASSERT_EQ(0U, modules_without_symbols.size()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); frames = call_stack.frames(); ASSERT_EQ(1U, frames->size()); } @@ -685,8 +711,11 @@ TEST_F(CFI, RejectBadExpressions) { StackwalkerARM walker(&system_info, &raw_context, -1, &stack_region, &modules, &frame_symbolizer); vector<const CodeModule*> modules_without_symbols; - ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + vector<const CodeModule*> modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); ASSERT_EQ(0U, modules_without_symbols.size()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); frames = call_stack.frames(); ASSERT_EQ(1U, frames->size()); } @@ -745,10 +774,13 @@ TEST_F(GetFramesByFramePointer, OnlyFramePointer) { &stack_region, &modules, &frame_symbolizer); vector<const CodeModule*> modules_without_symbols; - ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + vector<const CodeModule*> modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); ASSERT_EQ(2U, modules_without_symbols.size()); ASSERT_EQ("module1", modules_without_symbols[0]->debug_file()); ASSERT_EQ("module2", modules_without_symbols[1]->debug_file()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); frames = call_stack.frames(); ASSERT_EQ(3U, frames->size()); @@ -839,9 +871,12 @@ TEST_F(GetFramesByFramePointer, FramePointerAndCFI) { &stack_region, &modules, &frame_symbolizer); vector<const CodeModule*> modules_without_symbols; - ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + vector<const CodeModule*> modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); ASSERT_EQ(1U, modules_without_symbols.size()); ASSERT_EQ("module2", modules_without_symbols[0]->debug_file()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); frames = call_stack.frames(); ASSERT_EQ(3U, frames->size()); |