Lines Matching refs:frame
186 void AddFrame(DfxFrame& frame);
193 void FillFrame(DfxFrame& frame);
194 void FillJsFrame(DfxFrame& frame);
195 bool GetFrameByPc(uintptr_t pc, std::shared_ptr<DfxMaps> maps, DfxFrame& frame);
213 bool FillJsFrameLocal(DfxFrame& frame, JsFunction* jsFunction);
239 void AddFrame(const StepFrame& frame, std::shared_ptr<DfxMap> map);
240 bool StepInner(const bool isSigFrame, StepFrame& frame, void *ctx);
243 bool StepArkJsFrame(StepFrame& frame);
400 void Unwinder::AddFrame(DfxFrame& frame) in AddFrame() argument
402 impl_->AddFrame(frame); in AddFrame()
420 void Unwinder::FillFrame(DfxFrame& frame) in FillFrame() argument
422 impl_->FillFrame(frame); in FillFrame()
425 void Unwinder::FillJsFrame(DfxFrame& frame) in FillJsFrame() argument
427 impl_->FillJsFrame(frame); in FillJsFrame()
430 bool Unwinder::GetFrameByPc(uintptr_t pc, std::shared_ptr<DfxMaps> maps, DfxFrame& frame) in GetFrameByPc() argument
432 return impl_->GetFrameByPc(pc, maps, frame); in GetFrameByPc()
678 bool Unwinder::Impl::StepArkJsFrame(StepFrame& frame) in StepArkJsFrame() argument
680 DFX_TRACE_SCOPED_DLSYM("StepArkJsFrame pc: %p", reinterpret_cast<void *>(frame.pc)); in StepArkJsFrame()
682 timeLimitCheck << "StepArkJsFrame, ark pc: " << reinterpret_cast<void *>(frame.pc) << in StepArkJsFrame()
683 … ", fp:" << reinterpret_cast<void *>(frame.fp) << ", sp:" << reinterpret_cast<void *>(frame.sp) << in StepArkJsFrame()
684 ", isJsFrame:" << frame.isJsFrame; in StepArkJsFrame()
687 LOGD("+++ark pc: %p, fp: %p, sp: %p, isJsFrame: %d.", reinterpret_cast<void *>(frame.pc), in StepArkJsFrame()
688 … reinterpret_cast<void *>(frame.fp), reinterpret_cast<void *>(frame.sp), frame.isJsFrame); in StepArkJsFrame()
702 if (DfxArk::GetArkNativeFrameInfo(pid, frame.pc, frame.fp, frame.sp, jsFrames, size) < 0) { in StepArkJsFrame()
722 uintptr_t *methodId = (pid_ > 0 || enableMethodIdLocal_) ? (&frame.methodid) : nullptr; in StepArkJsFrame()
724 … ArkUnwindParam arkParam(memory_.get(), &(Unwinder::AccessMem), &frame.fp, &frame.sp, &frame.pc, in StepArkJsFrame()
725 methodId, &frame.isJsFrame, jitCache_); in StepArkJsFrame()
728 … ret = DfxArk::StepArkFrame(memory_.get(), &(Unwinder::AccessMem), &frame.fp, &frame.sp, &frame.pc, in StepArkJsFrame()
729 methodId, &frame.isJsFrame); in StepArkJsFrame()
736 LOGI("---ark js frame methodid: %" PRIx64 "", (uint64_t)frame.methodid); in StepArkJsFrame()
740 LOGD("---ark pc: %p, fp: %p, sp: %p, isJsFrame: %d.", reinterpret_cast<void *>(frame.pc), in StepArkJsFrame()
741 … reinterpret_cast<void *>(frame.fp), reinterpret_cast<void *>(frame.sp), frame.isJsFrame); in StepArkJsFrame()
759 StepFrame frame; in Unwind() local
772 frame.pc = regs_->GetPc(); in Unwind()
773 frame.sp = regs_->GetSp(); in Unwind()
774 frame.fp = regs_->GetFp(); in Unwind()
777 regs_->StepIfSignalFrame(static_cast<uintptr_t>(frame.pc), memory_)) { in Unwind()
778 LOGW("Step signal frame, pc: %p", reinterpret_cast<void *>(frame.pc)); in Unwind()
779 StepInner(true, frame, ctx); in Unwind()
783 if (!frame.isJsFrame && needAdjustPc) { in Unwind()
784 DoPcAdjust(frame.pc); in Unwind()
788 uintptr_t prevPc = frame.pc; in Unwind()
789 uintptr_t prevSp = frame.sp; in Unwind()
790 if (!StepInner(false, frame, ctx)) { in Unwind()
794 if (frame.pc == prevPc && frame.sp == prevSp) { in Unwind()
801 lastErrorData_.SetAddrAndCode(frame.pc, UNW_ERROR_REPEATED_FRAME); in Unwind()
885 StepFrame frame; in Step() local
886 frame.pc = pc; in Step()
887 frame.sp = sp; in Step()
888 frame.fp = regs_->GetFp(); in Step()
890 if (regs_->StepIfSignalFrame(frame.pc, memory_)) { in Step()
891 LOGW("Step signal frame, pc: %p", reinterpret_cast<void *>(frame.pc)); in Step()
892 ret = StepInner(true, frame, ctx); in Step()
894 ret = StepInner(false, frame, ctx); in Step()
896 pc = frame.pc; in Step()
897 sp = frame.sp; in Step()
901 bool Unwinder::Impl::StepInner(const bool isSigFrame, StepFrame& frame, void *ctx) in StepInner() argument
908 LOGU("+pc: %p, sp: %p, fp: %p", reinterpret_cast<void *>(frame.pc), in StepInner()
909 reinterpret_cast<void *>(frame.sp), reinterpret_cast<void *>(frame.fp)); in StepInner()
910 uintptr_t prevSp = frame.sp; in StepInner()
918 auto iter = stepCache_.find(frame.pc); in StepInner()
921 LOGU("Find rs cache, pc: %p", reinterpret_cast<void *>(frame.pc)); in StepInner()
925 AddFrame(frame, map); in StepInner()
932 MAYBE_UNUSED int mapRet = acc_->GetMapByPc(frame.pc, map, ctx); in StepInner()
934 if (frame.isJsFrame) { in StepInner()
940 lastErrorData_.SetAddrAndCode(frame.pc, mapRet); in StepInner()
944 AddFrame(frame, map); in StepInner()
954 if ((enableMixstack_) && ((map != nullptr && map->IsArkExecutable()) || frame.isJsFrame)) { in StepInner()
955 if (!StepArkJsFrame(frame)) { in StepInner()
956 LOGE("Failed to step ark Js frame, pc: %p", reinterpret_cast<void *>(frame.pc)); in StepInner()
957 lastErrorData_.SetAddrAndCode(frame.pc, UNW_ERROR_STEP_ARK_FRAME); in StepInner()
961 regs_->SetPc(StripPac(frame.pc, pacMask_)); in StepInner()
962 regs_->SetSp(frame.sp); in StepInner()
963 regs_->SetFp(frame.fp); in StepInner()
979 MAYBE_UNUSED int utiRet = acc_->FindUnwindTable(frame.pc, uti, ctx); in StepInner()
981 lastErrorData_.SetAddrAndCode(frame.pc, utiRet); in StepInner()
991 if (!armExidx_->SearchEntry(frame.pc, uti, uei)) { in StepInner()
1005 if ((uti.isLinear == false && !dwarfSection_->SearchEntry(frame.pc, uti, uei)) || in StepInner()
1006 (uti.isLinear == true && !dwarfSection_->LinearSearchEntry(frame.pc, uti, uei))) { in StepInner()
1012 if (!dwarfSection_->Step(frame.pc, (uintptr_t)uei.unwindInfo, rs)) { in StepInner()
1025 stepCache_.emplace(frame.pc, cache); in StepInner()
1058 ret = FpStep(frame.fp, frame.pc, ctx); in StepInner()
1061 LOGI("First enter fp step, pc: %p", reinterpret_cast<void *>(frame.pc)); in StepInner()
1068 frame.pc = regs_->GetPc(); in StepInner()
1069 frame.sp = regs_->GetSp(); in StepInner()
1070 frame.fp = regs_->GetFp(); in StepInner()
1071 if (!isFpStep_ && (map != nullptr) && (!map->IsVdsoMap()) && (frame.sp < prevSp)) { in StepInner()
1073 lastErrorData_.SetAddrAndCode(frame.pc, UNW_ERROR_ILLEGAL_VALUE); in StepInner()
1076 if (ret && (frame.pc == 0)) { in StepInner()
1079 LOGU("-pc: %p, sp: %p, fp: %p, ret: %d", reinterpret_cast<void *>(frame.pc), in StepInner()
1080 reinterpret_cast<void *>(frame.sp), reinterpret_cast<void *>(frame.fp), ret); in StepInner()
1159 void Unwinder::Impl::AddFrame(const StepFrame& frame, std::shared_ptr<DfxMap> map) in AddFrame() argument
1162 if (ignoreMixstack_ && frame.isJsFrame) { in AddFrame()
1166 pcs_.emplace_back(frame.pc); in AddFrame()
1168 dfxFrame.isJsFrame = frame.isJsFrame; in AddFrame()
1170 dfxFrame.pc = static_cast<uint64_t>(frame.pc); in AddFrame()
1171 dfxFrame.sp = static_cast<uint64_t>(frame.sp); in AddFrame()
1173 if (frame.isJsFrame) { in AddFrame()
1174 dfxFrame.funcOffset = static_cast<uint64_t>(frame.methodid); in AddFrame()
1181 void Unwinder::Impl::AddFrame(DfxFrame& frame) in AddFrame() argument
1183 frames_.emplace_back(frame); in AddFrame()
1210 auto& frame = frames[i]; in FillFrames() local
1211 if (frame.isJsFrame) { in FillFrames()
1213 FillJsFrame(frame); in FillFrames()
1216 FillFrame(frame); in FillFrames()
1221 void Unwinder::Impl::FillFrame(DfxFrame& frame) in FillFrame() argument
1223 if (frame.map == nullptr) { in FillFrame()
1224 frame.relPc = frame.pc; in FillFrame()
1225 frame.mapName = "Not mapped"; in FillFrame()
1229 frame.mapName = frame.map->GetElfName(); in FillFrame()
1230 DFX_TRACE_SCOPED_DLSYM("FillFrame:%s", frame.mapName.c_str()); in FillFrame()
1231 frame.relPc = frame.map->GetRelPc(frame.pc); in FillFrame()
1232 frame.mapOffset = frame.map->offset; in FillFrame()
1233 LOGU("mapName: %s, mapOffset: %" PRIx64 "", frame.mapName.c_str(), frame.mapOffset); in FillFrame()
1234 auto elf = frame.map->GetElf(); in FillFrame()
1238 FillJsFrame(frame); in FillFrame()
1243 if (!DfxSymbols::GetFuncNameAndOffsetByPc(frame.relPc, elf, frame.funcName, frame.funcOffset)) { in FillFrame()
1244 … LOGU("Failed to get symbol, relPc: %" PRIx64 ", mapName: %s", frame.relPc, frame.mapName.c_str()); in FillFrame()
1246 frame.buildId = elf->GetBuildId(); in FillFrame()
1249 void Unwinder::Impl::FillJsFrame(DfxFrame& frame) in FillJsFrame() argument
1251 if (frame.map == nullptr) { in FillJsFrame()
1255 DFX_TRACE_SCOPED_DLSYM("FillJsFrame:%s", frame.map->name.c_str()); in FillJsFrame()
1256 LOGU("Fill js frame, map name: %s", frame.map->name.c_str()); in FillJsFrame()
1259 if (!FillJsFrameLocal(frame, &jsFunction)) { in FillJsFrame()
1263 auto hap = frame.map->GetHap(); in FillJsFrame()
1265 LOGW("Get hap error, name: %s", frame.map->name.c_str()); in FillJsFrame()
1268 …if (!hap->ParseHapInfo(pid_, frame.pc, static_cast<uintptr_t>(frame.funcOffset), frame.map, &jsFun… in FillJsFrame()
1273 frame.mapName = std::string(jsFunction.url); in FillJsFrame()
1274 frame.funcName = std::string(jsFunction.functionName); in FillJsFrame()
1275 frame.line = static_cast<int32_t>(jsFunction.line); in FillJsFrame()
1276 frame.column = jsFunction.column; in FillJsFrame()
1278 frame.mapName.c_str(), frame.funcName.c_str(), frame.line, frame.column); in FillJsFrame()
1281 bool Unwinder::Impl::FillJsFrameLocal(DfxFrame& frame, JsFunction* jsFunction) in FillJsFrameLocal() argument
1291 …f (DfxArk::ParseArkFrameInfoLocal(static_cast<uintptr_t>(frame.pc), static_cast<uintptr_t>(frame.f… in FillJsFrameLocal()
1292 …static_cast<uintptr_t>(frame.map->begin), static_cast<uintptr_t>(frame.map->offset), jsFunction) <… in FillJsFrameLocal()
1294 reinterpret_cast<void *>(frame.pc), reinterpret_cast<void *>(frame.map->begin)); in FillJsFrameLocal()
1297 frame.isJsFrame = true; in FillJsFrameLocal()
1301 bool Unwinder::Impl::GetFrameByPc(uintptr_t pc, std::shared_ptr<DfxMaps> maps, DfxFrame &frame) in GetFrameByPc() argument
1303 frame.pc = static_cast<uint64_t>(StripPac(pc, 0)); in GetFrameByPc()
1310 frame.map = map; in GetFrameByPc()
1311 FillFrame(frame); in GetFrameByPc()
1351 DfxFrame frame; in GetFramesByPcs() local
1352 frame.index = i; in GetFramesByPcs()
1353 frame.pc = static_cast<uint64_t>(StripPac(pcs[i], 0)); in GetFramesByPcs()
1354 if ((map != nullptr) && map->Contain(frame.pc)) { in GetFramesByPcs()
1361 frame.map = map; in GetFramesByPcs()
1362 FillFrame(frame); in GetFramesByPcs()
1363 frames.emplace_back(frame); in GetFramesByPcs()
1371 DfxFrame frame; in GetLocalFramesByPcs() local
1372 frame.index = i; in GetLocalFramesByPcs()
1373 frame.pc = static_cast<uint64_t>(pcs[i]); in GetLocalFramesByPcs()
1374 frames.emplace_back(frame); in GetLocalFramesByPcs()
1405 auto frame = reinterpret_cast<DfxFrame *>(data); in DlPhdrCallback() local
1407 frame->pc = StripPac(frame->pc, 0); in DlPhdrCallback()
1411 if (frame->pc >= vaddr && frame->pc < vaddr + phdr->p_memsz) { in DlPhdrCallback()
1412 frame->relPc = frame->pc - info->dlpi_addr; in DlPhdrCallback()
1413 frame->mapName = std::string(info->dlpi_name); in DlPhdrCallback()
1414 LOGU("relPc: %" PRIx64 ", mapName: %s", frame->relPc, frame->mapName.c_str()); in DlPhdrCallback()