Lines Matching defs:ucbp
40 void __attribute__((weak)) __cxa_call_unexpected(_Unwind_Control_Block *ucbp);
41 bool __attribute__((weak)) __cxa_begin_cleanup(_Unwind_Control_Block *ucbp);
42 bool __attribute__((weak)) __cxa_type_match(_Unwind_Control_Block *ucbp,
58 #define UCB_FORCED_STOP_FN(ucbp) ((ucbp)->unwinder_cache.reserved1)
59 #define UCB_PR_ADDR(ucbp) ((ucbp)->unwinder_cache.reserved2)
60 #define UCB_SAVED_CALLSITE_ADDR(ucbp) ((ucbp)->unwinder_cache.reserved3)
61 #define UCB_FORCED_STOP_ARG(ucbp) ((ucbp)->unwinder_cache.reserved4)
390 get_eit_entry (_Unwind_Control_Block *ucbp, _uw return_address)
408 UCB_PR_ADDR (ucbp) = 0;
422 UCB_PR_ADDR (ucbp) = 0;
425 ucbp->pr_cache.fnstart = selfrel_offset31 (&eitp->fnoffset);
430 UCB_PR_ADDR (ucbp) = 0;
439 ucbp->pr_cache.ehtp = (_Unwind_EHT_Header *)&eitp->content;
440 ucbp->pr_cache.additional = 1;
446 ucbp->pr_cache.ehtp =
448 ucbp->pr_cache.additional = 0;
452 if (*ucbp->pr_cache.ehtp & (1u << 31))
455 _uw idx = (*(_uw *) ucbp->pr_cache.ehtp >> 24) & 0xf;
457 UCB_PR_ADDR (ucbp) = (_uw) &__aeabi_unwind_cpp_pr0;
459 UCB_PR_ADDR (ucbp) = (_uw) &__aeabi_unwind_cpp_pr1;
461 UCB_PR_ADDR (ucbp) = (_uw) &__aeabi_unwind_cpp_pr2;
464 UCB_PR_ADDR (ucbp) = 0;
471 UCB_PR_ADDR (ucbp) = selfrel_offset31 (ucbp->pr_cache.ehtp);
480 unwind_phase2 (_Unwind_Control_Block * ucbp, phase2_vrs * vrs)
487 if (get_eit_entry (ucbp, vrs->core.r[R_PC]) != _URC_OK)
490 UCB_SAVED_CALLSITE_ADDR (ucbp) = vrs->core.r[R_PC];
493 pr_result = ((personality_routine) UCB_PR_ADDR (ucbp))
494 (_US_UNWIND_FRAME_STARTING, ucbp, (_Unwind_Context *) vrs);
507 unwind_phase2_forced (_Unwind_Control_Block *ucbp, phase2_vrs *entry_vrs,
510 _Unwind_Stop_Fn stop_fn = (_Unwind_Stop_Fn) UCB_FORCED_STOP_FN (ucbp);
511 void *stop_arg = (void *)UCB_FORCED_STOP_ARG (ucbp);
531 entry_code = get_eit_entry (ucbp, saved_vrs.core.r[R_PC]);
543 UCB_SAVED_CALLSITE_ADDR (ucbp) = saved_vrs.core.r[R_PC];
548 pr_result = ((personality_routine) UCB_PR_ADDR (ucbp))
549 (action, ucbp, (void *) &next_vrs);
567 stop_code = stop_fn (1, action, ucbp->exception_class, ucbp,
609 __gnu_Unwind_RaiseException (_Unwind_Control_Block * ucbp,
627 if (get_eit_entry (ucbp, saved_vrs.core.r[R_PC]) != _URC_OK)
631 pr_result = ((personality_routine) UCB_PR_ADDR (ucbp))
632 (_US_VIRTUAL_UNWIND_FRAME, ucbp, (void *) &saved_vrs);
646 unwind_phase2 (ucbp, entry_vrs);
657 __gnu_Unwind_ForcedUnwind (_Unwind_Control_Block *ucbp,
661 UCB_FORCED_STOP_FN (ucbp) = (_uw) stop_fn;
662 UCB_FORCED_STOP_ARG (ucbp) = (_uw) stop_arg;
667 return unwind_phase2_forced (ucbp, entry_vrs, 0);
674 __gnu_Unwind_Resume (_Unwind_Control_Block * ucbp, phase2_vrs * entry_vrs)
679 entry_vrs->core.r[R_PC] = UCB_SAVED_CALLSITE_ADDR (ucbp);
681 if (UCB_FORCED_STOP_FN (ucbp))
683 unwind_phase2_forced (ucbp, entry_vrs, 1);
690 pr_result = ((personality_routine) UCB_PR_ADDR (ucbp))
691 (_US_UNWIND_FRAME_RESUME, ucbp, (_Unwind_Context *) entry_vrs);
701 unwind_phase2 (ucbp, entry_vrs);
712 __gnu_Unwind_Resume_or_Rethrow (_Unwind_Control_Block * ucbp,
715 if (!UCB_FORCED_STOP_FN (ucbp))
716 return __gnu_Unwind_RaiseException (ucbp, entry_vrs);
721 return unwind_phase2_forced (ucbp, entry_vrs, 0);
726 _Unwind_Complete (_Unwind_Control_Block * ucbp __attribute__((unused)))
762 _Unwind_Control_Block *ucbp = &ucb;
775 if (get_eit_entry (ucbp, saved_vrs.core.r[R_PC]) != _URC_OK)
786 _Unwind_SetGR((_Unwind_Context *)&saved_vrs, 12, (_Unwind_Ptr) ucbp);
797 code = ((personality_routine) UCB_PR_ADDR (ucbp))
799 ucbp, (void *) &saved_vrs);
816 _Unwind_Control_Block *ucbp,
831 data = (_uw *) ucbp->pr_cache.ehtp;
850 data = (_uw *) ucbp->cleanup_cache.bitpattern[0];
852 if ((ucbp->pr_cache.additional & 1) == 0)
873 fnstart = ucbp->pr_cache.fnstart + (offset & ~1);
891 ucbp->cleanup_cache.bitpattern[0] = (_uw) data;
892 if (!__cxa_begin_cleanup (ucbp))
917 matched = (void *)(ucbp + 1);
922 if (!__cxa_type_match (ucbp, (type_info *) rtti,
929 ucbp->barrier_cache.sp =
931 ucbp->barrier_cache.bitpattern[0] = (_uw) matched;
932 ucbp->barrier_cache.bitpattern[1] = (_uw) data;
938 else if (ucbp->barrier_cache.sp == _Unwind_GetGR (context, R_SP)
939 && ucbp->barrier_cache.bitpattern[1] == (_uw) data)
947 _Unwind_SetGR (context, 0, (_uw) ucbp);
968 matched = (void *)(ucbp + 1);
970 if (__cxa_type_match (ucbp, (type_info *) rtti,
978 ucbp->barrier_cache.sp =
980 ucbp->barrier_cache.bitpattern[0] = (_uw) matched;
981 ucbp->barrier_cache.bitpattern[1] = (_uw) data;
987 else if (ucbp->barrier_cache.sp == _Unwind_GetGR (context, R_SP)
988 && ucbp->barrier_cache.bitpattern[1] == (_uw) data)
993 ucbp->barrier_cache.bitpattern[1] = rtti_count;
994 ucbp->barrier_cache.bitpattern[2] = 0;
995 ucbp->barrier_cache.bitpattern[3] = 4;
996 ucbp->barrier_cache.bitpattern[4] = (_uw) &data[1];
1007 _Unwind_SetGR (context, 0, (_uw) ucbp);
1043 _Unwind_Control_Block *ucbp,
1046 return __gnu_unwind_pr_common (state, ucbp, context, 0);
1051 _Unwind_Control_Block *ucbp,
1054 return __gnu_unwind_pr_common (state, ucbp, context, 1);
1059 _Unwind_Control_Block *ucbp,
1062 return __gnu_unwind_pr_common (state, ucbp, context, 2);