simpleperf: Add ETMDecoder.
It contains below changes:
1. Add ETMDecoder, which uses OpenCSD library to decode etm data.
2. Fix trace ids in AuxTraceInfoRecord to match those in etm data.
3. Dump build ids for all binaries in record cmd, to find them in
etm decoding.
4. Add options in dump cmd to dump etm data.
5. Add a test line in dump cmd test to check that instruction range
elements are decoded and dumped.
Bug: 135204414
Test: run simpleperf_unit_test.
Change-Id: Iad1a1dac3dd9aaed4416ff2c19029c676d610783
diff --git a/simpleperf/cmd_dumprecord_test.cpp b/simpleperf/cmd_dumprecord_test.cpp
index 12aadb1..76afc1c 100644
--- a/simpleperf/cmd_dumprecord_test.cpp
+++ b/simpleperf/cmd_dumprecord_test.cpp
@@ -48,9 +48,11 @@
TEST(cmd_dump, etm_data) {
CaptureStdout capture;
ASSERT_TRUE(capture.Start());
- ASSERT_TRUE(DumpCmd()->Run({GetTestData(PERF_DATA_ETM_TEST_LOOP)}));
+ ASSERT_TRUE(DumpCmd()->Run({"--dump-etm", "raw,packet,element", "--symdir",
+ GetTestDataDir() + "etm", GetTestData(PERF_DATA_ETM_TEST_LOOP)}));
std::string data = capture.Finish();
ASSERT_NE(data.find("record aux:"), std::string::npos);
- ASSERT_NE(data.find("aux_data:"), std::string::npos);
ASSERT_NE(data.find("feature section for auxtrace:"), std::string::npos);
+ // Check if we can decode etm data into instruction range elements.
+ ASSERT_NE(data.find("OCSD_GEN_TRC_ELEM_INSTR_RANGE"), std::string::npos);
}