+ int ip_before_insn = 0;
+
+#ifdef __ARM_EABI_UNWINDER__
+ if ((state & _US_ACTION_MASK) != _US_UNWIND_FRAME_STARTING)
+ CONTINUE_UNWINDING;
+
+ /* The dwarf unwinder assumes the context structure holds things like the
+ function and LSDA pointers. The ARM implementation caches these in
+ the exception header (UCB). To avoid rewriting everything we make the
+ virtual IP register point at the UCB. */
+ ip = (_Unwind_Ptr) ue_header;
+ _Unwind_SetGR (context, 12, ip);
+#else