- 3a9532fb2d6ae45c3cba44c9bb0dbdfc1558b7d3 Fix the description of Span::subspan(). by Abseil Team <absl-team@google.com>
- bae1a1c21924bd31fa7315eff05ea6158d9e7947 Port the symbolizer to Windows. by Derek Mauro <dmauro@google.com> - 2253c04c1a4f39d9581772f1dc4491878aa3831f Support absl::Hex() and absl::Dec() as arguments to absl:... by Jorg Brown <jorg@google.com> - 552c3ac259e9c254fda9244755487f3423d2fe4b Internal change by Jorg Brown <jorg@google.com> GitOrigin-RevId: 3a9532fb2d6ae45c3cba44c9bb0dbdfc1558b7d3 Change-Id: I448133c9bb6d837037c12b45a9a16a7945049453
This commit is contained in:
parent
af7882601a
commit
19b3c95727
10 changed files with 223 additions and 26 deletions
|
|
@ -90,8 +90,6 @@ static constexpr size_t kHpageSize = 1 << 21;
|
|||
const char kHpageTextPadding[kHpageSize * 4] ABSL_ATTRIBUTE_SECTION_VARIABLE(
|
||||
".text") = "";
|
||||
|
||||
#ifdef ABSL_INTERNAL_HAVE_ELF_SYMBOLIZE
|
||||
|
||||
static char try_symbolize_buffer[4096];
|
||||
|
||||
// A wrapper function for absl::Symbolize() to make the unit test simple. The
|
||||
|
|
@ -120,6 +118,8 @@ static const char *TrySymbolize(void *pc) {
|
|||
return TrySymbolizeWithLimit(pc, sizeof(try_symbolize_buffer));
|
||||
}
|
||||
|
||||
#ifdef ABSL_INTERNAL_HAVE_ELF_SYMBOLIZE
|
||||
|
||||
TEST(Symbolize, Cached) {
|
||||
// Compilers should give us pointers to them.
|
||||
EXPECT_STREQ("nonstatic_func", TrySymbolize((void *)(&nonstatic_func)));
|
||||
|
|
@ -442,6 +442,45 @@ void ABSL_ATTRIBUTE_NOINLINE TestWithReturnAddress() {
|
|||
#endif
|
||||
}
|
||||
|
||||
#elif defined(_WIN32) && defined(_DEBUG)
|
||||
|
||||
TEST(Symbolize, Basics) {
|
||||
EXPECT_STREQ("nonstatic_func", TrySymbolize((void *)(&nonstatic_func)));
|
||||
|
||||
// The name of an internal linkage symbol is not specified; allow either a
|
||||
// mangled or an unmangled name here.
|
||||
const char* static_func_symbol = TrySymbolize((void *)(&static_func));
|
||||
ASSERT_TRUE(static_func_symbol != nullptr);
|
||||
EXPECT_TRUE(strstr(static_func_symbol, "static_func") != nullptr);
|
||||
|
||||
EXPECT_TRUE(nullptr == TrySymbolize(nullptr));
|
||||
}
|
||||
|
||||
TEST(Symbolize, Truncation) {
|
||||
constexpr char kNonStaticFunc[] = "nonstatic_func";
|
||||
EXPECT_STREQ("nonstatic_func",
|
||||
TrySymbolizeWithLimit((void *)(&nonstatic_func),
|
||||
strlen(kNonStaticFunc) + 1));
|
||||
EXPECT_STREQ("nonstatic_...",
|
||||
TrySymbolizeWithLimit((void *)(&nonstatic_func),
|
||||
strlen(kNonStaticFunc) + 0));
|
||||
EXPECT_STREQ("nonstatic...",
|
||||
TrySymbolizeWithLimit((void *)(&nonstatic_func),
|
||||
strlen(kNonStaticFunc) - 1));
|
||||
EXPECT_STREQ("n...", TrySymbolizeWithLimit((void *)(&nonstatic_func), 5));
|
||||
EXPECT_STREQ("...", TrySymbolizeWithLimit((void *)(&nonstatic_func), 4));
|
||||
EXPECT_STREQ("..", TrySymbolizeWithLimit((void *)(&nonstatic_func), 3));
|
||||
EXPECT_STREQ(".", TrySymbolizeWithLimit((void *)(&nonstatic_func), 2));
|
||||
EXPECT_STREQ("", TrySymbolizeWithLimit((void *)(&nonstatic_func), 1));
|
||||
EXPECT_EQ(nullptr, TrySymbolizeWithLimit((void *)(&nonstatic_func), 0));
|
||||
}
|
||||
|
||||
TEST(Symbolize, SymbolizeWithDemangling) {
|
||||
const char* result = TrySymbolize((void *)(&Foo::func));
|
||||
ASSERT_TRUE(result != nullptr);
|
||||
EXPECT_TRUE(strstr(result, "Foo::func") != nullptr) << result;
|
||||
}
|
||||
|
||||
#else // Symbolizer unimplemented
|
||||
|
||||
TEST(Symbolize, Unimplemented) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue