diff --git a/tools/process_dump/lperf/lperf_event_record.h b/tools/process_dump/lperf/lperf_event_record.h index ce5ba1233ca7528cae2b23397ceb669b06885e54..49fffc516a36120d55428fc458f5478c809ab26c 100644 --- a/tools/process_dump/lperf/lperf_event_record.h +++ b/tools/process_dump/lperf/lperf_event_record.h @@ -59,7 +59,7 @@ public: bool Init(uint8_t* data); void Clear(); protected: - void InitHeader(uint8_t* p); + void InitHeader(uint8_t* data); private: struct perf_event_header header_ = {}; @@ -76,12 +76,12 @@ private: }; template -bool PopFromBinary(bool condition, uint8_t*& p, T& v, uint64_t& size); +bool PopFromBinary(bool condition, uint8_t*& data, T& dest, uint64_t& size); template -bool PopFromBinary2(bool condition, uint8_t*& p, T1& v1, T2& v2, uint64_t& size); +bool PopFromBinary2(bool condition, uint8_t*& data, T1& dest1, T2& dest2, uint64_t& size); -bool SetPointerOffset(uint8_t*& p, uint64_t offset, uint64_t& size); +bool SetPointerOffset(uint8_t*& data, uint64_t offset, uint64_t& size); #define NO_RETVAL /* retval */ #ifndef CHECK_TRUE_AND_RET diff --git a/tools/process_dump/lperf/lperf_events.cpp b/tools/process_dump/lperf/lperf_events.cpp index 31b03c74f5e819b8a6097b4f56505d491810417e..9c701f8a6e4e78d692d324ce8e0a773c9ff1176f 100644 --- a/tools/process_dump/lperf/lperf_events.cpp +++ b/tools/process_dump/lperf/lperf_events.cpp @@ -56,7 +56,7 @@ struct LperfThreadInputArg { LperfEvents::LperfEvents() { - pageSize_ = sysconf(_SC_PAGESIZE); + pageSize_ = static_cast(sysconf(_SC_PAGESIZE)); } LperfEvents::~LperfEvents() @@ -146,7 +146,7 @@ bool LperfEvents::AddRecordThreads() size_t count = std::min(tids_.size(), maxCount); threadInfo.tidCount = static_cast(count); for (size_t i = 0; i < count; i++) { - threadInfo.tids[i] = tids_[i]; + threadInfo.tids[i] = static_cast(tids_[i]); } int err = ioctl(lperfFd_, static_cast(LPERF_IOCTL_ADD_THREADS), &threadInfo); CHECK_ERR(err, "add lperf threads failed"); @@ -203,7 +203,7 @@ void LperfEvents::ReadRecordsFromMmaps() if (dataSize <= 0) { return; } - lperfMmap_.dataSize = dataSize; + lperfMmap_.dataSize = static_cast(dataSize); while (GetHeaderFromMmap(lperfMmap_)) { GetRecordFromMmap(lperfMmap_); } @@ -227,7 +227,7 @@ bool LperfEvents::RecordLoop() continue; } ReadRecordsFromMmaps(); - if ((pollFds_[0].revents & POLLHUP) == POLLHUP) { + if ((static_cast(pollFds_[0].revents) & POLLHUP) == POLLHUP) { DFXLOGE("poll status is POLLHUP, revents: %{public}d", pollFds_[0].revents); loopCondition = false; } diff --git a/tools/process_dump/lperf/lperf_events.h b/tools/process_dump/lperf/lperf_events.h index 29521b2292d1d5272676a1b56694cde2c4763365..e77a81ae8f8c5ceb3556278dbd981a4a6b40a939 100644 --- a/tools/process_dump/lperf/lperf_events.h +++ b/tools/process_dump/lperf/lperf_events.h @@ -44,13 +44,13 @@ public: private: struct MmapFd { - int fd; + int fd = 0; perf_event_mmap_page* mmapPage = nullptr; uint8_t *buf = nullptr; size_t bufSize = 0; size_t dataSize = 0; - perf_event_header header; + perf_event_header header = {}; }; bool PrepareFdEvents(); @@ -62,7 +62,7 @@ private: bool PerfEventsEnable(bool enable); bool RecordLoop(); - MmapFd lperfMmap_; + MmapFd lperfMmap_ = {}; ProcessRecordCB recordCallBack_; int lperfFd_ = -1; diff --git a/tools/process_dump/lperf/lperf_record.cpp b/tools/process_dump/lperf/lperf_record.cpp index 760d76f1950cdd48f35421fa4388ef5687c1d1b7..93c5a8bf54dd12ba36caa3bd3e61506413c5c0d8 100644 --- a/tools/process_dump/lperf/lperf_record.cpp +++ b/tools/process_dump/lperf/lperf_record.cpp @@ -93,6 +93,9 @@ void LperfRecord::PrepareLperfEvent() void LperfRecord::SymbolicRecord(LperfRecordSample& record) { CHECK_TRUE_AND_RET(record.data_.tid > 0, NO_RETVAL, "Symbolic invalid Record, tid: %d", record.data_.tid); + const uint64_t maxNr = 51; + CHECK_TRUE_AND_RET(record.data_.nr > 0 && record.data_.nr < maxNr, + NO_RETVAL, "Symbolic invalid Record, nr: %llu", record.data_.nr); std::vector pcs; for (uint64_t i = 0; i < record.data_.nr; i++) { if (record.data_.ips[i] != PERF_CONTEXT_USER) {