| // Copyright 2018 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include <ostream> |
| #include <sstream> |
| |
| #include <gtest/gtest.h> |
| |
| #include "src/developer/debug/zxdb/symbols/dwarf_symbol_factory.h" |
| #include "src/developer/debug/zxdb/symbols/function.h" |
| #include "src/developer/debug/zxdb/symbols/index.h" |
| #include "src/developer/debug/zxdb/symbols/module_symbols_impl.h" |
| #include "src/developer/debug/zxdb/symbols/test_symbol_module.h" |
| |
| // See test_data/README.md for how to download the data required for this test and enable the build |
| // for it. |
| |
| namespace zxdb { |
| |
| namespace { |
| |
| std::string GetFlutterRunnerPath() { |
| return TestSymbolModule::GetTestDataDir() + "large_test_data/flutter_runner_tests"; |
| } |
| |
| } // namespace |
| |
| // In the checked-in build of flutter runner, the symbol SessionConnection::SessionConnection is |
| // inlined and the abstract origin crosses compilation unit boundaries. This is less common and |
| // forces the indexer into a slower mode. Validate that we can find the symbol. |
| TEST(Index, CrossUnitInline) { |
| TestSymbolModule setup(GetFlutterRunnerPath(), "test"); |
| Err err = setup.Init(); |
| ASSERT_TRUE(err.ok()) << err.msg(); |
| |
| Identifier session_connection_ident = |
| TestSymbolModule::SplitName("flutter_runner::SessionConnection::SessionConnection"); |
| |
| std::vector<IndexNode::SymbolRef> refs = |
| setup.symbols()->GetIndex().FindExact(session_connection_ident); |
| EXPECT_EQ(1u, refs.size()); |
| |
| // The resolved symbol should be a function. |
| LazySymbol lazy = setup.symbols()->symbol_factory()->MakeLazy(refs[0].offset()); |
| const Symbol* symbol = lazy.Get(); |
| const Function* function = symbol->As<Function>(); |
| ASSERT_TRUE(function); |
| |
| // Validate name and code ranges. |
| EXPECT_EQ("flutter_runner::SessionConnection::SessionConnection", function->GetFullName()); |
| EXPECT_EQ(AddressRanges(AddressRanges::kCanonical, |
| {AddressRange(0x33d894, 0x33e948), AddressRange(0x33ee14, 0x33ef38), |
| AddressRange(0x33ef74, 0x33ef94)}), |
| function->code_ranges()); |
| } |
| |
| } // namespace zxdb |