aboutsummaryrefslogtreecommitdiff
path: root/src/common/module_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/common/module_unittest.cc')
-rw-r--r--src/common/module_unittest.cc39
1 files changed, 36 insertions, 3 deletions
diff --git a/src/common/module_unittest.cc b/src/common/module_unittest.cc
index 39727554..c51162e5 100644
--- a/src/common/module_unittest.cc
+++ b/src/common/module_unittest.cc
@@ -30,6 +30,10 @@
// module_unittest.cc: Unit tests for google_breakpad::Module.
+#ifdef HAVE_CONFIG_H
+#include <config.h> // Must come first
+#endif
+
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
@@ -194,9 +198,7 @@ TEST(Module, WriteOmitUnusedFiles) {
function->lines.push_back(line1);
function->lines.push_back(line2);
m.AddFunction(function);
-
- std::set<Module::InlineOrigin*, Module::InlineOriginCompare> inline_origins;
- m.AssignSourceIds(inline_origins);
+ m.AssignSourceIds();
vector<Module::File*> vec;
m.GetFiles(&vec);
@@ -637,6 +639,37 @@ TEST(Module, ConstructFunctionsAndExternsWithSameAddress) {
}
// If there exists an extern and a function at the same address, only write
+// out the FUNC entry.
+TEST(Module, ConstructFunctionsAndExternsWithSameAddressPreferExternName) {
+ stringstream s;
+ Module m(MODULE_NAME, MODULE_OS, MODULE_ARCH, MODULE_ID, "", false, true);
+
+ // Two externs.
+ auto extern1 = std::make_unique<Module::Extern>(0xabc0);
+ extern1->name = "extern1";
+ auto extern2 = std::make_unique<Module::Extern>(0xfff0);
+ extern2->name = "extern2";
+
+ m.AddExtern(std::move(extern1));
+ m.AddExtern(std::move(extern2));
+
+ Module::Function* function = new Module::Function("function2", 0xfff0);
+ Module::Range range(0xfff0, 0x10);
+ function->ranges.push_back(range);
+ function->parameter_size = 0;
+ m.AddFunction(function);
+
+ m.Write(s, ALL_SYMBOL_DATA);
+ string contents = s.str();
+
+ EXPECT_STREQ("MODULE " MODULE_OS " " MODULE_ARCH " " MODULE_ID " " MODULE_NAME
+ "\n"
+ "FUNC fff0 10 0 extern2\n"
+ "PUBLIC abc0 0 extern1\n",
+ contents.c_str());
+}
+
+// If there exists an extern and a function at the same address, only write
// out the FUNC entry, and mark it with `m` if the multiple field is enabled.
TEST(Module, ConstructFunctionsAndExternsWithSameAddressMultiple) {
stringstream s;