Lines Matching refs:Pc
84 static pint_t findFDE(pint_t mh, pint_t pc);
137 typename A::pint_t DwarfFDECache<A>::findFDE(pint_t mh, pint_t pc) {
142 if ((p->ip_start <= pc) && (pc < p->ip_end)) {
492 void setLastPC(pint_t pc) { _dispContext.ControlPc = pc; }
493 RUNTIME_FUNCTION *lookUpSEHUnwindInfo(pint_t pc, pint_t *base) {
494 _dispContext.FunctionEntry = RtlLookupFunctionEntry(pc,
500 bool getInfoFromSEH(pint_t pc);
610 _msContext.Pc = r.getRegister(UNW_ARM_IP);
623 _msContext.Pc = r.getRegister(UNW_REG_IP);
695 case UNW_ARM_IP: return _msContext.Pc;
698 case UNW_REG_IP: return _msContext.Pc;
745 case UNW_ARM_IP: _msContext.Pc = value; break;
748 case UNW_REG_IP: _msContext.Pc = value; break;
908 bool getInfoFromEHABISection(pint_t pc, const UnwindInfoSections §s);
926 bool getInfoFromDwarfSection(pint_t pc, const UnwindInfoSections §s,
937 bool getInfoFromCompactEncodingSection(pint_t pc,
1136 void setLastPC(pint_t pc) { /* FIXME: Implement */ }
1137 RUNTIME_FUNCTION *lookUpSEHUnwindInfo(pint_t pc, pint_t *base) {
1142 bool getInfoFromSEH(pint_t pc);
1312 pint_t pc,
1321 EHABISectionIterator<A> itNextPC = EHABISectionUpperBound(begin, end, pc);
1450 bool UnwindCursor<A, R>::getInfoFromDwarfSection(pint_t pc,
1459 foundFDE = CFI_Parser<A>::findFDE(_addressSpace, pc, sects.dwarf_section,
1467 _addressSpace, pc, sects.dwarf_index_section,
1473 pint_t cachedFDE = DwarfFDECache<A>::findFDE(sects.dso_base, pc);
1476 CFI_Parser<A>::findFDE(_addressSpace, pc, sects.dwarf_section,
1484 foundFDE = CFI_Parser<A>::findFDE(_addressSpace, pc, sects.dwarf_section,
1490 if (CFI_Parser<A>::parseFDEInstructions(_addressSpace, fdeInfo, cieInfo, pc,
1516 //_LIBUNWIND_DEBUG_LOG("can't find/use FDE for pc=0x%llX", (uint64_t)pc);
1524 bool UnwindCursor<A, R>::getInfoFromCompactEncodingSection(pint_t pc,
1528 fprintf(stderr, "getInfoFromCompactEncodingSection(pc=0x%llX, mh=0x%llX)\n",
1529 (uint64_t)pc, (uint64_t)sects.dso_base);
1537 pint_t targetFunctionOffset = pc - sects.dso_base;
1586 // binary search looks for entry with e where index[e].offset <= pc <
1616 if (pc < funcStart) {
1620 "\tpc not in table, pc=0x%llX, funcStart=0x%llX, funcEnd=0x%llX\n",
1621 (uint64_t) pc, (uint64_t) funcStart, (uint64_t) funcEnd);
1624 if (pc > funcEnd) {
1628 "\tpc not in table, pc=0x%llX, funcStart=0x%llX, funcEnd=0x%llX\n",
1629 (uint64_t) pc, (uint64_t) funcStart, (uint64_t) funcEnd);
1640 // binary search looks for entry with e where index[e].offset <= pc <
1671 if (pc < funcStart) {
1672 _LIBUNWIND_DEBUG_LOG("malformed __unwind_info, pc=0x%llX not in second "
1674 (uint64_t) pc, (uint64_t) funcStart);
1677 if (pc > funcEnd) {
1678 _LIBUNWIND_DEBUG_LOG("malformed __unwind_info, pc=0x%llX not in second "
1680 (uint64_t) pc, (uint64_t) funcEnd);
1730 "pc=0x%0llX, but lsda table has no entry",
1731 encoding, (uint64_t) pc);
1755 fprintf(stderr, "getInfoFromCompactEncodingSection(pc=0x%llX), "
1757 (uint64_t) pc, personalityDelta, (uint64_t) personality);
1761 fprintf(stderr, "getInfoFromCompactEncodingSection(pc=0x%llX), "
1763 (uint64_t) pc, encoding, (uint64_t) lsda, (uint64_t) funcStart);
1781 bool UnwindCursor<A, R>::getInfoFromSEH(pint_t pc) {
1783 RUNTIME_FUNCTION *unwindEntry = lookUpSEHUnwindInfo(pc, &base);
1785 _LIBUNWIND_DEBUG_LOG("\tpc not in table, pc=0x%llX", (uint64_t) pc);
1798 if (pc != getLastPC()) {
1822 setLastPC(pc);
1830 pint_t pc = (pint_t)this->getReg(UNW_REG_IP);
1834 pc &= (pint_t)~0x1;
1840 // To disambiguate this, back up the pc when we know it is a return
1843 --pc;
1845 // Ask address space object to find unwind sections for this pc.
1847 if (_addressSpace.findUnwindSections(pc, sects)) {
1851 if (this->getInfoFromCompactEncodingSection(pc, sects)) {
1856 if (this->getInfoFromDwarfSection(pc, sects, dwarfOffset)) {
1873 if (this->getInfoFromSEH(pc))
1880 if (this->getInfoFromDwarfSection(pc, sects)) {
1889 if (sects.arm_section != 0 && this->getInfoFromEHABISection(pc, sects))
1895 // There is no static unwind info for this pc. Look to see if an FDE was
1897 pint_t cachedFDE = DwarfFDECache<A>::findFDE(0, pc);
1906 pc, R::getArch(), &prolog)) {
1928 if (_addressSpace.findOtherFDE(pc, fde)) {
1932 // Double check this FDE is for a function that includes the pc.
1933 if ((fdeInfo.pcStart <= pc) && (pc < fdeInfo.pcEnd)) {
1936 pc, R::getArch(), &prolog)) {
1982 // update info based on new PC