aboutsummaryrefslogtreecommitdiff
path: root/src/processor/stackwalker_x86_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/processor/stackwalker_x86_unittest.cc')
-rw-r--r--src/processor/stackwalker_x86_unittest.cc73
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());