diff options
author | SiyangXie@gmail.com <SiyangXie@gmail.com@4c0a9323-5329-0410-9bdc-e9ce6186880e> | 2012-10-10 21:41:52 +0000 |
---|---|---|
committer | SiyangXie@gmail.com <SiyangXie@gmail.com@4c0a9323-5329-0410-9bdc-e9ce6186880e> | 2012-10-10 21:41:52 +0000 |
commit | bab770045bb2cdedce4046400544904fc40c6703 (patch) | |
tree | 48e0bf03581bbe0d393746a9051d564ae9e29c53 /src/processor/stackwalker_arm_unittest.cc | |
parent | Make Linux signal handler more robust. (diff) | |
download | breakpad-bab770045bb2cdedce4046400544904fc40c6703.tar.xz |
Refactor the logic of resolving source line info into helper class.
http://breakpad.appspot.com/459002/
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@1068 4c0a9323-5329-0410-9bdc-e9ce6186880e
Diffstat (limited to 'src/processor/stackwalker_arm_unittest.cc')
-rw-r--r-- | src/processor/stackwalker_arm_unittest.cc | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/src/processor/stackwalker_arm_unittest.cc b/src/processor/stackwalker_arm_unittest.cc index 10772ba4..88517b77 100644 --- a/src/processor/stackwalker_arm_unittest.cc +++ b/src/processor/stackwalker_arm_unittest.cc @@ -31,8 +31,8 @@ // stackwalker_arm_unittest.cc: Unit tests for StackwalkerARM class. -#include <string> #include <string.h> +#include <string> #include <vector> #include "breakpad_googletest_includes.h" @@ -49,6 +49,7 @@ using google_breakpad::BasicSourceLineResolver; using google_breakpad::CallStack; +using google_breakpad::StackFrameSymbolizer; using google_breakpad::StackFrame; using google_breakpad::StackFrameARM; using google_breakpad::StackwalkerARM; @@ -134,8 +135,9 @@ TEST_F(SanityCheck, NoResolver) { // Since we have no call frame information, and all unwinding // requires call frame information, the stack walk will end after // the first frame. + StackFrameSymbolizer frame_symbolizer(NULL, NULL); StackwalkerARM walker(&system_info, &raw_context, -1, &stack_region, &modules, - NULL, NULL); + &frame_symbolizer); // This should succeed even without a resolver or supplier. ASSERT_TRUE(walker.Walk(&call_stack)); frames = call_stack.frames(); @@ -152,8 +154,9 @@ TEST_F(GetContextFrame, Simple) { // Since we have no call frame information, and all unwinding // requires call frame information, the stack walk will end after // the first frame. + StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); StackwalkerARM walker(&system_info, &raw_context, -1, &stack_region, &modules, - &supplier, &resolver); + &frame_symbolizer); ASSERT_TRUE(walker.Walk(&call_stack)); frames = call_stack.frames(); ASSERT_EQ(1U, frames->size()); @@ -199,8 +202,9 @@ TEST_F(GetCallerFrame, ScanWithoutSymbols) { raw_context.iregs[MD_CONTEXT_ARM_REG_PC] = 0x40005510; raw_context.iregs[MD_CONTEXT_ARM_REG_SP] = stack_section.start().Value(); + StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); StackwalkerARM walker(&system_info, &raw_context, -1, &stack_region, &modules, - &supplier, &resolver); + &frame_symbolizer); ASSERT_TRUE(walker.Walk(&call_stack)); frames = call_stack.frames(); ASSERT_EQ(3U, frames->size()); @@ -262,8 +266,9 @@ TEST_F(GetCallerFrame, ScanWithFunctionSymbols) { // The calling frame's function. "FUNC 100 400 10 marsupial\n"); + StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); StackwalkerARM walker(&system_info, &raw_context, -1, &stack_region, &modules, - &supplier, &resolver); + &frame_symbolizer); ASSERT_TRUE(walker.Walk(&call_stack)); frames = call_stack.frames(); ASSERT_EQ(2U, frames->size()); @@ -372,8 +377,9 @@ struct CFIFixture: public StackwalkerARMFixture { RegionFromSection(); raw_context.iregs[MD_CONTEXT_ARM_REG_SP] = stack_section.start().Value(); + StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); StackwalkerARM walker(&system_info, &raw_context, -1, &stack_region, - &modules, &supplier, &resolver); + &modules, &frame_symbolizer); walker.SetContextFrameValidity(context_frame_validity); ASSERT_TRUE(walker.Walk(&call_stack)); frames = call_stack.frames(); @@ -564,8 +570,9 @@ TEST_F(CFI, RejectBackwards) { raw_context.iregs[MD_CONTEXT_ARM_REG_PC] = 0x40006000; raw_context.iregs[MD_CONTEXT_ARM_REG_SP] = 0x80000000; raw_context.iregs[MD_CONTEXT_ARM_REG_LR] = 0x40005510; + StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); StackwalkerARM walker(&system_info, &raw_context, -1, &stack_region, &modules, - &supplier, &resolver); + &frame_symbolizer); ASSERT_TRUE(walker.Walk(&call_stack)); frames = call_stack.frames(); ASSERT_EQ(1U, frames->size()); @@ -575,8 +582,9 @@ TEST_F(CFI, RejectBackwards) { TEST_F(CFI, RejectBadExpressions) { raw_context.iregs[MD_CONTEXT_ARM_REG_PC] = 0x40007000; raw_context.iregs[MD_CONTEXT_ARM_REG_SP] = 0x80000000; + StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); StackwalkerARM walker(&system_info, &raw_context, -1, &stack_region, &modules, - &supplier, &resolver); + &frame_symbolizer); ASSERT_TRUE(walker.Walk(&call_stack)); frames = call_stack.frames(); ASSERT_EQ(1U, frames->size()); @@ -631,8 +639,9 @@ TEST_F(GetFramesByFramePointer, OnlyFramePointer) { raw_context.iregs[MD_CONTEXT_ARM_REG_IOS_FP] = frame1_fp.Value(); raw_context.iregs[MD_CONTEXT_ARM_REG_SP] = stack_section.start().Value(); + StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); StackwalkerARM walker(&system_info, &raw_context, MD_CONTEXT_ARM_REG_IOS_FP, - &stack_region, &modules, &supplier, &resolver); + &stack_region, &modules, &frame_symbolizer); ASSERT_TRUE(walker.Walk(&call_stack)); frames = call_stack.frames(); @@ -720,8 +729,9 @@ TEST_F(GetFramesByFramePointer, FramePointerAndCFI) { raw_context.iregs[MD_CONTEXT_ARM_REG_IOS_FP] = frame1_fp.Value(); raw_context.iregs[MD_CONTEXT_ARM_REG_SP] = stack_section.start().Value(); + StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); StackwalkerARM walker(&system_info, &raw_context, MD_CONTEXT_ARM_REG_IOS_FP, - &stack_region, &modules, &supplier, &resolver); + &stack_region, &modules, &frame_symbolizer); ASSERT_TRUE(walker.Walk(&call_stack)); frames = call_stack.frames(); |