Lines Matching defs:unwindInfoPtr
46 bool CallStack::ReadVirtualThreadMemory(UnwindInfo &unwindInfoPtr, ADDR_TYPE vaddr, ADDR_TYPE *data)
48 if (__builtin_expect(unwindInfoPtr.thread.pid_ == unwindInfoPtr.callStack.lastPid_ &&
49 vaddr == unwindInfoPtr.callStack.lastAddr_, true)) {
50 *data = unwindInfoPtr.callStack.lastData_;
54 if (unwindInfoPtr.thread.ReadRoMemory(vaddr, reinterpret_cast<uint8_t*>(data), sizeof(ADDR_TYPE))) {
55 unwindInfoPtr.callStack.lastPid_ = unwindInfoPtr.thread.pid_;
56 unwindInfoPtr.callStack.lastAddr_ = vaddr;
57 unwindInfoPtr.callStack.lastData_ = *data;
60 unwindInfoPtr.callStack.lastPid_ = -1;
61 unwindInfoPtr.callStack.lastAddr_ = 0;
187 UnwindInfo *unwindInfoPtr, unw_addr_space_t as, unw_word_t ip,
191 auto &dynInfoProcessMap = unwindInfoPtr->callStack.unwindTableInfoMap_;
193 if (dynInfoProcessMap.find(unwindInfoPtr->thread.pid_) == dynInfoProcessMap.end()) {
194 dynInfoProcessMap.emplace(unwindInfoPtr->thread.pid_, dsoUnwDynInfoMap {});
196 dsoUnwDynInfoMap &dynFileMap = dynInfoProcessMap[unwindInfoPtr->thread.pid_];
211 if (fillUDI(newdi, *symbolsFile, map, unwindInfoPtr->thread)) {
222 HLOG_ASSERT(dynInfoProcessMap.find(unwindInfoPtr->thread.pid_) != dynInfoProcessMap.end());
226 dynInfoProcessMap.at(unwindInfoPtr->thread.pid_).at(symbolsFile->filePath_);
254 HLOGW("no debug info found for thread %d:%s", unwindInfoPtr->thread.tid_,
255 unwindInfoPtr->thread.name_.c_str());
263 UnwindInfo *unwindInfoPtr = static_cast<UnwindInfo *>(arg);
266 auto map = unwindInfoPtr->thread.FindMapByAddr(ip);
268 SymbolsFile *symbolsFile = unwindInfoPtr->thread.FindSymbolsFileByMap(map);
270 return FindUnwindTable(symbolsFile, map, unwindInfoPtr, as, ip, pi, need_unwind_info, arg);
272 HLOGW("no symbols file found for thread %d:%s", unwindInfoPtr->thread.tid_,
273 unwindInfoPtr->thread.name_.c_str());
277 unwindInfoPtr->thread.tid_, unwindInfoPtr->thread.name_.c_str());
286 UnwindInfo *unwindInfoPtr = static_cast<UnwindInfo *>(arg);
295 if (addr < unwindInfoPtr->callStack.stackPoint_ or
296 addr + sizeof(unw_word_t) >= unwindInfoPtr->callStack.stackEnd_) {
297 if (ReadVirtualThreadMemory(*unwindInfoPtr, addr, valuePoint)) {
301 unwindInfoPtr->callStack.stackPoint_, unwindInfoPtr->callStack.stackEnd_,
302 unwindInfoPtr->callStack.stackEnd_ - unwindInfoPtr->callStack.stackPoint_);
306 size_t stackOffset = addr - unwindInfoPtr->callStack.stackPoint_;
307 *valuePoint = *(unw_word_t *)&unwindInfoPtr->callStack.stack_[stackOffset];
318 UnwindInfo *unwindInfoPtr = static_cast<UnwindInfo *>(arg);
331 if (unwindInfoPtr->callStack.regsNum_ == 0) {
335 if (!RegisterGetValue(val, unwindInfoPtr->callStack.regs_, static_cast<size_t>(perfRegIndex),
336 unwindInfoPtr->callStack.regsNum_)) {
710 int CallStack::FillUnwindTable(SymbolsFile *symbolsFile, std::shared_ptr<DfxMap> map, UnwindInfo *unwindInfoPtr,
714 CHECK_TRUE(unwindInfoPtr == nullptr, -1, 0, "");
715 auto &tableInfoMap = unwindInfoPtr->callStack.unwindTableInfoMap_;
717 if (tableInfoMap.find(unwindInfoPtr->thread.pid_) == tableInfoMap.end()) {
718 tableInfoMap.emplace(unwindInfoPtr->thread.pid_, DsoUnwindTableInfoMap {});
720 DsoUnwindTableInfoMap &unwTabMap = tableInfoMap[unwindInfoPtr->thread.pid_];
747 UnwindInfo *unwindInfoPtr = static_cast<UnwindInfo *>(arg);
748 CHECK_TRUE(unwindInfoPtr == nullptr, -1, 0, "");
749 int64_t mapIndex = unwindInfoPtr->thread.FindMapIndexByAddr(pc);
751 auto map = unwindInfoPtr->thread.GetMaps()[mapIndex];
753 SymbolsFile *symbolsFile = unwindInfoPtr->thread.FindSymbolsFileByMap(map);
755 return FillUnwindTable(symbolsFile, map, unwindInfoPtr, pc, outTableInfo);
757 HLOGD("no symbols file found for thread %d:%s", unwindInfoPtr->thread.tid_,
758 unwindInfoPtr->thread.name_.c_str());
762 unwindInfoPtr->thread.tid_, unwindInfoPtr->thread.name_.c_str());
772 UnwindInfo *unwindInfoPtr = static_cast<UnwindInfo *>(arg);
776 CHECK_TRUE(unwindInfoPtr == nullptr || (addr + sizeof(uintptr_t) < addr), -1, 1,
777 "unwindInfoPtr is null or address overflow at 0x%" UNW_WORD_PFLAG " increase 0x%zu",
780 if (addr < unwindInfoPtr->callStack.stackPoint_ or
781 addr + sizeof(uintptr_t) >= unwindInfoPtr->callStack.stackEnd_) {
782 if (ReadVirtualThreadMemory(*unwindInfoPtr, addr, val)) {
787 unwindInfoPtr->callStack.stackPoint_, unwindInfoPtr->callStack.stackEnd_,
788 unwindInfoPtr->callStack.stackEnd_ - unwindInfoPtr->callStack.stackPoint_);
792 size_t stackOffset = addr - unwindInfoPtr->callStack.stackPoint_;
793 *val = *(uintptr_t *)&unwindInfoPtr->callStack.stack_[stackOffset];
802 UnwindInfo *unwindInfoPtr = static_cast<UnwindInfo *>(arg);
803 int64_t mapIndex = unwindInfoPtr->thread.FindMapIndexByAddr(pc);
805 map = unwindInfoPtr->thread.GetMaps()[mapIndex];
811 unwindInfoPtr->thread.tid_, unwindInfoPtr->thread.name_.c_str());