diff options
Diffstat (limited to 'src/processor/stackwalker_x86_unittest.cc')
-rw-r--r-- | src/processor/stackwalker_x86_unittest.cc | 73 |
1 files changed, 57 insertions, 16 deletions
diff --git a/src/processor/stackwalker_x86_unittest.cc b/src/processor/stackwalker_x86_unittest.cc index 841ad0d8..caf899e6 100644 --- a/src/processor/stackwalker_x86_unittest.cc +++ b/src/processor/stackwalker_x86_unittest.cc @@ -40,6 +40,7 @@ #include "google_breakpad/common/minidump_format.h" #include "google_breakpad/processor/basic_source_line_resolver.h" #include "google_breakpad/processor/call_stack.h" +#include "google_breakpad/processor/code_module.h" #include "google_breakpad/processor/source_line_resolver_interface.h" #include "google_breakpad/processor/stack_frame_cpu.h" #include "processor/stackwalker_unittest_utils.h" @@ -48,6 +49,7 @@ using google_breakpad::BasicSourceLineResolver; using google_breakpad::CallStack; +using google_breakpad::CodeModule; using google_breakpad::StackFrameSymbolizer; using google_breakpad::StackFrame; using google_breakpad::StackFrameX86; @@ -153,7 +155,10 @@ TEST_F(SanityCheck, NoResolver) { StackwalkerX86 walker(&system_info, &raw_context, &stack_region, &modules, &frame_symbolizer); // This should succeed, even without a resolver or supplier. - ASSERT_TRUE(walker.Walk(&call_stack)); + vector<const CodeModule*> modules_without_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + ASSERT_EQ(1U, modules_without_symbols.size()); + ASSERT_EQ("module1", modules_without_symbols[0]->debug_file()); frames = call_stack.frames(); StackFrameX86 *frame = static_cast<StackFrameX86 *>(frames->at(0)); // Check that the values from the original raw context made it @@ -173,7 +178,10 @@ TEST_F(GetContextFrame, Simple) { StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); StackwalkerX86 walker(&system_info, &raw_context, &stack_region, &modules, &frame_symbolizer); - ASSERT_TRUE(walker.Walk(&call_stack)); + vector<const CodeModule*> modules_without_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + ASSERT_EQ(1U, modules_without_symbols.size()); + ASSERT_EQ("module1", modules_without_symbols[0]->debug_file()); frames = call_stack.frames(); StackFrameX86 *frame = static_cast<StackFrameX86 *>(frames->at(0)); // Check that the values from the original raw context made it @@ -190,7 +198,10 @@ TEST_F(GetContextFrame, NoStackMemory) { StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); StackwalkerX86 walker(&system_info, &raw_context, NULL, &modules, &frame_symbolizer); - ASSERT_TRUE(walker.Walk(&call_stack)); + vector<const CodeModule*> modules_without_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + ASSERT_EQ(1U, modules_without_symbols.size()); + ASSERT_EQ("module1", modules_without_symbols[0]->debug_file()); frames = call_stack.frames(); StackFrameX86 *frame = static_cast<StackFrameX86 *>(frames->at(0)); // Check that the values from the original raw context made it @@ -223,7 +234,10 @@ TEST_F(GetCallerFrame, Traditional) { StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); StackwalkerX86 walker(&system_info, &raw_context, &stack_region, &modules, &frame_symbolizer); - ASSERT_TRUE(walker.Walk(&call_stack)); + vector<const CodeModule*> modules_without_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + ASSERT_EQ(1U, modules_without_symbols.size()); + ASSERT_EQ("module1", modules_without_symbols[0]->debug_file()); frames = call_stack.frames(); ASSERT_EQ(2U, frames->size()); @@ -279,7 +293,10 @@ TEST_F(GetCallerFrame, TraditionalScan) { StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); StackwalkerX86 walker(&system_info, &raw_context, &stack_region, &modules, &frame_symbolizer); - ASSERT_TRUE(walker.Walk(&call_stack)); + vector<const CodeModule*> modules_without_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + ASSERT_EQ(1U, modules_without_symbols.size()); + ASSERT_EQ("module1", modules_without_symbols[0]->debug_file()); frames = call_stack.frames(); ASSERT_EQ(2U, frames->size()); @@ -341,7 +358,10 @@ TEST_F(GetCallerFrame, TraditionalScanLongWay) { StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); StackwalkerX86 walker(&system_info, &raw_context, &stack_region, &modules, &frame_symbolizer); - ASSERT_TRUE(walker.Walk(&call_stack)); + vector<const CodeModule*> modules_without_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + ASSERT_EQ(1U, modules_without_symbols.size()); + ASSERT_EQ("module1", modules_without_symbols[0]->debug_file()); frames = call_stack.frames(); ASSERT_EQ(2U, frames->size()); @@ -413,7 +433,9 @@ TEST_F(GetCallerFrame, WindowsFrameData) { StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); StackwalkerX86 walker(&system_info, &raw_context, &stack_region, &modules, &frame_symbolizer); - ASSERT_TRUE(walker.Walk(&call_stack)); + vector<const CodeModule*> modules_without_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + ASSERT_EQ(0U, modules_without_symbols.size()); frames = call_stack.frames(); ASSERT_EQ(2U, frames->size()); @@ -485,7 +507,10 @@ TEST_F(GetCallerFrame, WindowsFrameDataAligned) { StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); StackwalkerX86 walker(&system_info, &raw_context, &stack_region, &modules, &frame_symbolizer); - ASSERT_TRUE(walker.Walk(&call_stack)); + vector<const CodeModule*> modules_without_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + ASSERT_EQ(1U, modules_without_symbols.size()); + ASSERT_EQ("module2", modules_without_symbols[0]->debug_file()); frames = call_stack.frames(); ASSERT_EQ(2U, frames->size()); @@ -568,7 +593,9 @@ TEST_F(GetCallerFrame, WindowsFrameDataParameterSize) { StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); StackwalkerX86 walker(&system_info, &raw_context, &stack_region, &modules, &frame_symbolizer); - ASSERT_TRUE(walker.Walk(&call_stack)); + vector<const CodeModule*> modules_without_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + ASSERT_EQ(0U, modules_without_symbols.size()); frames = call_stack.frames(); ASSERT_EQ(3U, frames->size()); @@ -663,7 +690,9 @@ TEST_F(GetCallerFrame, WindowsFrameDataScan) { StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); StackwalkerX86 walker(&system_info, &raw_context, &stack_region, &modules, &frame_symbolizer); - ASSERT_TRUE(walker.Walk(&call_stack)); + vector<const CodeModule*> modules_without_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + ASSERT_EQ(0U, modules_without_symbols.size()); frames = call_stack.frames(); ASSERT_EQ(2U, frames->size()); @@ -747,7 +776,9 @@ TEST_F(GetCallerFrame, WindowsFrameDataBadEIPScan) { StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); StackwalkerX86 walker(&system_info, &raw_context, &stack_region, &modules, &frame_symbolizer); - ASSERT_TRUE(walker.Walk(&call_stack)); + vector<const CodeModule*> modules_without_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + ASSERT_EQ(0U, modules_without_symbols.size()); frames = call_stack.frames(); ASSERT_EQ(2U, frames->size()); @@ -815,7 +846,9 @@ TEST_F(GetCallerFrame, WindowsFPOUnchangedEBP) { StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); StackwalkerX86 walker(&system_info, &raw_context, &stack_region, &modules, &frame_symbolizer); - ASSERT_TRUE(walker.Walk(&call_stack)); + vector<const CodeModule*> modules_without_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + ASSERT_EQ(0U, modules_without_symbols.size()); frames = call_stack.frames(); ASSERT_EQ(2U, frames->size()); @@ -892,7 +925,9 @@ TEST_F(GetCallerFrame, WindowsFPOUsedEBP) { StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); StackwalkerX86 walker(&system_info, &raw_context, &stack_region, &modules, &frame_symbolizer); - ASSERT_TRUE(walker.Walk(&call_stack)); + vector<const CodeModule*> modules_without_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + ASSERT_EQ(0U, modules_without_symbols.size()); frames = call_stack.frames(); ASSERT_EQ(2U, frames->size()); @@ -1030,7 +1065,9 @@ TEST_F(GetCallerFrame, WindowsFPOSystemCall) { StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); StackwalkerX86 walker(&system_info, &raw_context, &stack_region, &modules, &frame_symbolizer); - ASSERT_TRUE(walker.Walk(&call_stack)); + vector<const CodeModule*> modules_without_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + ASSERT_EQ(0U, modules_without_symbols.size()); frames = call_stack.frames(); ASSERT_EQ(4U, frames->size()); @@ -1238,7 +1275,9 @@ TEST_F(GetCallerFrame, ReturnAddressIsNotInKnownModule) { StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); StackwalkerX86 walker(&system_info, &raw_context, &stack_region, &local_modules, &frame_symbolizer); - ASSERT_TRUE(walker.Walk(&call_stack)); + vector<const CodeModule*> modules_without_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + ASSERT_EQ(0U, modules_without_symbols.size()); frames = call_stack.frames(); ASSERT_EQ(3U, frames->size()); @@ -1365,7 +1404,9 @@ struct CFIFixture: public StackwalkerX86Fixture { StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); StackwalkerX86 walker(&system_info, &raw_context, &stack_region, &modules, &frame_symbolizer); - ASSERT_TRUE(walker.Walk(&call_stack)); + vector<const CodeModule*> modules_without_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + ASSERT_EQ(0U, modules_without_symbols.size()); frames = call_stack.frames(); ASSERT_EQ(2U, frames->size()); |