CommandRegister command_register;
+static void StderrLogger(android::base::LogId, android::base::LogSeverity severity,
+ const char*, const char* file, unsigned int line, const char* message) {
+ static const char log_characters[] = "VDIWEFF";
+ char severity_char = log_characters[severity];
+ fprintf(stderr, "simpleperf %c %s:%u] %s\n", severity_char, file, line, message);
+}
+
bool RunSimpleperfCmd(int argc, char** argv) {
- android::base::InitLogging(argv, android::base::StderrLogger);
+ android::base::InitLogging(argv, StderrLogger);
std::vector<std::string> args;
android::base::LogSeverity log_severity = android::base::INFO;
min_vaddr_(std::numeric_limits<uint64_t>::max()),
is_loaded_(false),
dump_id_(UINT_MAX),
- symbol_dump_id_(0) {
+ symbol_dump_id_(0),
+ symbol_warning_loglevel_(android::base::WARNING) {
if (type_ == DSO_KERNEL) {
min_vaddr_ = 0;
}
// dumped_symbols, so later we can merge them with symbols read from file system.
dumped_symbols = std::move(symbols_);
symbols_.clear();
+ // Don't warn missing symbol table if we have dumped symbols in perf.data.
+ symbol_warning_loglevel_ = android::base::DEBUG;
}
bool result = false;
switch (type_) {
return true;
}
// Lacking symbol table isn't considered as an error but worth reporting.
- LOG(WARNING) << filename << " doesn't contain symbol table";
+ LOG(symbol_warning_loglevel_) << filename << " doesn't contain symbol table";
return true;
} else {
- LOG(WARNING) << "failed to read symbols from " << filename
- << ": " << result;
+ LOG(symbol_warning_loglevel_) << "failed to read symbols from " << filename << ": " << result;
return false;
}
}
}
}
if (all_zero) {
- LOG(WARNING)
+ LOG(symbol_warning_loglevel_)
<< "Symbol addresses in /proc/kallsyms on device are all zero. "
"`echo 0 >/proc/sys/kernel/kptr_restrict` if possible.";
symbols_.clear();
}
bool match = (build_id == real_build_id);
if (!match) {
- LOG(WARNING) << "failed to read symbols from /proc/kallsyms: Build id "
- << "mismatch";
+ LOG(symbol_warning_loglevel_) << "failed to read symbols from /proc/kallsyms: Build id "
+ << "mismatch";
return false;
}
}
}
}
if (all_zero) {
- LOG(WARNING) << "Symbol addresses in /proc/kallsyms are all zero. "
- "`echo 0 >/proc/sys/kernel/kptr_restrict` if possible.";
+ LOG(symbol_warning_loglevel_) << "Symbol addresses in /proc/kallsyms are all zero. "
+ "`echo 0 >/proc/sys/kernel/kptr_restrict` if possible.";
symbols_.clear();
return false;
}
#include <unordered_map>
#include <vector>
+#include <android-base/logging.h>
#include <android-base/test_utils.h>
#include "build_id.h"
uint32_t dump_id_;
// Used to assign dump_id for symbols in current dso.
uint32_t symbol_dump_id_;
+ android::base::LogSeverity symbol_warning_loglevel_;
};
const char* DsoTypeToString(DsoType dso_type);