diff options
Diffstat (limited to 'src/processor/stackwalker_x86_unittest.cc')
-rw-r--r-- | src/processor/stackwalker_x86_unittest.cc | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/processor/stackwalker_x86_unittest.cc b/src/processor/stackwalker_x86_unittest.cc index bf76e881..25801a2a 100644 --- a/src/processor/stackwalker_x86_unittest.cc +++ b/src/processor/stackwalker_x86_unittest.cc @@ -181,6 +181,23 @@ TEST_F(GetContextFrame, Simple) { EXPECT_EQ(0, memcmp(&raw_context, &frame->context, sizeof(raw_context))); } +// The stackwalker should be able to produce the context frame even +// without stack memory present. +TEST_F(GetContextFrame, NoStackMemory) { + raw_context.eip = 0x40000200; + raw_context.ebp = 0x80000000; + + StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); + StackwalkerX86 walker(&system_info, &raw_context, NULL, &modules, + &frame_symbolizer); + ASSERT_TRUE(walker.Walk(&call_stack)); + frames = call_stack.frames(); + StackFrameX86 *frame = static_cast<StackFrameX86 *>(frames->at(0)); + // Check that the values from the original raw context made it + // through to the context in the stack frame. + EXPECT_EQ(0, memcmp(&raw_context, &frame->context, sizeof(raw_context))); +} + class GetCallerFrame: public StackwalkerX86Fixture, public Test { }; // Walk a traditional frame. A traditional frame saves the caller's |