* glibc-2.3.6/nptl/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h
  (EH_FRAME_1) : Move first DW_CFA_def_cfa_offset FDE instruction to
  after the second ebx save/restore since this is where the
  corresponding 'push %eax' occurs in the subroutine.  Adjust the
  offset to three DW_CFA_advance_loc instructions so that the CFI
  table rows they describe are mapped to the correct offsets into the
  subroutine.

--- glibc-2.3.6/nptl/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h.orig	2006-03-05 21:51:42.000000000 +0000
+++ glibc-2.3.6/nptl/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h	2006-03-05 21:57:11.000000000 +0000
@@ -144,16 +144,16 @@
     .uleb128 2;					/* %edx */		      \
     .byte 0x40+L(RESTBX1)-L(SAVEBX1);		/* DW_CFA_advance_loc+N */    \
     .byte 0xc3;					/* DW_CFA_restore %ebx */     \
-    .byte 0x40+L(PUSHSTATE)-L(RESTBX1);		/* DW_CFA_advance_loc+N */    \
-    .byte 14;					/* DW_CFA_def_cfa_offset */   \
-    .uleb128 8;								      \
-    .byte 0x40+L(SAVEBX2)-L(PUSHSTATE);		/* DW_CFA_advance_loc+N */    \
+    .byte 0x40+L(SAVEBX2)-L(RESTBX1);		/* DW_CFA_advance_loc+N */    \
     .byte 9;					/* DW_CFA_register */	      \
     .uleb128 3;					/* %ebx */		      \
     .uleb128 2;					/* %edx */		      \
     .byte 0x40+L(RESTBX2)-L(SAVEBX2);		/* DW_CFA_advance_loc+N */    \
     .byte 0xc3;					/* DW_CFA_restore %ebx */     \
-    .byte 0x40+L(POPSTATE)-L(RESTBX2);		/* DW_CFA_advance_loc+N */    \
+    .byte 0x40+L(PUSHSTATE)-L(RESTBX2);		/* DW_CFA_advance_loc+N */    \
+    .byte 14;					/* DW_CFA_def_cfa_offset */   \
+    .uleb128 8;								      \
+    .byte 0x40+L(POPSTATE)-L(PUSHSTATE);	/* DW_CFA_advance_loc+N */    \
     .byte 14;					/* DW_CFA_def_cfa_offset */   \
     .uleb128 4
 




