simpleperf: record kernel symbols in perf.data.
To better support kernel profiling, record kernel symbols in perf.data
when necessary. An option --no-dump-kernel-symbols is added in
record command to always avoid recording kernel symbols.
The way to handle all zero /proc/modules and /proc/kallsyms is
improved. Add Better support in finding symbols for kernel modules.
Bug: 27403614
Change-Id: I470151c54f8a45ad1c101c1b94490e33d7fd7485
diff --git a/simpleperf/thread_tree.h b/simpleperf/thread_tree.h
index 6dc7dd7..5d7d0c1 100644
--- a/simpleperf/thread_tree.h
+++ b/simpleperf/thread_tree.h
@@ -33,9 +33,10 @@
uint64_t pgoff;
uint64_t time; // Map creation time.
Dso* dso;
+ bool in_kernel;
- MapEntry(uint64_t start_addr, uint64_t len, uint64_t pgoff, uint64_t time, Dso* dso)
- : start_addr(start_addr), len(len), pgoff(pgoff), time(time), dso(dso) {
+ MapEntry(uint64_t start_addr, uint64_t len, uint64_t pgoff, uint64_t time, Dso* dso, bool in_kernel)
+ : start_addr(start_addr), len(len), pgoff(pgoff), time(time), dso(dso), in_kernel(in_kernel) {
}
MapEntry() {
}
@@ -61,7 +62,8 @@
ThreadTree() : unknown_symbol_("unknown", 0, std::numeric_limits<unsigned long long>::max()) {
unknown_dso_ = Dso::CreateDso(DSO_ELF_FILE, "unknown");
unknown_map_ =
- MapEntry(0, std::numeric_limits<unsigned long long>::max(), 0, 0, unknown_dso_.get());
+ MapEntry(0, std::numeric_limits<unsigned long long>::max(), 0, 0, unknown_dso_.get(), false);
+ kernel_dso_ = Dso::CreateDso(DSO_KERNEL);
}
void AddThread(int pid, int tid, const std::string& comm);