{
if (range->start < node->start)
node->start = range->start;
- if (range->end < node->end)
+ if (range->end > node->end)
node->end = range->end;
}
node->next = exception_table_list;
exception_table_list = node;
}
+
+#ifdef __i386
+void
+__unwind_function(void *ptr)
+{
+ asm("movl 8(%esp),%ecx");
+ /* Undo current frame */
+ asm("movl %ebp,%esp");
+ asm("popl %ebp");
+ asm("# like ret, but stay here");
+ asm("addl $4,%esp");
+
+ /* Now, undo previous frame. */
+ /* This is a test routine, as we have to dynamically probe to find out
+ what to pop for certain, this is just a guess. */
+ asm("leal -16(%ebp),%esp");
+ asm("pop %eax # really for popl %ebx");
+ asm("pop %eax # really for popl %esi");
+ asm("pop %eax # really for popl %edi");
+ asm("movl %ebp,%esp");
+ asm("popl %ebp");
+
+ asm("movl %ecx,0(%esp)");
+ asm("ret");
+}
+#endif
#endif /* L_eh */
\f
#ifdef L_pure