2 * Copyright (C) 2015 The Android Open Source Project
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #ifndef SIMPLE_PERF_DSO_H_
18 #define SIMPLE_PERF_DSO_H_
22 #include <unordered_map>
31 Symbol(const std::string& name, uint64_t addr, uint64_t len);
32 const char* Name() const {
36 const char* DemangledName() const;
40 mutable const char* demangled_name_;
54 static void SetDemangle(bool demangle);
55 static std::string Demangle(const std::string& name);
56 static bool SetSymFsDir(const std::string& symfs_dir);
57 static void SetVmlinux(const std::string& vmlinux);
58 static void SetBuildIds(const std::vector<std::pair<std::string, BuildId>>& build_ids);
60 static std::unique_ptr<Dso> CreateDso(DsoType dso_type, const std::string& dso_path = "");
64 // Return the path recorded in perf.data.
65 const std::string& Path() const {
69 // Return the accessible path. It may be the same as Path(), or
70 // return the path with prefix set by SetSymFsDir().
71 std::string GetAccessiblePath() const;
73 // Return the minimum virtual address in program header.
74 uint64_t MinVirtualAddress();
76 const Symbol* FindSymbol(uint64_t vaddr_in_dso);
79 static BuildId GetExpectedBuildId(const std::string& filename);
80 static bool KernelSymbolCallback(const KernelSymbol& kernel_symbol, Dso* dso);
81 static void VmlinuxSymbolCallback(const ElfFileSymbol& elf_symbol, Dso* dso);
82 static void ElfFileSymbolCallback(const ElfFileSymbol& elf_symbol, Dso* dso,
83 bool (*filter)(const ElfFileSymbol&));
85 static bool demangle_;
86 static std::string symfs_dir_;
87 static std::string vmlinux_;
88 static std::unordered_map<std::string, BuildId> build_id_map_;
89 static size_t dso_count_;
91 Dso(DsoType type, const std::string& path);
94 bool LoadKernelModule();
96 bool LoadEmbeddedElfFile();
97 void InsertSymbol(const Symbol& symbol);
98 void FixupSymbolLength();
101 const std::string path_;
103 std::vector<Symbol> symbols_;
107 #endif // SIMPLE_PERF_DSO_H_