summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog52
-rw-r--r--fedora/branch.mk4
-rw-r--r--nptl/ChangeLog10
-rw-r--r--nptl/sysdeps/pthread/pthread.h6
-rw-r--r--nptl/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h282
-rw-r--r--sysdeps/i386/add_n.S12
-rw-r--r--sysdeps/i386/addmul_1.S18
-rw-r--r--sysdeps/i386/bsd-setjmp.S6
-rw-r--r--sysdeps/i386/elf/bsd-setjmp.S6
-rw-r--r--sysdeps/i386/fpu/libm-test-ulps172
-rw-r--r--sysdeps/i386/i486/strcat.S6
-rw-r--r--sysdeps/i386/i586/add_n.S20
-rw-r--r--sysdeps/i386/i586/addmul_1.S18
-rw-r--r--sysdeps/i386/i586/lshift.S37
-rw-r--r--sysdeps/i386/i586/memcpy.S10
-rw-r--r--sysdeps/i386/i586/memset.S6
-rw-r--r--sysdeps/i386/i586/mul_1.S18
-rw-r--r--sysdeps/i386/i586/rshift.S37
-rw-r--r--sysdeps/i386/i586/strchr.S35
-rw-r--r--sysdeps/i386/i586/strcpy.S16
-rw-r--r--sysdeps/i386/i586/sub_n.S20
-rw-r--r--sysdeps/i386/i586/submul_1.S18
-rw-r--r--sysdeps/i386/i686/add_n.S10
-rw-r--r--sysdeps/i386/i686/memcmp.S26
-rw-r--r--sysdeps/i386/i686/memmove.S11
-rw-r--r--sysdeps/i386/i686/mempcpy.S6
-rw-r--r--sysdeps/i386/i686/memset.S4
-rw-r--r--sysdeps/i386/i686/strtok.S8
-rw-r--r--sysdeps/i386/lshift.S22
-rw-r--r--sysdeps/i386/memchr.S15
-rw-r--r--sysdeps/i386/memcmp.S8
-rw-r--r--sysdeps/i386/mul_1.S18
-rw-r--r--sysdeps/i386/rawmemchr.S6
-rw-r--r--sysdeps/i386/rshift.S26
-rw-r--r--sysdeps/i386/stpncpy.S6
-rw-r--r--sysdeps/i386/strchr.S11
-rw-r--r--sysdeps/i386/strchrnul.S6
-rw-r--r--sysdeps/i386/strcspn.S67
-rw-r--r--sysdeps/i386/strpbrk.S67
-rw-r--r--sysdeps/i386/strrchr.S16
-rw-r--r--sysdeps/i386/strspn.S67
-rw-r--r--sysdeps/i386/strtok.S73
-rw-r--r--sysdeps/i386/sub_n.S11
-rw-r--r--sysdeps/i386/submul_1.S18
-rw-r--r--sysdeps/unix/sysv/linux/i386/clone.S18
-rw-r--r--sysdeps/unix/sysv/linux/i386/mmap.S18
-rw-r--r--sysdeps/unix/sysv/linux/i386/mmap64.S31
-rw-r--r--sysdeps/unix/sysv/linux/i386/posix_fadvise64.S30
-rw-r--r--sysdeps/unix/sysv/linux/i386/semtimedop.S14
-rw-r--r--sysdeps/unix/sysv/linux/i386/setcontext.S6
-rw-r--r--sysdeps/unix/sysv/linux/kernel-features.h9
51 files changed, 1028 insertions, 409 deletions
diff --git a/ChangeLog b/ChangeLog
index 16be0d3b43..05e7ffd17f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,55 @@
+2005-05-03  Ulrich Drepper  <drepper@redhat.com>
+
+	* sysdeps/i386/add_n.S: Add call frame information.
+	* sysdeps/i386/addmul_1.S: Likewise.
+	* sysdeps/i386/bsd-setjmp.S: Likewise.
+	* sysdeps/i386/lshift.S: Likewise.
+	* sysdeps/i386/memchr.S: Likewise.
+	* sysdeps/i386/memcmp.S: Likewise.
+	* sysdeps/i386/mul_1.S: Likewise.
+	* sysdeps/i386/rawmemchr.S: Likewise.
+	* sysdeps/i386/rshift.S: Likewise.
+	* sysdeps/i386/stpncpy.S: Likewise.
+	* sysdeps/i386/strchr.S: Likewise.
+	* sysdeps/i386/strchrnul.S: Likewise.
+	* sysdeps/i386/strcspn.S: Likewise.
+	* sysdeps/i386/strpbrk.S: Likewise.
+	* sysdeps/i386/strrchr.S: Likewise.
+	* sysdeps/i386/strspn.S: Likewise.
+	* sysdeps/i386/strtok.S: Likewise.
+	* sysdeps/i386/sub_n.S: Likewise.
+	* sysdeps/i386/submul_1.S: Likewise.
+	* sysdeps/i386/elf/bsd-setjmp.S: Likewise.
+	* sysdeps/i386/i486/strcat.S: Likewise.
+	* sysdeps/i386/i586/add_n.S: Likewise.
+	* sysdeps/i386/i586/addmul_1.S: Likewise.
+	* sysdeps/i386/i586/lshift.S: Likewise.
+	* sysdeps/i386/i586/memcpy.S: Likewise.
+	* sysdeps/i386/i586/memset.S: Likewise.
+	* sysdeps/i386/i586/mul_1.S: Likewise.
+	* sysdeps/i386/i586/rshift.S: Likewise.
+	* sysdeps/i386/i586/strchr.S: Likewise.
+	* sysdeps/i386/i586/strcpy.S: Likewise.
+	* sysdeps/i386/i586/sub_n.S: Likewise.
+	* sysdeps/i386/i586/submul_1.S: Likewise.
+	* sysdeps/i386/i686/add_n.S: Likewise.
+	* sysdeps/i386/i686/memcmp.S: Likewise.
+	* sysdeps/i386/i686/memmove.S: Likewise.
+	* sysdeps/i386/i686/mempcpy.S: Likewise.
+	* sysdeps/i386/i686/memset.S: Likewise.
+	* sysdeps/i386/i686/strtok.S: Likewise.
+	* sysdeps/unix/sysv/linux/i386/clone.S: Likewise.
+	* sysdeps/unix/sysv/linux/i386/mmap.S: Likewise.
+	* sysdeps/unix/sysv/linux/i386/mmap64.S: Likewise.
+	* sysdeps/unix/sysv/linux/i386/posix_fadvise64.S: Likewise.
+	* sysdeps/unix/sysv/linux/i386/semtimedop.S: Likewise.
+	* sysdeps/unix/sysv/linux/i386/setcontext.S: Likewise.
+
+	* sysdeps/i386/fpu/libm-test-ulps: Adjust for gcc 4.
+
+	* sysdeps/unix/sysv/linux/kernel-features.h: waitid is available
+	on ppc in 2.6.12.
+
 2005-04-29  Jakub Jelinek  <jakub@redhat.com>
 
 	* sysdeps/posix/posix_fallocate.c (posix_fallocate): If len == 0,
diff --git a/fedora/branch.mk b/fedora/branch.mk
index b20251e502..294fe6ecd5 100644
--- a/fedora/branch.mk
+++ b/fedora/branch.mk
@@ -1,5 +1,5 @@
 # This file is updated automatically by Makefile.
 glibc-branch := fedora
 glibc-base := HEAD
-fedora-sync-date := 2005-05-03 08:52 UTC
-fedora-sync-tag := fedora-glibc-20050503T0852
+fedora-sync-date := 2005-05-04 07:28 UTC
+fedora-sync-tag := fedora-glibc-20050504T0728
diff --git a/nptl/ChangeLog b/nptl/ChangeLog
index 8aa9b30468..7beb16c0e4 100644
--- a/nptl/ChangeLog
+++ b/nptl/ChangeLog
@@ -1,3 +1,13 @@
+2005-05-03  Ulrich Drepper  <drepper@redhat.com>
+
+	[BZ #915]
+	* sysdeps/pthread/pthread.h: Avoid empty initializers.
+
+2005-05-03  Jakub Jelinek  <jakub@redhat.com>
+
+	* sysdeps/unix/sysv/linux/i386/sysdep-cancel.h: Remove explicit
+	.eh_frame section, use cfi_* directives.
+
 2005-04-27  Jakub Jelinek  <jakub@redhat.com>
 
 	* sysdeps/unix/sysv/linux/pthread_getcpuclockid.c: Use <> instead
diff --git a/nptl/sysdeps/pthread/pthread.h b/nptl/sysdeps/pthread/pthread.h
index 18ece7096f..05f3b31fb5 100644
--- a/nptl/sysdeps/pthread/pthread.h
+++ b/nptl/sysdeps/pthread/pthread.h
@@ -62,7 +62,7 @@ enum
 
 /* Mutex initializers.  */
 #define PTHREAD_MUTEX_INITIALIZER \
-  { }
+  { { 0, } }
 #ifdef __USE_GNU
 # if __WORDSIZE == 64
 #  define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \
@@ -94,7 +94,7 @@ enum
 
 /* Read-write lock initializers.  */
 # define PTHREAD_RWLOCK_INITIALIZER \
-  { }
+  { { 0, } }
 # ifdef __USE_GNU
 #  if __WORDSIZE == 64
 #   define PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP \
@@ -140,7 +140,7 @@ enum
 
 
 /* Conditional variable handling.  */
-#define PTHREAD_COND_INITIALIZER { }
+#define PTHREAD_COND_INITIALIZER { { 0, } }
 
 
 /* Cleanup buffers */
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h b/nptl/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h
index 8142455781..147f5c8470 100644
--- a/nptl/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h
+++ b/nptl/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Jakub Jelinek <jakub@redhat.com>, 2002.
 
@@ -29,7 +29,6 @@
 # define PSEUDO(name, syscall_name, args)				      \
   .text;								      \
   ENTRY (name)								      \
-  L(name##START):							      \
     cmpl $0, %gs:MULTIPLE_THREADS_OFFSET;				      \
     jne L(pseudo_cancel);						      \
   .type __##syscall_name##_nocancel,@function;				      \
@@ -51,258 +50,11 @@
     POPSTATE_##args							      \
     cmpl $-4095, %eax;							      \
     jae SYSCALL_ERROR_LABEL;						      \
-  L(pseudo_end):							      \
-									      \
-  /* Create unwinding information for the syscall wrapper.  */		      \
-  .section .eh_frame,"a",@progbits;					      \
-  L(STARTFRAME):							      \
-    /* Length of the CIE.  */						      \
-    .long L(ENDCIE)-L(STARTCIE);					      \
-  L(STARTCIE):								      \
-    /* CIE ID.  */							      \
-    .long 0;								      \
-    /* Version number.  */						      \
-    .byte 1;								      \
-    /* NUL-terminated augmentation string.  */				      \
-    AUGMENTATION_STRING;						      \
-    /* Code alignment factor.  */					      \
-    .uleb128 1;								      \
-    /* Data alignment factor.  */					      \
-    .sleb128 -4;							      \
-    /* Return address register column.  */				      \
-    .byte 8;								      \
-    /* Optional augmentation parameter.  */				      \
-    AUGMENTATION_PARAM							      \
-    /* Start of the table initialization.  */				      \
-    .byte 0xc;			/* DW_CFA_def_cfa */			      \
-    .uleb128 4;								      \
-    .uleb128 4;								      \
-    .byte 0x88;			/* DW_CFA_offset, column 0x8 */		      \
-    .uleb128 1;								      \
-    .align 4;								      \
-  L(ENDCIE):								      \
-    /* Length of the FDE.  */						      \
-    .long L(ENDFDE)-L(STARTFDE);					      \
-  L(STARTFDE):								      \
-    /* CIE pointer.  */							      \
-    .long L(STARTFDE)-L(STARTFRAME);					      \
-    /* Start address of the code.  */					      \
-    START_SYMBOL_REF (name);						      \
-    /* Length of the code.  */						      \
-    .long L(name##END)-L(name##START);					      \
-    /* Augmentation data.  */						      \
-    AUGMENTATION_PARAM_FDE						      \
-    /* The rest of the code depends on the number of parameters the syscall   \
-       takes.  */							      \
-    EH_FRAME_##args(name);						      \
-    .align 4;								      \
-  L(ENDFDE):								      \
-  .previous
-
-# ifdef SHARED
-/* NUL-terminated augmentation string.  Note "z" means there is an
-   augmentation value later on.  */
-#  define AUGMENTATION_STRING .string "zR"
-#  define AUGMENTATION_PARAM \
-    /* Augmentation value length.  */					      \
-    .uleb128 1;								      \
-    /* Encoding: DW_EH_PE_pcrel + DW_EH_PE_sdata4.  */			      \
-    .byte 0x1b;
-#  define AUGMENTATION_PARAM_FDE \
-    /* No augmentation data.  */					      \
-    .uleb128 0;
-#  define START_SYMBOL_REF(name) \
-    /* PC-relative start address of the code.  */			      \
-    .long L(name##START)-.
-# else
-/* No augmentation.  */
-#  define AUGMENTATION_STRING .ascii "\0"
-#  define AUGMENTATION_PARAM /* nothing */
-#  define AUGMENTATION_PARAM_FDE /* nothing */
-#  define START_SYMBOL_REF(name) \
-    /* Absolute start address of the code.  */				      \
-    .long L(name##START)
-# endif
-
-/* Callframe description for syscalls without parameters.  This is very
-   simple.  The only place the stack pointer is changed is when the old
-   cancellation state value is saved.  */
-# define EH_FRAME_0(name) \
-    .byte 0x40+L(PUSHSTATE)-L(name##START);	/* 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
-
-/* For syscalls with one and two parameters the code is the same as for
-   those which take no parameter.  */
-# define EH_FRAME_1(name) \
-    .byte 0x40+L(SAVEBX1)-L(name##START);	/* DW_CFA_advance_loc+N */    \
-    .byte 9;					/* DW_CFA_register */	      \
-    .uleb128 3;					/* %ebx */		      \
-    .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 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 14;					/* DW_CFA_def_cfa_offset */   \
-    .uleb128 4
-
-# define EH_FRAME_2(name) EH_FRAME_1 (name)
-
-/* For syscalls with three parameters the stack pointer is changed
-   also to save the content of the %ebx register.  */
-# define EH_FRAME_3(name) \
-    .byte 0x40+L(PUSHBX1)-L(name##START);	/* DW_CFA_advance_loc+N */    \
-    .byte 14;					/* DW_CFA_def_cfa_offset */   \
-    .uleb128 8;								      \
-    .byte 0x83;					/* DW_CFA_offset %ebx */      \
-    .uleb128 2;								      \
-    .byte 0x40+L(POPBX1)-L(PUSHBX1);		/* DW_CFA_advance_loc+N */    \
-    .byte 14;					/* DW_CFA_def_cfa_offset */   \
-    .uleb128 4;								      \
-    .byte 0xc3;					/* DW_CFA_restore %ebx */     \
-    .byte 0x40+L(PUSHSTATE)-L(POPBX1);		/* DW_CFA_advance_loc+N */    \
-    .byte 14;					/* DW_CFA_def_cfa_offset */   \
-    .uleb128 8;								      \
-    .byte 0x40+L(PUSHBX2)-L(PUSHSTATE);		/* DW_CFA_advance_loc+N */    \
-    .byte 14;					/* DW_CFA_def_cfa_offset */   \
-    .uleb128 12;							      \
-    .byte 0x83;					/* DW_CFA_offset %ebx */      \
-    .uleb128 3;								      \
-    .byte 0x40+L(POPBX2)-L(PUSHBX2);		/* DW_CFA_advance_loc+N */    \
-    .byte 14;					/* DW_CFA_def_cfa_offset */   \
-    .uleb128 8;								      \
-    .byte 0xc3;					/* DW_CFA_restore %ebx */     \
-    .byte 0x40+L(POPSTATE)-L(POPBX2);		/* DW_CFA_advance_loc+N */    \
-    .byte 14;					/* DW_CFA_def_cfa_offset */   \
-    .uleb128 4
-
-/* With four parameters the syscall wrappers have to save %ebx and %esi.  */
-# define EH_FRAME_4(name) \
-    .byte 0x40+L(PUSHSI1)-L(name##START);	/* DW_CFA_advance_loc+N */    \
-    .byte 14;					/* DW_CFA_def_cfa_offset */   \
-    .uleb128 8;								      \
-    .byte 0x86;					/* DW_CFA_offset %esi */      \
-    .uleb128 2;								      \
-    .byte 0x40+L(PUSHBX1)-L(PUSHSI1);		/* DW_CFA_advance_loc+N */    \
-    .byte 14;					/* DW_CFA_def_cfa_offset */   \
-    .uleb128 12;							      \
-    .byte 0x83;					/* DW_CFA_offset %ebx */      \
-    .uleb128 3;								      \
-    .byte 0x40+L(POPBX1)-L(PUSHBX1);		/* DW_CFA_advance_loc+N */    \
-    .byte 14;					/* DW_CFA_def_cfa_offset */   \
-    .uleb128 8;								      \
-    .byte 0xc3;					/* DW_CFA_restore %ebx */     \
-    .byte 0x40+L(POPSI1)-L(POPBX1);		/* DW_CFA_advance_loc+N */    \
-    .byte 14;					/* DW_CFA_def_cfa_offset */   \
-    .uleb128 4;								      \
-    .byte 0xc6;					/* DW_CFA_restore %esi */     \
-    .byte 0x40+L(PUSHSTATE)-L(POPSI1);		/* DW_CFA_advance_loc+N */    \
-    .byte 14;					/* DW_CFA_def_cfa_offset */   \
-    .uleb128 8;								      \
-    .byte 0x40+L(PUSHSI2)-L(PUSHSTATE);		/* DW_CFA_advance_loc+N */    \
-    .byte 14;					/* DW_CFA_def_cfa_offset */   \
-    .uleb128 12;							      \
-    .byte 0x86;					/* DW_CFA_offset %esi */      \
-    .uleb128 3;								      \
-    .byte 0x40+L(PUSHBX2)-L(PUSHSI2);		/* DW_CFA_advance_loc+N */    \
-    .byte 14;					/* DW_CFA_def_cfa_offset */   \
-    .uleb128 16;							      \
-    .byte 0x83;					/* DW_CFA_offset %ebx */      \
-    .uleb128 4;								      \
-    .byte 0x40+L(POPBX2)-L(PUSHBX2);		/* DW_CFA_advance_loc+N */    \
-    .byte 14;					/* DW_CFA_def_cfa_offset */   \
-    .uleb128 12;							      \
-    .byte 0xc3;					/* DW_CFA_restore %ebx */     \
-    .byte 0x40+L(POPSI2)-L(POPBX2);		/* DW_CFA_advance_loc+N */    \
-    .byte 14;					/* DW_CFA_def_cfa_offset */   \
-    .uleb128 8;								      \
-    .byte 0xc6;					/* DW_CFA_restore %esi */     \
-    .byte 0x40+L(POPSTATE)-L(POPSI2);		/* DW_CFA_advance_loc+N */    \
-    .byte 14;					/* DW_CFA_def_cfa_offset */   \
-    .uleb128 4
-
-/* With five parameters the syscall wrappers have to save %ebx, %esi,
-   and %edi.  */
-# define EH_FRAME_5(name) \
-    .byte 0x40+L(PUSHDI1)-L(name##START);	/* DW_CFA_advance_loc+N */    \
-    .byte 14;					/* DW_CFA_def_cfa_offset */   \
-    .uleb128 8;								      \
-    .byte 0x87;					/* DW_CFA_offset %edi */      \
-    .uleb128 2;								      \
-    .byte 0x40+L(PUSHSI1)-L(PUSHDI1);		/* DW_CFA_advance_loc+N */    \
-    .byte 14;					/* DW_CFA_def_cfa_offset */   \
-    .uleb128 12;							      \
-    .byte 0x86;					/* DW_CFA_offset %esi */      \
-    .uleb128 3;								      \
-    .byte 0x40+L(PUSHBX1)-L(PUSHSI1);		/* DW_CFA_advance_loc+N */    \
-    .byte 14;					/* DW_CFA_def_cfa_offset */   \
-    .uleb128 16;							      \
-    .byte 0x83;					/* DW_CFA_offset %ebx */      \
-    .uleb128 4;								      \
-    .byte 0x40+L(POPBX1)-L(PUSHBX1);		/* DW_CFA_advance_loc+N */    \
-    .byte 14;					/* DW_CFA_def_cfa_offset */   \
-    .uleb128 12;							      \
-    .byte 0xc3;					/* DW_CFA_restore %ebx */     \
-    .byte 0x40+L(POPSI1)-L(POPBX1);		/* DW_CFA_advance_loc+N */    \
-    .byte 14;					/* DW_CFA_def_cfa_offset */   \
-    .uleb128 8;								      \
-    .byte 0xc6;					/* DW_CFA_restore %esi */     \
-    .byte 0x40+L(POPDI1)-L(POPSI1);		/* DW_CFA_advance_loc+N */    \
-    .byte 14;					/* DW_CFA_def_cfa_offset */   \
-    .uleb128 4;								      \
-    .byte 0xc7;					/* DW_CFA_restore %edi */     \
-    .byte 0x40+L(PUSHSTATE)-L(POPDI1);		/* DW_CFA_advance_loc+N */    \
-    .byte 14;					/* DW_CFA_def_cfa_offset */   \
-    .uleb128 8;								      \
-    .byte 0x40+L(PUSHDI2)-L(PUSHSTATE);		/* DW_CFA_advance_loc+N */    \
-    .byte 14;					/* DW_CFA_def_cfa_offset */   \
-    .uleb128 12;							      \
-    .byte 0x87;					/* DW_CFA_offset %edi */      \
-    .uleb128 3;								      \
-    .byte 0x40+L(PUSHSI2)-L(PUSHDI2);		/* DW_CFA_advance_loc+N */    \
-    .byte 14;					/* DW_CFA_def_cfa_offset */   \
-    .uleb128 16;							      \
-    .byte 0x86;					/* DW_CFA_offset %esi */      \
-    .uleb128 4;								      \
-    .byte 0x40+L(PUSHBX2)-L(PUSHSI2);		/* DW_CFA_advance_loc+N */    \
-    .byte 14;					/* DW_CFA_def_cfa_offset */   \
-    .uleb128 20;							      \
-    .byte 0x83;					/* DW_CFA_offset %ebx */      \
-    .uleb128 5;								      \
-    .byte 0x40+L(POPBX2)-L(PUSHBX2);		/* DW_CFA_advance_loc+N */    \
-    .byte 14;					/* DW_CFA_def_cfa_offset */   \
-    .uleb128 16;							      \
-    .byte 0xc3;					/* DW_CFA_restore %ebx */     \
-    .byte 0x40+L(POPSI2)-L(POPBX2);		/* DW_CFA_advance_loc+N */    \
-    .byte 14;					/* DW_CFA_def_cfa_offset */   \
-    .uleb128 12;							      \
-    .byte 0xc6;					/* DW_CFA_restore %esi */     \
-    .byte 0x40+L(POPDI2)-L(POPSI2);		/* DW_CFA_advance_loc+N */    \
-    .byte 14;					/* DW_CFA_def_cfa_offset */   \
-    .uleb128 8;								      \
-    .byte 0xc7;					/* DW_CFA_restore %edi */     \
-    .byte 0x40+L(POPSTATE)-L(POPDI2);		/* DW_CFA_advance_loc+N */    \
-    .byte 14;					/* DW_CFA_def_cfa_offset */   \
-    .uleb128 4
-
-
-# undef ASM_SIZE_DIRECTIVE
-# define ASM_SIZE_DIRECTIVE(name) L(name##END): .size name,.-name;
+  L(pseudo_end):
 
 # define SAVE_OLDTYPE_0	movl %eax, %ecx;
 # define SAVE_OLDTYPE_1	SAVE_OLDTYPE_0
-# define SAVE_OLDTYPE_2	pushl %eax; L(PUSHSTATE):
+# define SAVE_OLDTYPE_2	pushl %eax; cfi_adjust_cfa_offset (4);
 # define SAVE_OLDTYPE_3	SAVE_OLDTYPE_2
 # define SAVE_OLDTYPE_4	SAVE_OLDTYPE_2
 # define SAVE_OLDTYPE_5	SAVE_OLDTYPE_2
@@ -313,11 +65,13 @@
 # define _PUSHCARGS_0	/* No arguments to push.  */
 # define _POPCARGS_0	/* No arguments to pop.  */
 
-# define PUSHCARGS_1	movl %ebx, %edx; L(SAVEBX2): PUSHCARGS_0
+# define PUSHCARGS_1	movl %ebx, %edx; cfi_register (ebx, edx); PUSHCARGS_0
 # define DOCARGS_1	_DOARGS_1 (4)
-# define POPCARGS_1	POPCARGS_0; movl %edx, %ebx; L(RESTBX2):
-# define _PUSHCARGS_1	pushl %ebx; L(PUSHBX2): _PUSHCARGS_0
-# define _POPCARGS_1	_POPCARGS_0; popl %ebx; L(POPBX2):
+# define POPCARGS_1	POPCARGS_0; movl %edx, %ebx; cfi_restore (ebx);
+# define _PUSHCARGS_1	pushl %ebx; cfi_adjust_cfa_offset (4); \
+			cfi_rel_offset (ebx, 0); _PUSHCARGS_0
+# define _POPCARGS_1	_POPCARGS_0; popl %ebx; \
+			cfi_adjust_cfa_offset (-4); cfi_restore (ebx);
 
 # define PUSHCARGS_2	PUSHCARGS_1
 # define DOCARGS_2	_DOARGS_2 (12)
@@ -334,14 +88,18 @@
 # define PUSHCARGS_4	_PUSHCARGS_4
 # define DOCARGS_4	_DOARGS_4 (28)
 # define POPCARGS_4	_POPCARGS_4
-# define _PUSHCARGS_4	pushl %esi; L(PUSHSI2): _PUSHCARGS_3
-# define _POPCARGS_4	_POPCARGS_3; popl %esi; L(POPSI2):
+# define _PUSHCARGS_4	pushl %esi; cfi_adjust_cfa_offset (4); \
+			cfi_rel_offset (esi, 0); _PUSHCARGS_3
+# define _POPCARGS_4	_POPCARGS_3; popl %esi; \
+			cfi_adjust_cfa_offset (-4); cfi_restore (esi);
 
 # define PUSHCARGS_5	_PUSHCARGS_5
 # define DOCARGS_5	_DOARGS_5 (36)
 # define POPCARGS_5	_POPCARGS_5
-# define _PUSHCARGS_5	pushl %edi; L(PUSHDI2): _PUSHCARGS_4
-# define _POPCARGS_5	_POPCARGS_4; popl %edi; L(POPDI2):
+# define _PUSHCARGS_5	pushl %edi; cfi_adjust_cfa_offset (4); \
+			cfi_rel_offset (edi, 0); _PUSHCARGS_4
+# define _POPCARGS_5	_POPCARGS_4; popl %edi; \
+			cfi_adjust_cfa_offset (-4); cfi_restore (edi);
 
 # ifdef IS_IN_libpthread
 #  define CENABLE	call __pthread_enable_asynccancel;
@@ -356,9 +114,11 @@
 #  error Unsupported library
 # endif
 # define POPSTATE_0 \
- pushl %eax; L(PUSHSTATE): movl %ecx, %eax; CDISABLE; popl %eax; L(POPSTATE):
+ pushl %eax; cfi_adjust_cfa_offset (4); movl %ecx, %eax; \
+ CDISABLE; popl %eax; cfi_adjust_cfa_offset (-4);
 # define POPSTATE_1	POPSTATE_0
-# define POPSTATE_2	xchgl (%esp), %eax; CDISABLE; popl %eax; L(POPSTATE):
+# define POPSTATE_2	xchgl (%esp), %eax; CDISABLE; popl %eax; \
+			cfi_adjust_cfa_offset (-4);
 # define POPSTATE_3	POPSTATE_2
 # define POPSTATE_4	POPSTATE_3
 # define POPSTATE_5	POPSTATE_4
diff --git a/sysdeps/i386/add_n.S b/sysdeps/i386/add_n.S
index f43a4757b2..c7a5ce721b 100644
--- a/sysdeps/i386/add_n.S
+++ b/sysdeps/i386/add_n.S
@@ -1,6 +1,6 @@
 /* Add two limb vectors of the same length > 0 and store sum in a third
    limb vector.
-   Copyright (C) 1992, 94, 95, 97, 98, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1992,94,95,97,98,2000,2005 Free Software Foundation, Inc.
    This file is part of the GNU MP Library.
 
    The GNU MP Library is free software; you can redistribute it and/or modify
@@ -34,10 +34,14 @@ ENTRY (BP_SYM (__mpn_add_n))
 	ENTER
 
 	pushl %edi
+	cfi_adjust_cfa_offset (4)
 	pushl %esi
+	cfi_adjust_cfa_offset (4)
 
 	movl RES(%esp),%edi
+	cfi_rel_offset (edi, 4)
 	movl S1(%esp),%esi
+	cfi_rel_offset (esi, 0)
 	movl S2(%esp),%edx
 	movl SIZE(%esp),%ecx
 #if __BOUNDED_POINTERS__
@@ -62,10 +66,12 @@ ENTRY (BP_SYM (__mpn_add_n))
 /* Calculate start address in loop for PIC.  Due to limitations in some
    assemblers, Loop-L0-3 cannot be put into the leal */
 	call	L(0)
+	cfi_adjust_cfa_offset (4)
 L(0):	leal	(%eax,%eax,8),%eax
 	addl	(%esp),%eax
 	addl	$(L(oop)-L(0)-3),%eax
 	addl	$4,%esp
+	cfi_adjust_cfa_offset (-4)
 #else
 /* Calculate start address in loop for non-PIC.  */
  	leal	(L(oop) - 3)(%eax,%eax,8),%eax
@@ -106,7 +112,11 @@ L(oop):	movl	(%esi),%eax
 	negl	%eax
 
 	popl %esi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (esi)
 	popl %edi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (edi)
 
 	LEAVE
 	ret
diff --git a/sysdeps/i386/addmul_1.S b/sysdeps/i386/addmul_1.S
index fb1042efb8..23c3f5922f 100644
--- a/sysdeps/i386/addmul_1.S
+++ b/sysdeps/i386/addmul_1.S
@@ -1,6 +1,6 @@
 /* i80386 __mpn_addmul_1 -- Multiply a limb vector with a limb and add
    the result to a second limb vector.
-   Copyright (C) 1992, 1994, 1997, 1998, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1992,1994,1997,1998,2000,2005 Free Software Foundation, Inc.
    This file is part of the GNU MP Library.
 
    The GNU MP Library is free software; you can redistribute it and/or modify
@@ -39,14 +39,21 @@ ENTRY (BP_SYM (__mpn_addmul_1))
 	ENTER
 
 	pushl	%edi
+	cfi_adjust_cfa_offset (4)
 	pushl	%esi
+	cfi_adjust_cfa_offset (4)
 	pushl	%ebp
+	cfi_adjust_cfa_offset (4)
 	pushl	%ebx
+	cfi_adjust_cfa_offset (4)
 
 	movl	RES(%esp), %res_ptr
+	cfi_rel_offset (res_ptr, 12)
 	movl	S1(%esp), %s1_ptr
+	cfi_rel_offset (s1_ptr, 8)
 	movl	SIZE(%esp), %sizeP
 	movl	S2LIMB(%esp), %s2_limb
+	cfi_rel_offset (s2_limb, 0)
 #if __BOUNDED_POINTERS__
 	shll	$2, %sizeP	/* convert limbs to bytes */
 	CHECK_BOUNDS_BOTH_WIDE (%res_ptr, RES(%esp), %sizeP)
@@ -57,6 +64,7 @@ ENTRY (BP_SYM (__mpn_addmul_1))
 	leal	(%s1_ptr,%sizeP,4), %s1_ptr
 	negl	%sizeP
 	xorl	%ebp, %ebp
+	cfi_rel_offset (ebp, 4)
 	ALIGN (3)
 L(oop):
 	movl	(%s1_ptr,%sizeP,4), %eax
@@ -72,9 +80,17 @@ L(oop):
 	movl	%ebp, %eax
 
 	popl	%ebx
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebx)
 	popl	%ebp
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebp)
 	popl	%esi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (esi)
 	popl	%edi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (edi)
 
 	LEAVE
 	ret
diff --git a/sysdeps/i386/bsd-setjmp.S b/sysdeps/i386/bsd-setjmp.S
index ea242d1f96..b6934dc548 100644
--- a/sysdeps/i386/bsd-setjmp.S
+++ b/sysdeps/i386/bsd-setjmp.S
@@ -1,5 +1,5 @@
 /* BSD `setjmp' entry point to `sigsetjmp (..., 1)'.  i386 version.
-   Copyright (C) 1994,1995,1996,1997,2000,2001 Free Software Foundation, Inc.
+   Copyright (C) 1994-1997,2000,2001,2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -50,9 +50,13 @@ ENTRY (BP_SYM (setjmp))
 
 	/* Call __sigjmp_save.  */
 	pushl $1
+	cfi_adjust_cfa_offset (4)
 	pushl 8(%esp)
+	cfi_adjust_cfa_offset (4)
 	call BP_SYM (__sigjmp_save)
 	popl %ecx
+	cfi_adjust_cfa_offset (-4)
 	popl %edx
+	cfi_adjust_cfa_offset (-4)
 	ret
 END (BP_SYM (setjmp))
diff --git a/sysdeps/i386/elf/bsd-setjmp.S b/sysdeps/i386/elf/bsd-setjmp.S
index 72a85b18e1..c421791fe0 100644
--- a/sysdeps/i386/elf/bsd-setjmp.S
+++ b/sysdeps/i386/elf/bsd-setjmp.S
@@ -1,5 +1,5 @@
 /* BSD `setjmp' entry point to `sigsetjmp (..., 1)'.  i386 version.
-   Copyright (C) 1995-1997,2000,2001,2002,2003 Free Software Foundation, Inc.
+   Copyright (C) 1995-1997,2000-2003,2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -50,7 +50,9 @@ ENTRY (BP_SYM (setjmp))
 
 	/* Call __sigjmp_save.  */
 	pushl $1
+	cfi_adjust_cfa_offset (4)
 	pushl 8(%esp)
+	cfi_adjust_cfa_offset (4)
 #ifdef	PIC
 	/* We cannot use the PLT, because it requires that %ebx be set, but
            we can't save and restore our caller's value.  Instead, we do an
@@ -64,7 +66,9 @@ ENTRY (BP_SYM (setjmp))
 	call BP_SYM (__sigjmp_save)
 #endif
 	popl %ecx
+	cfi_adjust_cfa_offset (-4)
 	popl %edx
+	cfi_adjust_cfa_offset (-4)
 	ret
 END (BP_SYM (setjmp))
 
diff --git a/sysdeps/i386/fpu/libm-test-ulps b/sysdeps/i386/fpu/libm-test-ulps
index 71c1ab5d8e..302ca77812 100644
--- a/sysdeps/i386/fpu/libm-test-ulps
+++ b/sysdeps/i386/fpu/libm-test-ulps
@@ -7,20 +7,20 @@ ldouble: 1
 
 # asin
 Test "asin (-0.5) == -pi/6":
-ldouble: 1
 ildouble: 1
-Test "asin (-1.0) == -pi/2":
 ldouble: 1
+Test "asin (-1.0) == -pi/2":
 ildouble: 1
-Test "asin (0.5) == pi/6":
 ldouble: 1
+Test "asin (0.5) == pi/6":
 ildouble: 1
-Test "asin (0.75) == 0.848062078981481008052944338998418080":
 ldouble: 1
+Test "asin (0.75) == 0.848062078981481008052944338998418080":
 ildouble: 1
-Test "asin (1.0) == pi/2":
 ldouble: 1
+Test "asin (1.0) == pi/2":
 ildouble: 1
+ldouble: 1
 
 # atanh
 Test "atanh (0.75) == 0.972955074527656652552676371721589865":
@@ -44,11 +44,11 @@ ildouble: 6
 ldouble: 6
 Test "Imaginary part of: cacosh (-2 - 3 i) == -1.9833870299165354323470769028940395 + 2.1414491111159960199416055713254211 i":
 double: 1
+float: 4
 idouble: 1
+ifloat: 4
 ildouble: 1
 ldouble: 1
-ifloat: 4
-float: 4
 Test "Real part of: cacosh (0.75 + 1.25 i) == 1.13239363160530819522266333696834467 + 1.11752014915610270578240049553777969 i":
 ildouble: 1
 ldouble: 1
@@ -473,24 +473,26 @@ float: 1
 # j0
 Test "j0 (-4.0) == -3.9714980986384737228659076845169804197562E-1":
 double: 1
-float: 1
+float: 2
 idouble: 1
-ifloat: 1
+ifloat: 2
 ildouble: 1
 ldouble: 1
 Test "j0 (10.0) == -0.245935764451348335197760862485328754":
-double: 1
+double: 3
 float: 1
-idouble: 1
+idouble: 3
 ifloat: 1
 Test "j0 (2.0) == 0.223890779141235668051827454649948626":
+double: 1
 float: 1
+idouble: 1
 ifloat: 1
 Test "j0 (4.0) == -3.9714980986384737228659076845169804197562E-1":
 double: 1
-float: 1
+float: 2
 idouble: 1
-ifloat: 1
+ifloat: 2
 ildouble: 1
 ldouble: 1
 Test "j0 (8.0) == 0.171650807137553906090869407851972001":
@@ -498,22 +500,21 @@ float: 1
 ifloat: 1
 
 # j1
+Test "j1 (0.75) == 0.349243602174862192523281016426251335":
+double: 1
+idouble: 1
 Test "j1 (10.0) == 0.0434727461688614366697487680258592883":
 float: 1
 ifloat: 1
 ildouble: 1
 ldouble: 1
-Test "j1 (0.75) == 0.349243602174862192523281016426251335":
-double: 1
-idouble: 1
 Test "j1 (2.0) == 0.576724807756873387202448242269137087":
 double: 1
 idouble: 1
-Test "j1 (0.75) == 0.349243602174862192523281016426251335":
-double: 1
-idouble: 1
 Test "j1 (8.0) == 0.234636346853914624381276651590454612":
+double: 1
 float: 1
+idouble: 1
 ifloat: 1
 ildouble: 1
 ldouble: 1
@@ -521,24 +522,26 @@ ldouble: 1
 # jn
 Test "jn (0, -4.0) == -3.9714980986384737228659076845169804197562E-1":
 double: 1
-float: 1
+float: 2
 idouble: 1
-ifloat: 1
+ifloat: 2
 ildouble: 1
 ldouble: 1
 Test "jn (0, 10.0) == -0.245935764451348335197760862485328754":
-double: 1
+double: 3
 float: 1
-idouble: 1
+idouble: 3
 ifloat: 1
 Test "jn (0, 2.0) == 0.223890779141235668051827454649948626":
+double: 1
 float: 1
+idouble: 1
 ifloat: 1
 Test "jn (0, 4.0) == -3.9714980986384737228659076845169804197562E-1":
 double: 1
-float: 1
+float: 2
 idouble: 1
-ifloat: 1
+ifloat: 2
 ildouble: 1
 ldouble: 1
 Test "jn (0, 8.0) == 0.171650807137553906090869407851972001":
@@ -556,22 +559,24 @@ Test "jn (1, 2.0) == 0.576724807756873387202448242269137087":
 double: 1
 idouble: 1
 Test "jn (1, 8.0) == 0.234636346853914624381276651590454612":
+double: 1
 float: 1
+idouble: 1
 ifloat: 1
 ildouble: 1
 ldouble: 1
 Test "jn (10, -1.0) == 0.263061512368745320699785368779050294e-9":
 double: 1
+float: 1
 idouble: 1
+ifloat: 1
 ildouble: 1
 ldouble: 1
-ifloat: 1
-float: 1
 Test "jn (10, 0.125) == 0.250543369809369890173993791865771547e-18":
-float: 1
-ifloat: 1
 double: 1
+float: 1
 idouble: 1
+ifloat: 1
 Test "jn (10, 0.75) == 0.149621713117596814698712483621682835e-10":
 float: 1
 ifloat: 1
@@ -579,46 +584,46 @@ ildouble: 2
 ldouble: 2
 Test "jn (10, 1.0) == 0.263061512368745320699785368779050294e-9":
 double: 1
+float: 1
 idouble: 1
+ifloat: 1
 ildouble: 1
 ldouble: 1
-ifloat: 1
-float: 1
 Test "jn (10, 10.0) == 0.207486106633358857697278723518753428":
-double: 2
+double: 5
 float: 2
-idouble: 2
+idouble: 5
 ifloat: 2
 ildouble: 2
 ldouble: 2
 Test "jn (10, 2.0) == 0.251538628271673670963516093751820639e-6":
+double: 2
+idouble: 2
 ildouble: 1
 ldouble: 1
-idouble: 2
-double: 2
 Test "jn (3, -1.0) == -0.0195633539826684059189053216217515083":
 ildouble: 1
 ldouble: 1
 Test "jn (3, 0.75) == 0.848438342327410884392755236884386804e-2":
-float: 1
-ifloat: 1
 double: 1
+float: 1
 idouble: 1
+ifloat: 1
 Test "jn (3, 1.0) == 0.0195633539826684059189053216217515083":
 ildouble: 1
 ldouble: 1
 Test "jn (3, 10.0) == 0.0583793793051868123429354784103409563":
-double: 1
+double: 5
 float: 2
-idouble: 1
+idouble: 5
 ifloat: 2
 ildouble: 1
 ldouble: 1
 Test "jn (3, 2.0) == 0.128943249474402051098793332969239835":
-ildouble: 1
-ldouble: 1
 double: 1
 idouble: 1
+ildouble: 1
+ldouble: 1
 
 # lgamma
 Test "lgamma (-0.5) == log(2*sqrt(pi))":
@@ -627,10 +632,10 @@ idouble: 1
 ildouble: 1
 ldouble: 1
 Test "lgamma (0.7) == 0.260867246531666514385732417016759578":
-float: 1
-ifloat: 1
 double: 1
+float: 1
 idouble: 1
+ifloat: 1
 Test "lgamma (1.2) == -0.853740900033158497197028392998854470e-1":
 double: 1
 float: 2
@@ -714,32 +719,39 @@ float: 1
 idouble: 1
 ifloat: 1
 Test "y0 (1.0) == 0.0882569642156769579829267660235151628":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
 ildouble: 1
 ldouble: 1
-ifloat: 1
+Test "y0 (1.5) == 0.382448923797758843955068554978089862":
+double: 1
 float: 1
-double: 2
-idouble: 2
+idouble: 1
+ifloat: 1
 Test "y0 (10.0) == 0.0556711672835993914244598774101900481":
+double: 1
 float: 1
+idouble: 1
 ifloat: 1
 ildouble: 1
 ldouble: 1
 Test "y0 (8.0) == 0.223521489387566220527323400498620359":
+double: 1
 float: 1
+idouble: 1
 ifloat: 1
 ildouble: 1
 ldouble: 1
-Test "y0 (1.5) == 0.382448923797758843955068554978089862":
-float: 1
-ifloat: 1
-double: 1
-idouble: 1
 
 # y1
 Test "y1 (0.125) == -5.19993611253477499595928744876579921":
 ildouble: 1
 ldouble: 1
+Test "y1 (1.0) == -0.781212821300288716547150000047964821":
+double: 1
+idouble: 1
 Test "y1 (10.0) == 0.249015424206953883923283474663222803":
 double: 2
 float: 2
@@ -753,13 +765,12 @@ ifloat: 2
 ildouble: 1
 ldouble: 1
 Test "y1 (8.0) == -0.158060461731247494255555266187483550":
+double: 1
 float: 2
+idouble: 1
 ifloat: 2
 ildouble: 1
 ldouble: 1
-Test "y1 (1.0) == -0.781212821300288716547150000047964821":
-double: 1
-idouble: 1
 
 # yn
 Test "yn (0, 0.125) == -1.38968062514384052915582277745018693":
@@ -771,24 +782,28 @@ float: 1
 idouble: 1
 ifloat: 1
 Test "yn (0, 1.0) == 0.0882569642156769579829267660235151628":
-ildouble: 1
-ldouble: 1
-ifloat: 1
-float: 1
 double: 2
+float: 1
 idouble: 2
-Test "yn (0, 1.5) == 0.382448923797758843955068554978089862":
 ifloat: 1
-float: 1
+ildouble: 1
+ldouble: 1
+Test "yn (0, 1.5) == 0.382448923797758843955068554978089862":
 double: 1
+float: 1
 idouble: 1
+ifloat: 1
 Test "yn (0, 10.0) == 0.0556711672835993914244598774101900481":
+double: 1
 float: 1
+idouble: 1
 ifloat: 1
 ildouble: 1
 ldouble: 1
 Test "yn (0, 8.0) == 0.223521489387566220527323400498620359":
+double: 1
 float: 1
+idouble: 1
 ifloat: 1
 ildouble: 1
 ldouble: 1
@@ -796,8 +811,8 @@ Test "yn (1, 0.125) == -5.19993611253477499595928744876579921":
 ildouble: 1
 ldouble: 1
 Test "yn (1, 1.0) == -0.781212821300288716547150000047964821":
-idouble: 1
 double: 1
+idouble: 1
 Test "yn (1, 10.0) == 0.249015424206953883923283474663222803":
 double: 2
 float: 2
@@ -811,13 +826,12 @@ ifloat: 2
 ildouble: 1
 ldouble: 1
 Test "yn (1, 8.0) == -0.158060461731247494255555266187483550":
+double: 1
 float: 2
+idouble: 1
 ifloat: 2
 ildouble: 1
 ldouble: 1
-Test "yn (3, 0.75) == -12.9877176234475433186319774484809207":
-ifloat: 1
-float: 1
 Test "yn (10, 0.125) == -127057845771019398.252538486899753195":
 double: 1
 float: 1
@@ -841,10 +855,10 @@ float: 3
 idouble: 1
 ifloat: 3
 Test "yn (10, 2.0) == -129184.542208039282635913145923304214":
-float: 3
-ifloat: 3
 double: 2
+float: 3
 idouble: 2
+ifloat: 3
 Test "yn (3, 0.125) == -2612.69757350066712600220955744091741":
 ildouble: 1
 ldouble: 1
@@ -855,12 +869,12 @@ idouble: 1
 ifloat: 1
 ildouble: 2
 ldouble: 2
-Test "yn (3, 2.0) == -1.12778377684042778608158395773179238":
-float: 1
-ifloat: 1
+Test "yn (3, 10.0) == -0.251362657183837329779204747654240998":
 double: 1
+float: 1
 idouble: 1
-Test "yn (3, 10.0) == -0.251362657183837329779204747654240998":
+ifloat: 1
+Test "yn (3, 2.0) == -1.12778377684042778608158395773179238":
 double: 1
 float: 1
 idouble: 1
@@ -872,8 +886,8 @@ ildouble: 622
 ldouble: 622
 
 Function: "asin":
-ldouble: 1
 ildouble: 1
+ldouble: 1
 
 Function: "atanh":
 ildouble: 2
@@ -895,11 +909,11 @@ ldouble: 6
 
 Function: Imaginary part of "cacosh":
 double: 1
+float: 4
 idouble: 1
+ifloat: 4
 ildouble: 1
 ldouble: 1
-ifloat: 4
-float: 4
 
 Function: Real part of "casin":
 double: 1
@@ -1115,10 +1129,10 @@ Function: "hypot":
 float: 1
 
 Function: "j0":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
+double: 3
+float: 2
+idouble: 3
+ifloat: 2
 ildouble: 1
 ldouble: 1
 
@@ -1131,9 +1145,9 @@ ildouble: 1
 ldouble: 1
 
 Function: "jn":
-double: 2
+double: 5
 float: 2
-idouble: 2
+idouble: 5
 ifloat: 2
 ildouble: 2
 ldouble: 2
diff --git a/sysdeps/i386/i486/strcat.S b/sysdeps/i386/i486/strcat.S
index 7d8279fe14..ec7d4c80b6 100644
--- a/sysdeps/i386/i486/strcat.S
+++ b/sysdeps/i386/i486/strcat.S
@@ -1,6 +1,6 @@
 /* strcat(dest, src) -- Append SRC on the end of DEST.
    For Intel 80x86, x>=4.
-   Copyright (C) 1994,1995,1996,1997,2000,2003 Free Software Foundation, Inc.
+   Copyright (C) 1994-1997,2000,2003,2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@ipd.info.uni-karlsruhe.de>.
    Optimised a little by Alan Modra <Alan@SPRI.Levels.UniSA.Edu.Au>
@@ -35,6 +35,7 @@ ENTRY (BP_SYM (strcat))
 	ENTER
 
 	pushl %edi		/* Save callee-safe register.  */
+	cfi_adjust_cfa_offset (4)
 
 	movl DEST(%esp), %edx
 	movl SRC(%esp), %ecx
@@ -66,6 +67,7 @@ ENTRY (BP_SYM (strcat))
 	/* Now we are aligned.  Begin scan loop.  */
 	jmp L(1)
 
+	cfi_rel_offset (edi, 0)
 	ALIGN(4)
 
 L(4):	addl $16,%edx		/* increment destination pointer for round */
@@ -263,6 +265,8 @@ L(8):	/* GKM FIXME: check high bounds */
 	movl DEST(%esp), %eax	/* start address of destination is result */
 	RETURN_BOUNDED_POINTER (DEST(%esp))
 	popl %edi		/* restore saved register */
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (edi)
 
 	LEAVE
 	RET_PTR
diff --git a/sysdeps/i386/i586/add_n.S b/sysdeps/i386/i586/add_n.S
index c2afc37ee3..57706b23b4 100644
--- a/sysdeps/i386/i586/add_n.S
+++ b/sysdeps/i386/i586/add_n.S
@@ -1,6 +1,6 @@
 /* Pentium __mpn_add_n -- Add two limb vectors of the same length > 0 and store
    sum in a third limb vector.
-   Copyright (C) 1992, 94, 95, 96, 97, 98, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1992,94,95,96,97,98,2000,2005 Free Software Foundation, Inc.
    This file is part of the GNU MP Library.
 
    The GNU MP Library is free software; you can redistribute it and/or modify
@@ -34,13 +34,20 @@ ENTRY (BP_SYM (__mpn_add_n))
 	ENTER
 
 	pushl	%edi
+	cfi_adjust_cfa_offset (4)
 	pushl	%esi
+	cfi_adjust_cfa_offset (4)
 	pushl	%ebp
+	cfi_adjust_cfa_offset (4)
 	pushl	%ebx
+	cfi_adjust_cfa_offset (4)
 
 	movl	RES(%esp),%edi
+	cfi_rel_offset (edi, 12)
 	movl	S1(%esp),%esi
+	cfi_rel_offset (esi, 8)
 	movl	S2(%esp),%ebx
+	cfi_rel_offset (ebx, 0)
 	movl	SIZE(%esp),%ecx
 #if __BOUNDED_POINTERS__
 	shll	$2, %ecx		/* convert limbs to bytes */
@@ -50,6 +57,7 @@ ENTRY (BP_SYM (__mpn_add_n))
 	shrl	$2, %ecx
 #endif
 	movl	(%ebx),%ebp
+	cfi_rel_offset (ebp, 4)
 
 	decl	%ecx
 	movl	%ecx,%edx
@@ -58,6 +66,7 @@ ENTRY (BP_SYM (__mpn_add_n))
 	testl	%ecx,%ecx		/* zero carry flag */
 	jz	L(end)
 	pushl	%edx
+	cfi_adjust_cfa_offset (4)
 
 	ALIGN (3)
 L(oop):	movl	28(%edi),%eax		/* fetch destination cache line */
@@ -105,6 +114,7 @@ L(4):	movl	24(%esi),%eax
 	jnz	L(oop)
 
 	popl	%edx
+	cfi_adjust_cfa_offset (-4)
 L(end):
 	decl	%edx			/* test %edx w/o clobbering carry */
 	js	L(end2)
@@ -128,9 +138,17 @@ L(end2):
 	negl	%eax
 
 	popl	%ebx
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebx)
 	popl	%ebp
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebp)
 	popl	%esi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (esi)
 	popl	%edi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (edi)
 
 	LEAVE
 	ret
diff --git a/sysdeps/i386/i586/addmul_1.S b/sysdeps/i386/i586/addmul_1.S
index 9329637fe2..18955e36d9 100644
--- a/sysdeps/i386/i586/addmul_1.S
+++ b/sysdeps/i386/i586/addmul_1.S
@@ -1,6 +1,6 @@
 /* Pentium __mpn_addmul_1 -- Multiply a limb vector with a limb and add
    the result to a second limb vector.
-   Copyright (C) 1992, 94, 96, 97, 98, 00 Free Software Foundation, Inc.
+   Copyright (C) 1992, 94, 96, 97, 98, 00, 2005 Free Software Foundation, Inc.
    This file is part of the GNU MP Library.
 
    The GNU MP Library is free software; you can redistribute it and/or modify
@@ -39,14 +39,21 @@ ENTRY (BP_SYM (__mpn_addmul_1))
 	ENTER
 
 	pushl	%edi
+	cfi_adjust_cfa_offset (4)
 	pushl	%esi
+	cfi_adjust_cfa_offset (4)
 	pushl	%ebp
+	cfi_adjust_cfa_offset (4)
 	pushl	%ebx
+	cfi_adjust_cfa_offset (4)
 
 	movl	RES(%esp), %res_ptr
+	cfi_rel_offset (res_ptr, 12)
 	movl	S1(%esp), %s1_ptr
+	cfi_rel_offset (s1_ptr, 8)
 	movl	SIZE(%esp), %size
 	movl	S2LIMB(%esp), %s2_limb
+	cfi_rel_offset (s2_limb, 0)
 #if __BOUNDED_POINTERS__
 	shll	$2, %size	/* convert limbs to bytes */
 	CHECK_BOUNDS_BOTH_WIDE (%res_ptr, RES(%esp), %size)
@@ -57,6 +64,7 @@ ENTRY (BP_SYM (__mpn_addmul_1))
 	leal	(%s1_ptr,%size,4), %s1_ptr
 	negl	%size
 	xorl	%ebp, %ebp
+	cfi_rel_offset (ebp, 4)
 	ALIGN (3)
 
 L(oop):	adcl	$0, %ebp
@@ -79,9 +87,17 @@ L(oop):	adcl	$0, %ebp
 	adcl	$0, %ebp
 	movl	%ebp, %eax
 	popl	%ebx
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebx)
 	popl	%ebp
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebp)
 	popl	%esi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (esi)
 	popl	%edi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (edi)
 
 	LEAVE
 	ret
diff --git a/sysdeps/i386/i586/lshift.S b/sysdeps/i386/i586/lshift.S
index 59d587934e..bc73ee6f3c 100644
--- a/sysdeps/i386/i586/lshift.S
+++ b/sysdeps/i386/i586/lshift.S
@@ -1,5 +1,5 @@
 /* Pentium optimized __mpn_lshift --
-   Copyright (C) 1992, 94, 95, 96, 97, 98, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1992,94,95,96,97,98,2000,2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -33,13 +33,21 @@ ENTRY (BP_SYM (__mpn_lshift))
 	ENTER
 
 	pushl	%edi
+	cfi_adjust_cfa_offset (4)
 	pushl	%esi
+	cfi_adjust_cfa_offset (4)
 	pushl	%ebp
+	cfi_adjust_cfa_offset (4)
+	cfi_rel_offset (ebp, 0)
 	pushl	%ebx
+	cfi_adjust_cfa_offset (4)
 
 	movl	RES(%esp),%edi
+	cfi_rel_offset (edi, 12)
 	movl	S(%esp),%esi
+	cfi_rel_offset (esi, 8)
 	movl	SIZE(%esp),%ebx
+	cfi_rel_offset (ebx, 0)
 	movl	CNT(%esp),%ecx
 #if __BOUNDED_POINTERS__
 	shll	$2, %ebx		/* convert limbs to bytes */
@@ -67,9 +75,11 @@ L(normal):
 	xorl	%eax,%eax
 	shldl	%cl,%edx,%eax		/* compute carry limb */
 	pushl	%eax			/* push carry limb onto stack */
+	cfi_adjust_cfa_offset (4)
 
 	decl	%ebx
 	pushl	%ebx
+	cfi_adjust_cfa_offset (4)
 	shrl	$3,%ebx
 	jz	L(end)
 
@@ -113,6 +123,7 @@ L(oop):	movl	-28(%edi),%eax		/* fetch destination cache line */
 	jnz	L(oop)
 
 L(end):	popl	%ebx
+	cfi_adjust_cfa_offset (-4)
 	andl	$7,%ebx
 	jz	L(end2)
 L(oop2):
@@ -130,11 +141,20 @@ L(end2):
 	movl	%edx,(%edi)		/* store it */
 
 	popl	%eax			/* pop carry limb */
+	cfi_adjust_cfa_offset (-4)
 
 	popl	%ebx
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebx)
 	popl	%ebp
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebp)
 	popl	%esi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (esi)
 	popl	%edi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (edi)
 
 	LEAVE
 	ret
@@ -144,12 +164,18 @@ L(end2):
    function is documented to work for overlapping source and destination.
 */
 
+	cfi_adjust_cfa_offset (16)
+	cfi_rel_offset (edi, 12)
+	cfi_rel_offset (esi, 8)
+	cfi_rel_offset (ebp, 4)
+	cfi_rel_offset (ebx, 0)
 L(special):
 	movl	(%esi),%edx
 	addl	$4,%esi
 
 	decl	%ebx
 	pushl	%ebx
+	cfi_adjust_cfa_offset (4)
 	shrl	$3,%ebx
 
 	addl	%edx,%edx
@@ -199,6 +225,7 @@ L(Loop):
 
 L(Lend):
 	popl	%ebx
+	cfi_adjust_cfa_offset (-4)
 	sbbl	%eax,%eax		/* save carry in %eax */
 	andl	$7,%ebx
 	jz	L(Lend2)
@@ -223,9 +250,17 @@ L(L1):	movl	%edx,(%edi)		/* store last limb */
 	negl	%eax
 
 	popl	%ebx
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebx)
 	popl	%ebp
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebp)
 	popl	%esi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (esi)
 	popl	%edi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (edi)
 
 	LEAVE
 	ret
diff --git a/sysdeps/i386/i586/memcpy.S b/sysdeps/i386/i586/memcpy.S
index d8181ffa1b..1fa267ef50 100644
--- a/sysdeps/i386/i586/memcpy.S
+++ b/sysdeps/i386/i586/memcpy.S
@@ -1,5 +1,5 @@
 /* Highly optimized version for i586.
-   Copyright (C) 1997, 2000, 2003 Free Software Foundation, Inc.
+   Copyright (C) 1997, 2000, 2003, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
 
@@ -39,10 +39,14 @@ ENTRY (BP_SYM (memcpy))
 	ENTER
 
 	pushl	%edi
+	cfi_adjust_cfa_offset (4)
 	pushl	%esi
+	cfi_adjust_cfa_offset (4)
 
 	movl	DEST(%esp), %edi
+	cfi_rel_offset (edi, 4)
 	movl	SRC(%esp), %esi
+	cfi_rel_offset (esi, 4)
 	movl	LEN(%esp), %ecx
 	CHECK_BOUNDS_BOTH_WIDE (%edi, DEST(%esp), %ecx)
 	CHECK_BOUNDS_BOTH_WIDE (%esi, SRC(%esp), %ecx)
@@ -111,7 +115,11 @@ L(1):	rep; movsb
 #endif
 
 	popl	%esi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (esi)
 	popl	%edi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (edi)
 
 	LEAVE
 	RET_PTR
diff --git a/sysdeps/i386/i586/memset.S b/sysdeps/i386/i586/memset.S
index 0b59849f9e..c21e9f7a71 100644
--- a/sysdeps/i386/i586/memset.S
+++ b/sysdeps/i386/i586/memset.S
@@ -1,6 +1,6 @@
 /* memset/bzero -- set memory area to CH/0
    Highly optimized version for ix86, x>=5.
-   Copyright (C) 1996, 1997, 2000, 2003 Free Software Foundation, Inc.
+   Copyright (C) 1996, 1997, 2000, 2003, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Torbjorn Granlund, <tege@matematik.su.se>
 
@@ -42,8 +42,10 @@ ENTRY (BP_SYM (memset))
 	ENTER
 
 	pushl	%edi
+	cfi_adjust_cfa_offset (4)
 
 	movl	DEST(%esp), %edi
+	cfi_rel_offset (edi, 0)
 	movl	LEN(%esp), %edx
 	CHECK_BOUNDS_BOTH_WIDE (%edi, DEST(%esp), %edx)
 #if BZERO_P
@@ -106,6 +108,8 @@ L(2):	shrl	$2, %ecx	/* convert byte count to longword count */
 	RETURN_BOUNDED_POINTER (DEST(%esp))
 #endif
 	popl	%edi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (edi)
 
 	LEAVE
 #if BZERO_P
diff --git a/sysdeps/i386/i586/mul_1.S b/sysdeps/i386/i586/mul_1.S
index f7865697e6..b537c709a3 100644
--- a/sysdeps/i386/i586/mul_1.S
+++ b/sysdeps/i386/i586/mul_1.S
@@ -1,6 +1,6 @@
 /* Pentium __mpn_mul_1 -- Multiply a limb vector with a limb and store
    the result in a second limb vector.
-   Copyright (C) 1992, 94, 96, 97, 98, 00 Free Software Foundation, Inc.
+   Copyright (C) 1992, 94, 96, 97, 98, 00, 2005 Free Software Foundation, Inc.
    This file is part of the GNU MP Library.
 
    The GNU MP Library is free software; you can redistribute it and/or modify
@@ -39,14 +39,21 @@ ENTRY (BP_SYM (__mpn_mul_1))
 	ENTER
 
 	pushl	%edi
+	cfi_adjust_cfa_offset (4)
 	pushl	%esi
+	cfi_adjust_cfa_offset (4)
 	pushl	%ebp
+	cfi_adjust_cfa_offset (4)
 	pushl	%ebx
+	cfi_adjust_cfa_offset (4)
 
 	movl	RES(%esp), %res_ptr
+	cfi_rel_offset (res_ptr, 12)
 	movl	S1(%esp), %s1_ptr
+	cfi_rel_offset (s1_ptr, 8)
 	movl	SIZE(%esp), %size
 	movl	S2LIMB(%esp), %s2_limb
+	cfi_rel_offset (s2_limb, 0)
 #if __BOUNDED_POINTERS__
 	shll	$2, %size	/* convert limbs to bytes */
 	CHECK_BOUNDS_BOTH_WIDE (%res_ptr, RES(%esp), %size)
@@ -57,6 +64,7 @@ ENTRY (BP_SYM (__mpn_mul_1))
 	leal	(%s1_ptr,%size,4), %s1_ptr
 	negl	%size
 	xorl	%ebp, %ebp
+	cfi_rel_offset (ebp, 4)
 	ALIGN (3)
 
 L(oop):	adcl	$0, %ebp
@@ -75,9 +83,17 @@ L(oop):	adcl	$0, %ebp
 	adcl	$0, %ebp
 	movl	%ebp, %eax
 	popl	%ebx
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebx)
 	popl	%ebp
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebp)
 	popl	%esi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (esi)
 	popl	%edi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (edi)
 
 	LEAVE
 	ret
diff --git a/sysdeps/i386/i586/rshift.S b/sysdeps/i386/i586/rshift.S
index db9326a442..29eded369b 100644
--- a/sysdeps/i386/i586/rshift.S
+++ b/sysdeps/i386/i586/rshift.S
@@ -1,5 +1,5 @@
 /* Pentium optimized __mpn_rshift --
-   Copyright (C) 1992, 94, 95, 96, 97, 98, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1992,94,95,96,97,98,2000,2005 Free Software Foundation, Inc.
    This file is part of the GNU MP Library.
 
    The GNU MP Library is free software; you can redistribute it and/or modify
@@ -33,13 +33,21 @@ ENTRY (BP_SYM (__mpn_rshift))
 	ENTER
 
 	pushl	%edi
+	cfi_adjust_cfa_offset (4)
 	pushl	%esi
+	cfi_adjust_cfa_offset (4)
 	pushl	%ebp
+	cfi_adjust_cfa_offset (4)
+	cfi_rel_offset (ebp, 0)
 	pushl	%ebx
+	cfi_adjust_cfa_offset (4)
 
 	movl	RES(%esp),%edi
+	cfi_rel_offset (edi, 12)
 	movl	S(%esp),%esi
+	cfi_rel_offset (esi, 8)
 	movl	SIZE(%esp),%ebx
+	cfi_rel_offset (ebx, 0)
 	movl	CNT(%esp),%ecx
 #if __BOUNDED_POINTERS__
 	shll	$2, %ebx		/* convert limbs to bytes */
@@ -64,9 +72,11 @@ L(normal):
 	xorl	%eax,%eax
 	shrdl	%cl,%edx,%eax		/* compute carry limb */
 	pushl	%eax			/* push carry limb onto stack */
+	cfi_adjust_cfa_offset (4)
 
 	decl	%ebx
 	pushl	%ebx
+	cfi_adjust_cfa_offset (4)
 	shrl	$3,%ebx
 	jz	L(end)
 
@@ -110,6 +120,7 @@ L(oop):	movl	28(%edi),%eax		/* fetch destination cache line */
 	jnz	L(oop)
 
 L(end):	popl	%ebx
+	cfi_adjust_cfa_offset (-4)
 	andl	$7,%ebx
 	jz	L(end2)
 L(oop2):
@@ -127,11 +138,20 @@ L(end2):
 	movl	%edx,(%edi)		/* store it */
 
 	popl	%eax			/* pop carry limb */
+	cfi_adjust_cfa_offset (-4)
 
 	popl	%ebx
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebx)
 	popl	%ebp
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebp)
 	popl	%esi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (esi)
 	popl	%edi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (edi)
 
 	LEAVE
 	ret
@@ -141,6 +161,11 @@ L(end2):
    function is documented to work for overlapping source and destination.
 */
 
+	cfi_adjust_cfa_offset (16)
+	cfi_rel_offset (edi, 12)
+	cfi_rel_offset (esi, 8)
+	cfi_rel_offset (ebp, 4)
+	cfi_rel_offset (ebx, 3)
 L(special):
 	leal	-4(%edi,%ebx,4),%edi
 	leal	-4(%esi,%ebx,4),%esi
@@ -150,6 +175,7 @@ L(special):
 
 	decl	%ebx
 	pushl	%ebx
+	cfi_adjust_cfa_offset (4)
 	shrl	$3,%ebx
 
 	shrl	$1,%edx
@@ -199,6 +225,7 @@ L(Loop):
 
 L(Lend):
 	popl	%ebx
+	cfi_adjust_cfa_offset (-4)
 	sbbl	%eax,%eax		/* save carry in %eax */
 	andl	$7,%ebx
 	jz	L(Lend2)
@@ -223,9 +250,17 @@ L(L1):	movl	%edx,(%edi)		/* store last limb */
 	rcrl	$1,%eax
 
 	popl	%ebx
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebx)
 	popl	%ebp
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebp)
 	popl	%esi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (esi)
 	popl	%edi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (edi)
 
 	LEAVE
 	ret
diff --git a/sysdeps/i386/i586/strchr.S b/sysdeps/i386/i586/strchr.S
index 9df504d335..136b19a3f3 100644
--- a/sysdeps/i386/i586/strchr.S
+++ b/sysdeps/i386/i586/strchr.S
@@ -1,6 +1,6 @@
 /* Find character CH in a NUL terminated string.
    Highly optimized version for ix85, x>=5.
-   Copyright (C) 1995, 1996, 1997, 2000, 2003 Free Software Foundation, Inc.
+   Copyright (C) 1995,1996,1997,2000,2003,2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>.
 
@@ -47,16 +47,21 @@ ENTRY (BP_SYM (strchr))
 	ENTER
 
 	pushl %edi		/* Save callee-safe registers.  */
+	cfi_adjust_cfa_offset (-4)
 	pushl %esi
+	cfi_adjust_cfa_offset (-4)
 
 	pushl %ebx
+	cfi_adjust_cfa_offset (-4)
 	pushl %ebp
+	cfi_adjust_cfa_offset (-4)
 
 	movl STR(%esp), %eax
 	movl CHR(%esp), %edx
 	CHECK_BOUNDS_LOW (%eax, STR(%esp))
 
 	movl %eax, %edi		/* duplicate string pointer for later */
+	cfi_rel_offset (edi, 12)
 	xorl %ecx, %ecx		/* clear %ecx */
 
 	/* At the moment %edx contains C.  What we need for the
@@ -107,6 +112,10 @@ L(0):	movb (%eax), %cl	/* load single byte */
 
 	incl %eax		/* increment pointer */
 
+	cfi_rel_offset (esi, 8)
+	cfi_rel_offset (ebx, 4)
+	cfi_rel_offset (ebp, 0)
+
 	/* The following code is the preparation for the loop.  The
 	   four instruction up to `L1' will not be executed in the loop
 	   because the same code is found at the end of the loop, but
@@ -283,15 +292,28 @@ L(5):	subl $4, %eax		/* adjust pointer */
 
 L(2):	CHECK_BOUNDS_HIGH (%eax, STR(%esp), jb)
 	RETURN_BOUNDED_POINTER (STR(%esp))
-	popl %ebp		/* restore saved registers */
+L(out):	popl %ebp		/* restore saved registers */
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebp)
 	popl %ebx
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebx)
 
 	popl %esi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (esi)
 	popl %edi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (edi)
 
 	LEAVE
 	RET_PTR
 
+	cfi_adjust_cfa_offset (16)
+	cfi_rel_offset (edi, 12)
+	cfi_rel_offset (esi, 8)
+	cfi_rel_offset (ebx, 4)
+	cfi_rel_offset (ebp, 0)
 	/* We know there is a NUL byte in the word.  But we have to test
 	   whether there is an C byte before it in the word.  */
 L(4):	subl $4, %eax		/* adjust pointer */
@@ -327,14 +349,7 @@ L(4):	subl $4, %eax		/* adjust pointer */
 
 L(3):	xorl %eax, %eax
 	RETURN_NULL_BOUNDED_POINTER
-	popl %ebp		/* restore saved registers */
-	popl %ebx
-
-	popl %esi
-	popl %edi
-
-	LEAVE
-	RET_PTR
+	jmp L(out)
 END (BP_SYM (strchr))
 
 #undef index
diff --git a/sysdeps/i386/i586/strcpy.S b/sysdeps/i386/i586/strcpy.S
index f7c1986b4b..5426e59749 100644
--- a/sysdeps/i386/i586/strcpy.S
+++ b/sysdeps/i386/i586/strcpy.S
@@ -1,5 +1,5 @@
 /* strcpy/stpcpy implementation for i586.
-   Copyright (C) 1997, 2000, 2003 Free Software Foundation, Inc.
+   Copyright (C) 1997, 2000, 2003, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
 
@@ -39,11 +39,16 @@ ENTRY (BP_SYM (STRCPY))
 	ENTER
 
 	pushl	%edi
+	cfi_adjust_cfa_offset (4)
 	pushl	%esi
+	cfi_adjust_cfa_offset (4)
 	pushl	%ebx
+	cfi_adjust_cfa_offset (4)
 
 	movl	DEST(%esp), %edi
+	cfi_rel_offset (edi, 8)
 	movl	SRC(%esp), %esi
+	cfi_rel_offset (esi, 4)
 	CHECK_BOUNDS_LOW (%edi, DEST(%esp))
 	CHECK_BOUNDS_LOW (%esi, SRC(%esp))
 
@@ -51,11 +56,14 @@ ENTRY (BP_SYM (STRCPY))
 	leal	-1(%esi), %ecx
 
 	movl	$magic, %ebx
+	cfi_rel_offset (ebx, 0)
 	andl	$3, %ecx
 
 #ifdef PIC
 	call	2f
+	cfi_adjust_cfa_offset (4)
 2:	popl	%edx
+	cfi_adjust_cfa_offset (-4)
 	/* 0xb is the distance between 2: and 1: but we avoid writing
 	   1f-2b because the assembler generates worse code.  */
 	leal	0xb(%edx,%ecx,8), %ecx
@@ -153,8 +161,14 @@ L(end2):
 #endif
 	RETURN_BOUNDED_POINTER (DEST(%esp))
 	popl	%ebx
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebx)
 	popl	%esi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (esi)
 	popl	%edi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (edi)
 
 	LEAVE
 	RET_PTR
diff --git a/sysdeps/i386/i586/sub_n.S b/sysdeps/i386/i586/sub_n.S
index fcc9cba4ad..1c40a80082 100644
--- a/sysdeps/i386/i586/sub_n.S
+++ b/sysdeps/i386/i586/sub_n.S
@@ -1,6 +1,6 @@
 /* Pentium __mpn_sub_n -- Subtract two limb vectors of the same length > 0
    and store difference in a third limb vector.
-   Copyright (C) 1992, 94, 95, 96, 97, 98, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1992,94,95,96,97,98,2000,2005 Free Software Foundation, Inc.
    This file is part of the GNU MP Library.
 
    The GNU MP Library is free software; you can redistribute it and/or modify
@@ -34,13 +34,20 @@ ENTRY (BP_SYM (__mpn_sub_n))
 	ENTER
 
 	pushl	%edi
+	cfi_adjust_cfa_offset (4)
 	pushl	%esi
+	cfi_adjust_cfa_offset (4)
 	pushl	%ebp
+	cfi_adjust_cfa_offset (4)
 	pushl	%ebx
+	cfi_adjust_cfa_offset (4)
 
 	movl	RES(%esp),%edi
+	cfi_rel_offset (edi, 12)
 	movl	S1(%esp),%esi
+	cfi_rel_offset (esi, 8)
 	movl	S2(%esp),%ebx
+	cfi_rel_offset (ebx, 0)
 	movl	SIZE(%esp),%ecx
 #if __BOUNDED_POINTERS__
 	shll	$2, %ecx	/* convert limbs to bytes */
@@ -49,6 +56,7 @@ ENTRY (BP_SYM (__mpn_sub_n))
 	CHECK_BOUNDS_BOTH_WIDE (%ebx, S2(%esp), %ecx)
 	shrl	$2, %ecx
 #endif
+	cfi_rel_offset (ebp, 4)
 	movl	(%ebx),%ebp
 
 	decl	%ecx
@@ -58,6 +66,7 @@ ENTRY (BP_SYM (__mpn_sub_n))
 	testl	%ecx,%ecx		/* zero carry flag */
 	jz	L(end)
 	pushl	%edx
+	cfi_adjust_cfa_offset (4)
 
 	ALIGN (3)
 L(oop):	movl	28(%edi),%eax		/* fetch destination cache line */
@@ -105,6 +114,7 @@ L(4):	movl	24(%esi),%eax
 	jnz	L(oop)
 
 	popl	%edx
+	cfi_adjust_cfa_offset (-4)
 L(end):
 	decl	%edx			/* test %edx w/o clobbering carry */
 	js	L(end2)
@@ -128,9 +138,17 @@ L(end2):
 	negl	%eax
 
 	popl	%ebx
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebx)
 	popl	%ebp
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebp)
 	popl	%esi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (esi)
 	popl	%edi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (edi)
 
 	LEAVE
 	ret
diff --git a/sysdeps/i386/i586/submul_1.S b/sysdeps/i386/i586/submul_1.S
index 542200110f..b9e578fde4 100644
--- a/sysdeps/i386/i586/submul_1.S
+++ b/sysdeps/i386/i586/submul_1.S
@@ -1,6 +1,6 @@
 /* Pentium __mpn_submul_1 -- Multiply a limb vector with a limb and subtract
    the result from a second limb vector.
-   Copyright (C) 1992, 94, 96, 97, 98, 00 Free Software Foundation, Inc.
+   Copyright (C) 1992, 94, 96, 97, 98, 00, 2005 Free Software Foundation, Inc.
    This file is part of the GNU MP Library.
 
    The GNU MP Library is free software; you can redistribute it and/or modify
@@ -39,14 +39,21 @@ ENTRY (BP_SYM (__mpn_submul_1))
 	ENTER
 
 	pushl	%edi
+	cfi_adjust_cfa_offset (4)
 	pushl	%esi
+	cfi_adjust_cfa_offset (4)
 	pushl	%ebp
+	cfi_adjust_cfa_offset (4)
 	pushl	%ebx
+	cfi_adjust_cfa_offset (4)
 
 	movl	RES(%esp), %res_ptr
+	cfi_rel_offset (res_ptr, 12)
 	movl	S1(%esp), %s1_ptr
+	cfi_rel_offset (s1_ptr, 8)
 	movl	SIZE(%esp), %size
 	movl	S2LIMB(%esp), %s2_limb
+	cfi_rel_offset (s2_limb, 0)
 #if __BOUNDED_POINTERS__
 	shll	$2, %sizeP	/* convert limbs to bytes */
 	CHECK_BOUNDS_BOTH_WIDE (%res_ptr, RES(%esp), %sizeP)
@@ -57,6 +64,7 @@ ENTRY (BP_SYM (__mpn_submul_1))
 	leal	(%s1_ptr,%size,4), %s1_ptr
 	negl	%size
 	xorl	%ebp, %ebp
+	cfi_rel_offset (ebp, 4)
 	ALIGN (3)
 
 L(oop):	adcl	$0, %ebp
@@ -79,9 +87,17 @@ L(oop):	adcl	$0, %ebp
 	adcl	$0, %ebp
 	movl	%ebp, %eax
 	popl	%ebx
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebx)
 	popl	%ebp
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebp)
 	popl	%esi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (esi)
 	popl	%edi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (edi)
 
 	LEAVE
 	ret
diff --git a/sysdeps/i386/i686/add_n.S b/sysdeps/i386/i686/add_n.S
index e36b0d0a5d..3cce33acfe 100644
--- a/sysdeps/i386/i686/add_n.S
+++ b/sysdeps/i386/i686/add_n.S
@@ -1,6 +1,6 @@
 /* Add two limb vectors of the same length > 0 and store sum in a third
    limb vector.
-   Copyright (C) 1992, 94, 95, 97, 98, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1992,94,95,97,98,2000,2005 Free Software Foundation, Inc.
    This file is part of the GNU MP Library.
 
    The GNU MP Library is free software; you can redistribute it and/or modify
@@ -38,10 +38,14 @@ ENTRY (BP_SYM (__mpn_add_n))
 	ENTER
 
 	pushl %edi
+	cfi_adjust_cfa_offset (4)
 	pushl %esi
+	cfi_adjust_cfa_offset (4)
 
 	movl	RES(%esp),%edi
+	cfi_rel_offset (edi, 4)
 	movl	S1(%esp),%esi
+	cfi_rel_offset (esi, 0)
 	movl	S2(%esp),%edx
 	movl	SIZE(%esp),%ecx
 #if __BOUNDED_POINTERS__
@@ -107,7 +111,11 @@ L(oop):	movl	(%esi),%eax
 	negl	%eax
 
 	popl %esi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (esi)
 	popl %edi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (edi)
 
 	LEAVE
 	ret
diff --git a/sysdeps/i386/i686/memcmp.S b/sysdeps/i386/i686/memcmp.S
index 29aa546df5..4f1c7413fc 100644
--- a/sysdeps/i386/i686/memcmp.S
+++ b/sysdeps/i386/i686/memcmp.S
@@ -26,8 +26,10 @@
 #define BLK1		PARMS
 #define BLK2		BLK1+PTR_SIZE
 #define LEN		BLK2+PTR_SIZE
-#define ENTRANCE	pushl %ebx; ENTER
-#define RETURN		popl %ebx; LEAVE; ret
+#define ENTRANCE	pushl %ebx; cfi_adjust_cfa_offset (4); \
+			cfi_rel_offset (ebx, 0); ENTER
+#define RETURN		popl %ebx; cfi_adjust_cfa_offset (-4); \
+			cfi_restore (ebx); LEAVE; ret
 
 /* Load an entry in a jump table into EBX.  TABLE is a jump table
    with relative offsets.  INDEX is a register contains the index
@@ -81,7 +83,9 @@ L(not_1):
 	jl	L(bye)			/* LEN == 0  */
 
 	pushl	%esi
+	cfi_adjust_cfa_offset (4)
 	movl	%eax, %esi
+	cfi_rel_offset (esi, 0)
 	cmpl	$32, %ecx;
 	jge	L(32bytesormore)	/* LEN => 32  */
 
@@ -128,9 +132,13 @@ L(4bytes):
 	jne	L(find_diff)
 L(0bytes):
 	popl	%esi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (esi)
 	xorl	%eax, %eax
 	RETURN
 
+	cfi_adjust_cfa_offset (4)
+	cfi_rel_offset (esi, 0)
 L(29bytes):
 	movl	-29(%esi), %eax
 	movl	-29(%edx), %ecx
@@ -171,9 +179,13 @@ L(1bytes):
 	cmpb	-1(%edx), %al
 	jne	L(set)
 	popl	%esi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (esi)
 	xorl	%eax, %eax
 	RETURN
 
+	cfi_adjust_cfa_offset (4)
+	cfi_rel_offset (esi, 0)
 L(30bytes):
 	movl	-30(%esi), %eax
 	movl	-30(%edx), %ecx
@@ -217,9 +229,13 @@ L(2bytes):
 	cmpl	%ecx, %eax
 	jne	L(set)
 	popl	%esi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (esi)
 	xorl	%eax, %eax
 	RETURN
 
+	cfi_adjust_cfa_offset (4)
+	cfi_rel_offset (esi, 0)
 L(31bytes):
 	movl	-31(%esi), %eax
 	movl	-31(%edx), %ecx
@@ -266,9 +282,13 @@ L(3bytes):
 	cmpb	-1(%edx), %al
 	jne	L(set)
 	popl	%esi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (esi)
 	xorl	%eax, %eax
 	RETURN
 
+	cfi_adjust_cfa_offset (4)
+	cfi_rel_offset (esi, 0)
 	ALIGN (4)
 /* ECX >= 32.  */
 L(32bytesormore):
@@ -349,6 +369,8 @@ L(set):
 	sbbl	%eax, %eax
 	sbbl	$-1, %eax
 	popl	%esi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (esi)
 	RETURN
 END (BP_SYM (memcmp))
 
diff --git a/sysdeps/i386/i686/memmove.S b/sysdeps/i386/i686/memmove.S
index 951e139ad4..a433622246 100644
--- a/sysdeps/i386/i686/memmove.S
+++ b/sysdeps/i386/i686/memmove.S
@@ -1,7 +1,7 @@
 /* Copy memory block and return pointer to beginning of destination block
    For Intel 80x86, x>=6.
    This file is part of the GNU C Library.
-   Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+   Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 2003.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -42,11 +42,14 @@ ENTRY (BP_SYM (memmove))
 	ENTER
 
 	pushl	%edi
+	cfi_adjust_cfa_offset (4)
 
 	movl	LEN(%esp), %ecx
 	movl	DEST(%esp), %edi
+	cfi_rel_offset (edi, 0)
 	movl	%esi, %edx
 	movl	SRC(%esp), %esi
+	cfi_register (esi, edx)
 	CHECK_BOUNDS_BOTH_WIDE (%edi, DEST(%esp), %ecx)
 	CHECK_BOUNDS_BOTH_WIDE (%esi, SRC(%esp), %ecx)
 
@@ -65,10 +68,13 @@ ENTRY (BP_SYM (memmove))
 2:	rep
 	movsl
 	movl	%edx, %esi
+	cfi_restore (esi)
 	movl	DEST(%esp), %eax
 	RETURN_BOUNDED_POINTER (DEST(%esp))
 
 	popl	%edi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (edi)
 
 	LEAVE
 	RET_PTR
@@ -90,11 +96,14 @@ ENTRY (BP_SYM (memmove))
 	rep
 	movsl
 	movl	%edx, %esi
+	cfi_restore (esi)
 	movl	DEST(%esp), %eax
 	RETURN_BOUNDED_POINTER (DEST(%esp))
 
 	cld
 	popl	%edi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (edi)
 
 	LEAVE
 	RET_PTR
diff --git a/sysdeps/i386/i686/mempcpy.S b/sysdeps/i386/i686/mempcpy.S
index 843a35823a..6437e4a5d4 100644
--- a/sysdeps/i386/i686/mempcpy.S
+++ b/sysdeps/i386/i686/mempcpy.S
@@ -1,7 +1,7 @@
 /* Copy memory block and return pointer to following byte.
    For Intel 80x86, x>=6.
    This file is part of the GNU C Library.
-   Copyright (C) 1998, 1999, 2000, 2002, 2004 Free Software Foundation, Inc.
+   Copyright (C) 1998,1999,2000,2002,2004,2005 Free Software Foundation, Inc.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -43,9 +43,11 @@ ENTRY (BP_SYM (__mempcpy))
 
 	movl	LEN(%esp), %ecx
 	movl	%edi, %eax
+	cfi_register (edi, eax)
 	movl	DEST(%esp), %edi
 	CHECK_BOUNDS_BOTH_WIDE (%edi, DEST(%esp), %ecx)
 	movl	%esi, %edx
+	cfi_register (esi, edx)
 	movl	SRC(%esp), %esi
 	CHECK_BOUNDS_BOTH_WIDE (%esi, SRC(%esp), %ecx)
 	cld
@@ -58,7 +60,9 @@ ENTRY (BP_SYM (__mempcpy))
 2:	rep
 	movsl
 	xchgl	%edi, %eax
+	cfi_restore (edi)
 	movl	%edx, %esi
+	cfi_restore (esi)
 	RETURN_BOUNDED_POINTER (DEST(%esp))
 
 	LEAVE
diff --git a/sysdeps/i386/i686/memset.S b/sysdeps/i386/i686/memset.S
index 0b47547141..5ea50efff8 100644
--- a/sysdeps/i386/i686/memset.S
+++ b/sysdeps/i386/i686/memset.S
@@ -51,6 +51,7 @@ ENTRY (BP_SYM (memset))
 
 	cld
 	pushl	%edi
+	cfi_adjust_cfa_offset (4)
 	movl	DEST(%esp), %edx
 	movl	LEN(%esp), %ecx
 	CHECK_BOUNDS_BOTH_WIDE (%edx, DEST(%esp), %ecx)
@@ -61,6 +62,7 @@ ENTRY (BP_SYM (memset))
 #endif
 	jecxz	1f
 	movl	%edx, %edi
+	cfi_rel_offset (edi, 0)
 	andl	$3, %edx
 	jz	2f
 	jnp	3f
@@ -92,6 +94,8 @@ ENTRY (BP_SYM (memset))
 	RETURN_BOUNDED_POINTER (DEST(%esp))
 #endif
 	popl	%edi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (edi)
 
 	LEAVE
 #if BZERO_P
diff --git a/sysdeps/i386/i686/strtok.S b/sysdeps/i386/i686/strtok.S
index 3d81fb6d42..0cd266a2a1 100644
--- a/sysdeps/i386/i686/strtok.S
+++ b/sysdeps/i386/i686/strtok.S
@@ -1,6 +1,6 @@
 /* strtok (str, delim) -- Return next DELIM separated token from STR.
    For Intel 80686.
-   Copyright (C) 1998, 2000, 2001 Free Software Foundation, Inc.
+   Copyright (C) 1998, 2000, 2001, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
 
@@ -86,6 +86,8 @@ ENTRY (BP_SYM (FUNCTION))
 
 #if !defined USE_AS_STRTOK_R && defined PIC
 	pushl %ebx			/* Save PIC register.  */
+	cfi_adjust_cfa_offset (4)
+	cfi_rel_offset (ebx, 0)
 	call 0b
 	addl $_GLOBAL_OFFSET_TABLE_, %ebx
 #endif
@@ -97,6 +99,7 @@ ENTRY (BP_SYM (FUNCTION))
 	   table.  */
 	movl %edi, %edx
 	subl $256, %esp
+	cfi_adjust_cfa_offset (256)
 	movl $64, %ecx
 	movl %esp, %edi
 	xorl %eax, %eax
@@ -257,8 +260,11 @@ L(8):	cmpl %eax, %edx
 L(epilogue):
 	/* Remove the stopset table.  */
 	addl $256, %esp
+	cfi_adjust_cfa_offset (-256)
 #if !defined USE_AS_STRTOK_R && defined PIC
 	popl %ebx
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebx)
 #endif
 	LEAVE
 	RET_PTR
diff --git a/sysdeps/i386/lshift.S b/sysdeps/i386/lshift.S
index ab1c89d23b..536d9878eb 100644
--- a/sysdeps/i386/lshift.S
+++ b/sysdeps/i386/lshift.S
@@ -1,5 +1,5 @@
 /* i80386 __mpn_lshift --
-   Copyright (C) 1992, 1994, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1992, 1994, 1997-2000, 2005 Free Software Foundation, Inc.
    This file is part of the GNU MP Library.
 
    The GNU MP Library is free software; you can redistribute it and/or modify
@@ -33,11 +33,16 @@ ENTRY (BP_SYM (__mpn_lshift))
 	ENTER
 
 	pushl	%edi
+	cfi_adjust_cfa_offset (4)
 	pushl	%esi
+	cfi_adjust_cfa_offset (4)
 	pushl	%ebx
+	cfi_adjust_cfa_offset (4)
 
 	movl	RES(%esp),%edi
+	cfi_rel_offset (edi, 8)
 	movl	S(%esp),%esi
+	cfi_rel_offset (esi, 4)
 	movl	SIZE(%esp),%edx
 	movl	CNT(%esp),%ecx
 #if __BOUNDED_POINTERS__
@@ -49,11 +54,13 @@ ENTRY (BP_SYM (__mpn_lshift))
 	subl	$4,%esi			/* adjust s_ptr */
 
 	movl	(%esi,%edx,4),%ebx	/* read most significant limb */
+	cfi_rel_offset (ebx, 0)
 	xorl	%eax,%eax
 	shldl	%cl,%ebx,%eax		/* compute carry limb */
 	decl	%edx
 	jz	L(end)
 	pushl	%eax			/* push carry limb onto stack */
+	cfi_adjust_cfa_offset (4)
 	testb	$1,%dl
 	jnz	L(1)			/* enter loop in the middle */
 	movl	%ebx,%eax
@@ -73,10 +80,17 @@ L(1):	movl	(%esi,%edx,4),%eax
 	movl	%eax,(%edi)		/* store it */
 
 	popl	%eax			/* pop carry limb */
+	cfi_adjust_cfa_offset (-4)
 
 	popl	%ebx
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebx)
 	popl	%esi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (esi)
 	popl	%edi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (edi)
 
 	LEAVE
 	ret
@@ -85,8 +99,14 @@ L(end):	shll	%cl,%ebx		/* compute least significant limb */
 	movl	%ebx,(%edi)		/* store it */
 
 	popl	%ebx
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebx)
 	popl	%esi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (esi)
 	popl	%edi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (edi)
 
 	LEAVE
 	ret
diff --git a/sysdeps/i386/memchr.S b/sysdeps/i386/memchr.S
index 3cfb3d666f..08989397bd 100644
--- a/sysdeps/i386/memchr.S
+++ b/sysdeps/i386/memchr.S
@@ -1,7 +1,6 @@
-/* memchr (str, chr, len) -- Return pointer to first occurrence of CHR in STR less
-   than LEN.
-   For Intel 80x86, x>=3.
-   Copyright (C) 1994-1998, 2000, 2003 Free Software Foundation, Inc.
+/* memchr (str, chr, len) -- Return pointer to first occurrence of CHR in STR
+	 less than LEN.  For Intel 80x86, x>=3.
+   Copyright (C) 1994-1998, 2000, 2003, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>
    Optimised a little by Alan Modra <Alan@SPRI.Levels.UniSA.Edu.Au>
@@ -45,12 +44,16 @@ ENTRY (BP_SYM (__memchr))
 
 	/* Save callee-safe registers used in this function.  */
 	pushl %esi
+	cfi_adjust_cfa_offset (4)
 	pushl %edi
+	cfi_adjust_cfa_offset (4)
+	cfi_rel_offset (edi, 0)
 
 	/* Load parameters into registers.  */
 	movl STR(%esp), %eax	/* str: pointer to memory block.  */
 	movl CHR(%esp), %edx	/* c: byte we are looking for.  */
 	movl LEN(%esp), %esi	/* len: length of memory block.  */
+	cfi_rel_offset (esi, 4)
 	CHECK_BOUNDS_LOW (%eax, STR(%esp))
 
 	/* If my must not test more than three characters test
@@ -320,7 +323,11 @@ L(9):
 	RETURN_BOUNDED_POINTER (STR(%esp))
 #endif
 L(pop):	popl %edi		/* pop saved registers */
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (edi)
 	popl %esi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (esi)
 
 	LEAVE
 	RET_PTR
diff --git a/sysdeps/i386/memcmp.S b/sysdeps/i386/memcmp.S
index a795911094..60b75126bd 100644
--- a/sysdeps/i386/memcmp.S
+++ b/sysdeps/i386/memcmp.S
@@ -1,5 +1,5 @@
 /* Compare two memory blocks for differences in the first COUNT bytes.
-   Copyright (C) 1995, 1996, 1997, 2000, 2004 Free Software Foundation, Inc.
+   Copyright (C) 1995,1996,1997,2000,2004,2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -32,10 +32,13 @@ ENTRY (BP_SYM (memcmp))
 	ENTER
 
 	pushl %esi		/* Save callee-safe registers.  */
+	cfi_adjust_cfa_offset (4)
 	movl %edi, %edx		/* Note that %edx is not used and can
 				   so be used to save %edi.  It's faster.  */
+	cfi_register (edi, edx)
 
 	movl BLK1(%esp), %esi
+	cfi_rel_offset (esi, 0)
 	movl BLK2(%esp), %edi
 	movl LEN(%esp), %ecx
 	CHECK_BOUNDS_LOW (%esi, BLK1(%esp))
@@ -65,7 +68,10 @@ ENTRY (BP_SYM (memcmp))
 L(1):	CHECK_BOUNDS_HIGH (%esi, BLK1(%esp), jbe)
 	CHECK_BOUNDS_HIGH (%edi, BLK2(%esp), jbe)
 	popl %esi		/* Restore registers.  */
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (esi)
 	movl %edx, %edi
+	cfi_restore (edi)
 
 	LEAVE
 	ret
diff --git a/sysdeps/i386/mul_1.S b/sysdeps/i386/mul_1.S
index e9be6fb618..2de8783816 100644
--- a/sysdeps/i386/mul_1.S
+++ b/sysdeps/i386/mul_1.S
@@ -1,6 +1,6 @@
 /* i80386 __mpn_mul_1 -- Multiply a limb vector with a limb and store
    the result in a second limb vector.
-   Copyright (C) 1992, 1994, 1997, 1998, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1992,1994,1997,1998,2000,2005 Free Software Foundation, Inc.
    This file is part of the GNU MP Library.
 
    The GNU MP Library is free software; you can redistribute it and/or modify
@@ -39,14 +39,21 @@ ENTRY (BP_SYM (__mpn_mul_1))
 	ENTER
 
 	pushl	%edi
+	cfi_adjust_cfa_offset (4)
 	pushl	%esi
+	cfi_adjust_cfa_offset (4)
 	pushl	%ebp
+	cfi_adjust_cfa_offset (4)
 	pushl	%ebx
+	cfi_adjust_cfa_offset (4)
 
 	movl	RES(%esp), %res_ptr
+	cfi_rel_offset (res_ptr, 12)
 	movl	S1(%esp), %s1_ptr
+	cfi_rel_offset (s1_ptr, 8)
 	movl	SIZE(%esp), %size
 	movl	S2LIMB(%esp), %s2_limb
+	cfi_rel_offset (s2_limb, 0)
 #if __BOUNDED_POINTERS__
 	shll	$2, %size	/* convert limbs to bytes */
 	CHECK_BOUNDS_BOTH_WIDE (%res_ptr, RES(%esp), %size)
@@ -57,6 +64,7 @@ ENTRY (BP_SYM (__mpn_mul_1))
 	leal	(%s1_ptr,%size,4), %s1_ptr
 	negl	%size
 	xorl	%ebp, %ebp
+	cfi_rel_offset (ebp, 4)
 	ALIGN (3)
 L(oop):
 	movl	(%s1_ptr,%size,4), %eax
@@ -71,9 +79,17 @@ L(oop):
 	movl	%ebp, %eax
 
 	popl	%ebx
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebx)
 	popl	%ebp
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebp)
 	popl	%esi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (esi)
 	popl	%edi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (edi)
 
 	LEAVE
 	ret
diff --git a/sysdeps/i386/rawmemchr.S b/sysdeps/i386/rawmemchr.S
index 75c08ead39..ddb9d52162 100644
--- a/sysdeps/i386/rawmemchr.S
+++ b/sysdeps/i386/rawmemchr.S
@@ -1,6 +1,6 @@
 /* rawmemchr (str, ch) -- Return pointer to first occurrence of CH in STR.
    For Intel 80x86, x>=3.
-   Copyright (C) 1994,95,96,97,98,99,2000,2002 Free Software Foundation, Inc.
+   Copyright (C) 1994-2000,2002,2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>
    Optimised a little by Alan Modra <Alan@SPRI.Levels.UniSA.Edu.Au>
@@ -43,6 +43,8 @@ ENTRY (BP_SYM (__rawmemchr))
 
 	/* Save callee-safe register used in this function.  */
 	pushl %edi
+	cfi_adjust_cfa_offset (4)
+	cfi_rel_offset (edi, 0)
 
 	/* Load parameters into registers.  */
 	movl STR(%esp), %eax
@@ -217,6 +219,8 @@ L(9):
 	CHECK_BOUNDS_HIGH (%eax, STR(%esp), jb)
 	RETURN_BOUNDED_POINTER (STR(%esp))
 	popl %edi		/* pop saved register */
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (edi)
 
 	LEAVE
 	RET_PTR
diff --git a/sysdeps/i386/rshift.S b/sysdeps/i386/rshift.S
index 51973fe998..3fd0afe822 100644
--- a/sysdeps/i386/rshift.S
+++ b/sysdeps/i386/rshift.S
@@ -1,5 +1,5 @@
 /* i80386 __mpn_rshift --
-   Copyright (C) 1992, 1994, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1992,1994,1997-2000,2005 Free Software Foundation, Inc.
    This file is part of the GNU MP Library.
 
    The GNU MP Library is free software; you can redistribute it and/or modify
@@ -33,11 +33,16 @@ ENTRY (BP_SYM (__mpn_rshift))
 	ENTER
 
 	pushl	%edi
+	cfi_adjust_cfa_offset (4)
 	pushl	%esi
+	cfi_adjust_cfa_offset (4)
 	pushl	%ebx
+	cfi_adjust_cfa_offset (4)
 
 	movl	RES(%esp),%edi
+	cfi_rel_offset (edi, 8)
 	movl	S(%esp),%esi
+	cfi_rel_offset (esi, 4)
 	movl	SIZE(%esp),%edx
 	movl	CNT(%esp),%ecx
 #if __BOUNDED_POINTERS__
@@ -51,11 +56,13 @@ ENTRY (BP_SYM (__mpn_rshift))
 	negl	%edx
 
 	movl	(%esi,%edx,4),%ebx	/* read least significant limb */
+	cfi_rel_offset (ebx, 0)
 	xorl	%eax,%eax
 	shrdl	%cl,%ebx,%eax		/* compute carry limb */
 	incl	%edx
 	jz	L(end)
 	pushl	%eax			/* push carry limb onto stack */
+	cfi_adjust_cfa_offset (4)
 	testb	$1,%dl
 	jnz	L(1)			/* enter loop in the middle */
 	movl	%ebx,%eax
@@ -75,20 +82,37 @@ L(1):	movl	(%esi,%edx,4),%eax
 	movl	%eax,(%edi)		/* store it */
 
 	popl	%eax			/* pop carry limb */
+	cfi_adjust_cfa_offset (-4)
 
 	popl	%ebx
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebx)
 	popl	%esi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (esi)
 	popl	%edi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (edi)
 
 	LEAVE
 	ret
 
+	cfi_adjust_cfa_offset (12)
+	cfi_rel_offset (edi, 8)
+	cfi_rel_offset (esi, 4)
+	cfi_rel_offset (ebx, 0)
 L(end):	shrl	%cl,%ebx		/* compute most significant limb */
 	movl	%ebx,(%edi)		/* store it */
 
 	popl	%ebx
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebx)
 	popl	%esi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (esi)
 	popl	%edi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (edi)
 
 	LEAVE
 	ret
diff --git a/sysdeps/i386/stpncpy.S b/sysdeps/i386/stpncpy.S
index acde5e3d66..c163a33591 100644
--- a/sysdeps/i386/stpncpy.S
+++ b/sysdeps/i386/stpncpy.S
@@ -1,7 +1,7 @@
 /* copy no more then N bytes from SRC to DEST, returning the address of
    the terminating '\0' in DEST.
    For Intel 80x86, x>=3.
-   Copyright (C) 1994,1995,1996,1997,2000,2002 Free Software Foundation, Inc.
+   Copyright (C) 1994-1997,2000,2002,2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>
    Some bug fixes by Alan Modra <Alan@SPRI.Levels.UniSA.Edu.Au>
@@ -40,9 +40,11 @@ ENTRY (BP_SYM (__stpncpy))
 	ENTER
 
 	pushl %esi
+	cfi_adjust_cfa_offset (4)
 
 	movl DEST(%esp), %eax
 	movl SRC(%esp), %esi
+	cfi_rel_offset (esi, 0)
 	movl LEN(%esp), %ecx
 	CHECK_BOUNDS_LOW (%eax, DEST(%esp))
 	CHECK_BOUNDS_LOW (%esi, SRC(%esp))
@@ -148,6 +150,8 @@ L(9):
 	RETURN_BOUNDED_POINTER (DEST(%esp))
 #endif
 	popl %esi		/* restore saved register content */
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (esi)
 
 	LEAVE
 	RET_PTR
diff --git a/sysdeps/i386/strchr.S b/sysdeps/i386/strchr.S
index f5cee2f872..93b4cce8da 100644
--- a/sysdeps/i386/strchr.S
+++ b/sysdeps/i386/strchr.S
@@ -1,6 +1,7 @@
 /* strchr (str, ch) -- Return pointer to first occurrence of CH in STR.
    For Intel 80x86, x>=3.
-   Copyright (C) 1994-1997,1999,2000,2002,2003 Free Software Foundation, Inc.
+   Copyright (C) 1994-1997,1999,2000,2002,2003,2005
+   Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>
    Some optimisations by Alan Modra <Alan@SPRI.Levels.UniSA.Edu.Au>
@@ -35,6 +36,8 @@ ENTRY (BP_SYM (strchr))
 	ENTER
 
 	pushl %edi		/* Save callee-safe registers used here.  */
+	cfi_adjust_cfa_offset (4)
+	cfi_rel_offset (edi, 0)
 	movl STR(%esp), %eax
 	movl CHR(%esp), %edx
 	CHECK_BOUNDS_LOW (%eax, STR(%esp))
@@ -244,10 +247,14 @@ L(2):	/* Return NULL.  */
 	xorl %eax, %eax
 	RETURN_NULL_BOUNDED_POINTER
 	popl %edi		/* restore saved register content */
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (edi)
 
 	LEAVE
 	RET_PTR
 
+	cfi_adjust_cfa_offset (4)
+	cfi_rel_offset (edi, 0)
 L(73):	addl $4, %eax		/* adjust pointer */
 L(72):	addl $4, %eax
 L(71):	addl $4, %eax
@@ -283,6 +290,8 @@ L(6):
 	CHECK_BOUNDS_HIGH (%eax, STR(%esp), jb)
 	RETURN_BOUNDED_POINTER (STR(%esp))
 	popl %edi		/* restore saved register content */
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (edi)
 
 	LEAVE
 	RET_PTR
diff --git a/sysdeps/i386/strchrnul.S b/sysdeps/i386/strchrnul.S
index 9a521eb65a..8d1f7b2a5e 100644
--- a/sysdeps/i386/strchrnul.S
+++ b/sysdeps/i386/strchrnul.S
@@ -1,7 +1,7 @@
 /* strchrnul (str, chr) -- Return pointer to first occurrence of CHR in STR
    or the final NUL byte.
    For Intel 80x86, x>=3.
-   Copyright (C) 1994, 1995, 1996, 1997, 1999, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1994-1997, 1999, 2000, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@gnu.org>
    Some optimisations by Alan Modra <Alan@SPRI.Levels.UniSA.Edu.Au>
@@ -36,6 +36,8 @@ ENTRY (BP_SYM (__strchrnul))
 	ENTER
 
 	pushl %edi		/* Save callee-safe registers used here.  */
+	cfi_adjust_cfa_offset (4)
+	cfi_rel_offset (edi, 0)
 
 	movl STR(%esp), %eax
 	movl CHR(%esp), %edx
@@ -274,6 +276,8 @@ L(7):	testb %cl, %cl		/* is first byte CHR? */
 L(6):	CHECK_BOUNDS_HIGH (%eax, STR(%esp), jb)
 	RETURN_BOUNDED_POINTER (STR(%esp))
 	popl %edi		/* restore saved register content */
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (edi)
 
 	LEAVE
 	RET_PTR
diff --git a/sysdeps/i386/strcspn.S b/sysdeps/i386/strcspn.S
index dc3a176bf1..df6a136606 100644
--- a/sysdeps/i386/strcspn.S
+++ b/sysdeps/i386/strcspn.S
@@ -1,7 +1,7 @@
 /* strcspn (str, ss) -- Return the length of the initial segment of STR
 			which contains no characters from SS.
    For Intel 80x86, x>=3.
-   Copyright (C) 1994,1995,1996,1997,2000,2003 Free Software Foundation, Inc.
+   Copyright (C) 1994-1997,2000,2003,2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>
    Bug fixes by Alan Modra <Alan@SPRI.Levels.UniSA.Edu.Au>
@@ -46,69 +46,133 @@ ENTRY (BP_SYM (strcspn))
 	xorl %ecx, %ecx		/* %ecx = 0 !!! */
 
 	pushl %ecx		/* make a 256 bytes long block filled with 0 */
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl $0		/* These immediate values make the label 2 */
+	cfi_adjust_cfa_offset (4)
 	pushl $0		/* to be aligned on a 16 byte boundary to */
+	cfi_adjust_cfa_offset (4)
 	pushl $0		/* get a better performance of the loop.  */
+	cfi_adjust_cfa_offset (4)
 	pushl $0
+	cfi_adjust_cfa_offset (4)
 	pushl $0
+	cfi_adjust_cfa_offset (4)
 	pushl $0
+	cfi_adjust_cfa_offset (4)
 
 /* For understanding the following code remember that %ecx == 0 now.
    Although all the following instruction only modify %cl we always
@@ -172,6 +236,7 @@ L(6):	incl %eax
 L(5):	incl %eax
 
 L(4):	addl $256, %esp		/* remove stopset */
+	cfi_adjust_cfa_offset (-256)
 	CHECK_BOUNDS_HIGH (%eax, STR(%esp), jb)
 	subl %edx, %eax		/* we have to return the number of valid
 				   characters, so compute distance to first
diff --git a/sysdeps/i386/strpbrk.S b/sysdeps/i386/strpbrk.S
index 66136c209e..1f78e20646 100644
--- a/sysdeps/i386/strpbrk.S
+++ b/sysdeps/i386/strpbrk.S
@@ -1,7 +1,7 @@
 /* strcspn (str, ss) -- Return the length of the initial segement of STR
 			which contains no characters from SS.
    For Intel 80x86, x>=3.
-   Copyright (C) 1994-1997, 2000, 2003 Free Software Foundation, Inc.
+   Copyright (C) 1994-1997, 2000, 2003, 2005 Free Software Foundation, Inc.
    Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>
    Bug fixes by Alan Modra <Alan@SPRI.Levels.UniSA.Edu.Au>
    This file is part of the GNU C Library.
@@ -47,69 +47,133 @@ ENTRY (BP_SYM (strpbrk))
 	xorl %ecx, %ecx		/* %ecx = 0 !!! */
 
 	pushl %ecx		/* make a 256 bytes long block filled with 0 */
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl $0		/* These immediate values make the label 2 */
+	cfi_adjust_cfa_offset (4)
 	pushl $0		/* to be aligned on a 16 byte boundary to */
+	cfi_adjust_cfa_offset (4)
 	pushl $0		/* get a better performance of the loop.  */
+	cfi_adjust_cfa_offset (4)
 	pushl $0
+	cfi_adjust_cfa_offset (4)
 	pushl $0
+	cfi_adjust_cfa_offset (4)
 	pushl $0
+	cfi_adjust_cfa_offset (4)
 
 /* For understanding the following code remember that %ecx == 0 now.
    Although all the following instruction only modify %cl we always
@@ -173,6 +237,7 @@ L(6):	incl %eax
 L(5):	incl %eax
 
 L(4):	addl $256, %esp		/* remove stopset */
+	cfi_adjust_cfa_offset (-256)
 
 	CHECK_BOUNDS_HIGH (%eax, STR(%esp), jb)
 	orb %cl, %cl		/* was last character NUL? */
diff --git a/sysdeps/i386/strrchr.S b/sysdeps/i386/strrchr.S
index 0fd95b54f5..98c0c08bd0 100644
--- a/sysdeps/i386/strrchr.S
+++ b/sysdeps/i386/strrchr.S
@@ -1,6 +1,6 @@
 /* strrchr (str, ch) -- Return pointer to last occurrence of CH in STR.
    For Intel 80x86, x>=3.
-   Copyright (C) 1994-1997, 2000, 2003 Free Software Foundation, Inc.
+   Copyright (C) 1994-1997, 2000, 2003, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>
    Some optimisations by Alan Modra <Alan@SPRI.Levels.UniSA.Edu.Au>
@@ -35,10 +35,14 @@ ENTRY (BP_SYM (strrchr))
 	ENTER
 
 	pushl %edi		/* Save callee-safe registers used here.  */
+	cfi_adjust_cfa_offset (4)
+	cfi_rel_offset (edi, 0)
 	pushl %esi
+	cfi_adjust_cfa_offset (4)
 
 	xorl %eax, %eax
 	movl STR(%esp), %esi
+	cfi_rel_offset (esi, 0)
 	movl CHR(%esp), %ecx
 	CHECK_BOUNDS_LOW (%esi, STR(%esp))
 
@@ -299,20 +303,20 @@ L(21):	addl $4, %esi
 	   returned.  */
 
 L(20):	cmpb %cl, %dl		/* is first byte == C? */
-	jne L(24)			/* no => skip */
+	jne L(24)		/* no => skip */
 	movl %esi, %eax		/* store address as result */
 L(24):	testb %dl, %dl		/* is first byte == NUL? */
 	jz L(2)			/* yes => return */
 
 	cmpb %cl, %dh		/* is second byte == C? */
-	jne L(25)			/* no => skip */
+	jne L(25)		/* no => skip */
 	leal 1(%esi), %eax	/* store address as result */
 L(25):	testb %dh, %dh		/* is second byte == NUL? */
 	jz L(2)			/* yes => return */
 
 	shrl $16,%edx		/* make upper bytes accessible */
 	cmpb %cl, %dl		/* is third byte == C */
-	jne L(26)			/* no => skip */
+	jne L(26)		/* no => skip */
 	leal 2(%esi), %eax	/* store address as result */
 L(26):	testb %dl, %dl		/* is third byte == NUL */
 	jz L(2)			/* yes => return */
@@ -324,7 +328,11 @@ L(26):	testb %dl, %dl		/* is third byte == NUL */
 L(2):	CHECK_BOUNDS_HIGH (%eax, STR(%esp), jb)
 	RETURN_BOUNDED_POINTER (STR(%esp))
 	popl %esi		/* restore saved register content */
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (esi)
 	popl %edi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (edi)
 
 	LEAVE
 	RET_PTR
diff --git a/sysdeps/i386/strspn.S b/sysdeps/i386/strspn.S
index e1c109e590..c061438a0f 100644
--- a/sysdeps/i386/strspn.S
+++ b/sysdeps/i386/strspn.S
@@ -1,7 +1,7 @@
 /* strcspn (str, ss) -- Return the length of the initial segment of STR
 			which contains only characters from SS.
    For Intel 80x86, x>=3.
-   Copyright (C) 1994-1997, 2000, 2003 Free Software Foundation, Inc.
+   Copyright (C) 1994-1997, 2000, 2003, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>
    Bug fixes by Alan Modra <Alan@SPRI.Levels.UniSA.Edu.Au>
@@ -46,69 +46,133 @@ ENTRY (BP_SYM (strspn))
 	xorl %ecx, %ecx		/* %ecx = 0 !!! */
 
 	pushl %ecx		/* make a 256 bytes long block filled with 0 */
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl $0		/* These immediate values make the label 2 */
+	cfi_adjust_cfa_offset (4)
 	pushl $0		/* to be aligned on a 16 byte boundary to */
+	cfi_adjust_cfa_offset (4)
 	pushl $0		/* get a better performance of the loop.  */
+	cfi_adjust_cfa_offset (4)
 	pushl $0
+	cfi_adjust_cfa_offset (4)
 	pushl $0
+	cfi_adjust_cfa_offset (4)
 	pushl $0
+	cfi_adjust_cfa_offset (4)
 
 /* For understanding the following code remember that %ecx == 0 now.
    Although all the following instruction only modify %cl we always
@@ -172,6 +236,7 @@ L(6):	incl %eax
 L(5):	incl %eax
 
 L(4):	addl $256, %esp		/* remove stopset */
+	cfi_adjust_cfa_offset (-256)
 	CHECK_BOUNDS_HIGH (%eax, STR(%esp), jb)
 	subl %edx, %eax		/* we have to return the number of valid
 				   characters, so compute distance to first
diff --git a/sysdeps/i386/strtok.S b/sysdeps/i386/strtok.S
index d2786e2ca4..e45db61287 100644
--- a/sysdeps/i386/strtok.S
+++ b/sysdeps/i386/strtok.S
@@ -1,6 +1,6 @@
 /* strtok (str, delim) -- Return next DELIM separated token from STR.
    For Intel 80x86, x>=3.
-   Copyright (C) 1996, 1997, 1998, 2000, 2001 Free Software Foundation, Inc.
+   Copyright (C) 1996-1998, 2000, 2001, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
 
@@ -78,9 +78,13 @@ ENTRY (BP_SYM (FUNCTION))
 
 #if !defined USE_AS_STRTOK_R && defined PIC
 	pushl %ebx			/* Save PIC register.  */
+	cfi_adjust_cfa_offset (4)
 	call L(here)
+	cfi_adjust_cfa_offset (4)
+	cfi_rel_offset (ebx, 4)
 L(here):
 	popl %ebx
+	cfi_adjust_cfa_offset (-4)
 	addl $_GLOBAL_OFFSET_TABLE_+[.-L(here)], %ebx
 #endif
 
@@ -125,69 +129,133 @@ L(1):
 	xorl %ecx, %ecx		/* %ecx = 0 !!! */
 
 	pushl %ecx		/* make a 256 bytes long block filled with 0 */
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl %ecx
+	cfi_adjust_cfa_offset (4)
 	pushl $0		/* These immediate values make the label 2 */
+	cfi_adjust_cfa_offset (4)
 	pushl $0		/* to be aligned on a 16 byte boundary to */
+	cfi_adjust_cfa_offset (4)
 	pushl $0		/* get a better performance of the loop.  */
+	cfi_adjust_cfa_offset (4)
 	pushl $0
+	cfi_adjust_cfa_offset (4)
 	pushl $0
+	cfi_adjust_cfa_offset (4)
 	pushl $0
+	cfi_adjust_cfa_offset (4)
 
 /* For understanding the following code remember that %ecx == 0 now.
    Although all the following instruction only modify %cl we always
@@ -284,6 +352,7 @@ L(9):	incl %edx
 
 L(8):	/* Remove the stopset table.  */
 	addl $256, %esp
+	cfi_adjust_cfa_offset (-256)
 
 	cmpl %eax, %edx
 	je L(returnNULL)	/* There was no token anymore.  */
@@ -308,6 +377,8 @@ L(11):
 L(epilogue):
 #if !defined USE_AS_STRTOK_R && defined PIC
 	popl %ebx
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebx)
 #endif
 	LEAVE
 	RET_PTR
diff --git a/sysdeps/i386/sub_n.S b/sysdeps/i386/sub_n.S
index b545985374..c9f64181c6 100644
--- a/sysdeps/i386/sub_n.S
+++ b/sysdeps/i386/sub_n.S
@@ -1,6 +1,7 @@
 /* i80386 __mpn_sub_n -- Add two limb vectors of the same length > 0 and store
    sum in a third limb vector.
-   Copyright (C) 1992, 1994, 1995, 1997, 1998, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1992,1994,1995,1997,1998,2000,2005
+   Free Software Foundation, Inc.
    This file is part of the GNU MP Library.
 
    The GNU MP Library is free software; you can redistribute it and/or modify
@@ -34,10 +35,14 @@ ENTRY (BP_SYM (__mpn_sub_n))
 	ENTER
 
 	pushl %edi
+	cfi_adjust_cfa_offset (4)
 	pushl %esi
+	cfi_adjust_cfa_offset (4)
 
 	movl	RES(%esp),%edi
+	cfi_rel_offset (edi, 4)
 	movl	S1(%esp),%esi
+	cfi_rel_offset (esi, 0)
 	movl	S2(%esp),%edx
 	movl	SIZE(%esp),%ecx
 #if __BOUNDED_POINTERS__
@@ -106,7 +111,11 @@ L(oop):	movl	(%esi),%eax
 	negl	%eax
 
 	popl %esi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (esi)
 	popl %edi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (edi)
 
 	LEAVE
 	ret
diff --git a/sysdeps/i386/submul_1.S b/sysdeps/i386/submul_1.S
index 8bfcde1557..f932213b99 100644
--- a/sysdeps/i386/submul_1.S
+++ b/sysdeps/i386/submul_1.S
@@ -1,6 +1,6 @@
 /* i80386 __mpn_submul_1 -- Multiply a limb vector with a limb and subtract
    the result from a second limb vector.
-   Copyright (C) 1992, 1994, 1997, 1998, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1992,1994,1997,1998,2000,2005 Free Software Foundation, Inc.
    This file is part of the GNU MP Library.
 
    The GNU MP Library is free software; you can redistribute it and/or modify
@@ -39,14 +39,21 @@ ENTRY (BP_SYM (__mpn_submul_1))
 	ENTER
 
 	pushl	%edi
+	cfi_adjust_cfa_offset (4)
 	pushl	%esi
+	cfi_adjust_cfa_offset (4)
 	pushl	%ebp
+	cfi_adjust_cfa_offset (4)
 	pushl	%ebx
+	cfi_adjust_cfa_offset (4)
 
 	movl	RES(%esp), %res_ptr
+	cfi_rel_offset (res_ptr, 12)
 	movl	S1(%esp), %s1_ptr
+	cfi_rel_offset (s1_ptr, 8)
 	movl	SIZE(%esp), %sizeP
 	movl	S2LIMB(%esp), %s2_limb
+	cfi_rel_offset (s2_limb, 0)
 #if __BOUNDED_POINTERS__
 	shll	$2, %sizeP	/* convert limbs to bytes */
 	CHECK_BOUNDS_BOTH_WIDE (%res_ptr, RES(%esp), %sizeP)
@@ -57,6 +64,7 @@ ENTRY (BP_SYM (__mpn_submul_1))
 	leal	(%s1_ptr,%sizeP,4), %s1_ptr
 	negl	%sizeP
 	xorl	%ebp, %ebp
+	cfi_rel_offset (ebp, 4)
 	ALIGN (3)
 L(oop):
 	movl	(%s1_ptr,%sizeP,4), %eax
@@ -72,9 +80,17 @@ L(oop):
 	movl	%ebp, %eax
 
 	popl	%ebx
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebx)
 	popl	%ebp
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebp)
 	popl	%esi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (esi)
 	popl	%edi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (edi)
 
 	LEAVE
 	ret
diff --git a/sysdeps/unix/sysv/linux/i386/clone.S b/sysdeps/unix/sysv/linux/i386/clone.S
index c7d31f7a32..69243d5c8c 100644
--- a/sysdeps/unix/sysv/linux/i386/clone.S
+++ b/sysdeps/unix/sysv/linux/i386/clone.S
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996,1997,98,99,2000,02,03,04 Free Software Foundation, Inc.
+/* Copyright (C) 1996-2000,02,03,04,2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@tamu.edu)
 
@@ -83,12 +83,18 @@ ENTRY (BP_SYM (__clone))
 
 	/* Do the system call */
 	pushl	%ebx
+	cfi_adjust_cfa_offset (4)
 	pushl	%esi
+	cfi_adjust_cfa_offset (4)
 	pushl	%edi
+	cfi_adjust_cfa_offset (4)
 	movl	TLS+12(%esp),%esi
+	cfi_rel_offset (esi, 4)
 	movl	PTID+12(%esp),%edx
 	movl	FLAGS+12(%esp),%ebx
+	cfi_rel_offset (ebx, 8)
 	movl	CTID+12(%esp),%edi
+	cfi_rel_offset (edi, 0)
 	movl	$SYS_ify(clone),%eax
 
 #ifdef RESET_PID
@@ -98,8 +104,14 @@ ENTRY (BP_SYM (__clone))
 
 	int	$0x80
 	popl	%edi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (edi)
 	popl	%esi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (esi)
 	popl	%ebx
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebx)
 
 	test	%eax,%eax
 	jl	SYSCALL_ERROR_LABEL
@@ -119,13 +131,15 @@ L(haspid):
 	call	*%ebx
 #ifdef PIC
 	call	L(here)
+	cfi_adjust_cfa_offset (4)
 L(here):
 	popl	%ebx
+	cfi_adjust_cfa_offset (-4)
 	addl	$_GLOBAL_OFFSET_TABLE_+[.-L(here)], %ebx
 #endif
 	movl	%eax, %ebx
 	movl	$SYS_ify(exit), %eax
-	int	$0x80
+	ENTER_KERNEL
 
 #ifdef RESET_PID
 	.subsection 2
diff --git a/sysdeps/unix/sysv/linux/i386/mmap.S b/sysdeps/unix/sysv/linux/i386/mmap.S
index ebb21f3d32..9f664de991 100644
--- a/sysdeps/unix/sysv/linux/i386/mmap.S
+++ b/sysdeps/unix/sysv/linux/i386/mmap.S
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995,96,97,98,99,2000,2002 Free Software Foundation, Inc.
+/* Copyright (C) 1995,96,97,98,99,2000,2002,2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -32,16 +32,24 @@ ENTRY (__mmap)
 
 	/* Save registers.  */
 	pushl %ebp
+	cfi_adjust_cfa_offset (4)
 	pushl %ebx
+	cfi_adjust_cfa_offset (4)
 	pushl %esi
+	cfi_adjust_cfa_offset (4)
 	pushl %edi
+	cfi_adjust_cfa_offset (4)
 
 	movl 20(%esp), %ebx
+	cfi_rel_offset (ebx, 8)
 	movl 24(%esp), %ecx
 	movl 28(%esp), %edx
 	movl 32(%esp), %esi
+	cfi_rel_offset (esi, 4)
 	movl 36(%esp), %edi
+	cfi_rel_offset (edi, 0)
 	movl 40(%esp), %ebp
+	cfi_rel_offset (ebp, 12)
 	testl $0xfff, %ebp
 	movl $-EINVAL, %eax
 	jne L(skip)
@@ -54,9 +62,17 @@ ENTRY (__mmap)
 L(skip):
 	/* Restore registers.  */
 	popl %edi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (edi)
 	popl %esi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (esi)
 	popl %ebx
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebx)
 	popl %ebp
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebp)
 
 #else
 
diff --git a/sysdeps/unix/sysv/linux/i386/mmap64.S b/sysdeps/unix/sysv/linux/i386/mmap64.S
index 3a03335814..89d9f5f356 100644
--- a/sysdeps/unix/sysv/linux/i386/mmap64.S
+++ b/sysdeps/unix/sysv/linux/i386/mmap64.S
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995,96,97,98,99,2000,2002 Free Software Foundation, Inc.
+/* Copyright (C) 1995,96,97,98,99,2000,2002,2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -42,9 +42,13 @@ ENTRY (BP_SYM (__mmap64))
 
 	/* Save registers.  */
 	pushl %ebp
+	cfi_adjust_cfa_offset (4)
 	pushl %ebx
+	cfi_adjust_cfa_offset (4)
 	pushl %esi
+	cfi_adjust_cfa_offset (4)
 	pushl %edi
+	cfi_adjust_cfa_offset (4)
 
 	movl OFFLO(%esp), %edx
 	movl OFFHI(%esp), %ecx
@@ -54,12 +58,16 @@ ENTRY (BP_SYM (__mmap64))
 	shrl $12, %ecx
 	jne L(einval)
 	movl %edx, %ebp
+	cfi_rel_offset (ebp, 12)
 
 	movl ADDR(%esp), %ebx
+	cfi_rel_offset (ebx, 8)
 	movl LEN(%esp), %ecx
 	movl PROT(%esp), %edx
 	movl FLAGS(%esp), %esi
+	cfi_rel_offset (esi, 4)
 	movl FD(%esp), %edi
+	cfi_rel_offset (edi, 0)
 
 	movl $SYS_ify(mmap2), %eax	/* System call number in %eax.  */
 
@@ -69,9 +77,17 @@ L(do_syscall):
 
 	/* Restore registers.  */
 	popl %edi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (edi)
 	popl %esi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (esi)
 	popl %ebx
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebx)
 	popl %ebp
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebp)
 
 #ifndef __ASSUME_MMAP2_SYSCALL
 2:
@@ -87,12 +103,25 @@ L(do_syscall):
 L(pseudo_end):
 	ret
 
+	cfi_adjust_cfa_offset (16)
+	cfi_rel_offset (ebp, 12)
+	cfi_rel_offset (ebx, 8)
+	cfi_rel_offset (esi, 4)
+	cfi_rel_offset (edi, 0)
 	/* This means the offset value is too large.  */
 L(einval):
 	popl %edi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (edi)
 	popl %esi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (esi)
 	popl %ebx
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebx)
 	popl %ebp
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebp)
 	movl $-EINVAL, %eax
 	jmp SYSCALL_ERROR_LABEL
 #endif
diff --git a/sysdeps/unix/sysv/linux/i386/posix_fadvise64.S b/sysdeps/unix/sysv/linux/i386/posix_fadvise64.S
index 99a3ea536d..dc82582fa0 100644
--- a/sysdeps/unix/sysv/linux/i386/posix_fadvise64.S
+++ b/sysdeps/unix/sysv/linux/i386/posix_fadvise64.S
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995-2000,2002,2003,2004 Free Software Foundation, Inc.
+/* Copyright (C) 1995-2000,2002,2003,2004, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -42,25 +42,41 @@ ENTRY (BP_SYM (__posix_fadvise64_l64))
 
 	/* Save registers.  */
 	pushl	%ebp
+	cfi_adjust_cfa_offset (4)
 	pushl	%ebx
+	cfi_adjust_cfa_offset (4)
 	pushl	%esi
+	cfi_adjust_cfa_offset (4)
 	pushl	%edi
+	cfi_adjust_cfa_offset (4)
 
 	movl	FD(%esp), %ebx
+	cfi_rel_offset (ebx, 8)
 	movl	OFFLO(%esp), %ecx
 	movl	OFFHI(%esp), %edx
 	movl	LENLO(%esp), %esi
+	cfi_rel_offset (esi, 4)
 	movl	LENHI(%esp), %edi
+	cfi_rel_offset (edi, 0)
 	movl	FLAGS(%esp), %ebp
+	cfi_rel_offset (ebp, 12)
 
 	movl	$SYS_ify(fadvise64_64), %eax
 	ENTER_KERNEL
 
 	/* Restore registers.  */
 	popl	%edi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (edi)
 	popl	%esi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (esi)
 	popl	%ebx
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebx)
 	popl	%ebp
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebp)
 
 #ifndef __ASSUME_FADVISE64_64_SYSCALL
 	cmpl	$-ENOSYS, %eax
@@ -80,8 +96,11 @@ ENTRY (BP_SYM (__posix_fadvise64_l64))
     && (!defined __ASSUME_FADVISE64_64_SYSCALL || !defined __NR_fadvise64_64)
 1:	/* Save registers.  */
 	pushl	%ebx
+	cfi_adjust_cfa_offset (4)
 	pushl	%esi
+	cfi_adjust_cfa_offset (4)
 	pushl	%edi
+	cfi_adjust_cfa_offset (4)
 
 	/* Overflow check.  */
 	cmpl	$0, LENHI(%esp)
@@ -89,10 +108,13 @@ ENTRY (BP_SYM (__posix_fadvise64_l64))
 	jne	L(overflow)
 
 	movl	FD(%esp), %ebx
+	cfi_rel_offset (ebx, 8)
 	movl	OFFLO(%esp), %ecx
 	movl	OFFHI(%esp), %edx
 	movl	LENLO(%esp), %esi
+	cfi_rel_offset (esi, 4)
 	movl	FLAGS(%esp), %edi
+	cfi_rel_offset (edi, 0)
 
 	movl	$SYS_ify(fadvise64), %eax
 	ENTER_KERNEL
@@ -100,8 +122,14 @@ ENTRY (BP_SYM (__posix_fadvise64_l64))
 	/* Restore registers.  */
 L(overflow):
 	popl	%edi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (edi)
 	popl	%esi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (esi)
 	popl	%ebx
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebx)
 
 	/* If 0 > %eax > -4096 there was an error.  */
 	negl	%eax
diff --git a/sysdeps/unix/sysv/linux/i386/semtimedop.S b/sysdeps/unix/sysv/linux/i386/semtimedop.S
index 572641675f..0893c6a654 100644
--- a/sysdeps/unix/sysv/linux/i386/semtimedop.S
+++ b/sysdeps/unix/sysv/linux/i386/semtimedop.S
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
+/* Copyright (C) 2003, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
 
@@ -32,22 +32,34 @@
 ENTRY (BP_SYM (semtimedop))
 
 	pushl	%ebp
+	cfi_adjust_cfa_offset (4)
 	pushl	%ebx
+	cfi_adjust_cfa_offset (4)
 	pushl	%edi
+	cfi_adjust_cfa_offset (4)
 
 	movl	$SYSOP_semtimedop, %ebx
+	cfi_rel_offset (ebx, 4)
 	movl	SEMID(%esp), %ecx
 	movl	NSOPS(%esp), %edx
 	movl	SOPS(%esp), %edi
+	cfi_rel_offset (edi, 0)
 	movl	TIMEOUT(%esp), %ebp
+	cfi_rel_offset (ebp, 8)
 	movl	$__NR_ipc, %eax
 
 	ENTER_KERNEL
 
 	/* Restore registers.  */
 	popl	%edi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (edi)
 	popl	%ebx
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebx)
 	popl	%ebp
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebp)
 
 	/* If 0 > %eax > -4096 there was an error.  */
 	cmpl $-4096, %eax
diff --git a/sysdeps/unix/sysv/linux/i386/setcontext.S b/sysdeps/unix/sysv/linux/i386/setcontext.S
index ebed2ce572..22469b2b85 100644
--- a/sysdeps/unix/sysv/linux/i386/setcontext.S
+++ b/sysdeps/unix/sysv/linux/i386/setcontext.S
@@ -1,5 +1,5 @@
 /* Install given context.
-   Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2001.
 
@@ -31,12 +31,16 @@ ENTRY(__setcontext)
 	   the system call fails and we return from the function with an
 	   error.  */
 	pushl	%ebx
+	cfi_adjust_cfa_offset (4)
 	xorl	%edx, %edx
 	leal	oSIGMASK(%eax), %ecx
 	movl	$SIG_SETMASK, %ebx
+	cfi_rel_offset (ebx, 0)
 	movl	$__NR_sigprocmask, %eax
 	ENTER_KERNEL
 	popl	%ebx
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebx)
 	cmpl	$-4095, %eax		/* Check %eax for error.  */
 	jae	SYSCALL_ERROR_LABEL	/* Jump to error handler if error.  */
 
diff --git a/sysdeps/unix/sysv/linux/kernel-features.h b/sysdeps/unix/sysv/linux/kernel-features.h
index 26cddd5a73..002cc46c79 100644
--- a/sysdeps/unix/sysv/linux/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/kernel-features.h
@@ -354,7 +354,7 @@
 
 /* The tgkill syscall was instroduced for i386 in 2.5.75.  For Alpha
    it was introduced in 2.6.0-test1 which unfortunately cannot be
-   distinguished from 2.6.0.  On x86-64, ppc, and ppc64 it was 
+   distinguished from 2.6.0.  On x86-64, ppc, and ppc64 it was
    introduced in 2.6.0-test3. */
 #if (__LINUX_KERNEL_VERSION >= 132427 && defined __i386__) \
     || (__LINUX_KERNEL_VERSION >= 132609 && defined __alpha__) \
@@ -365,7 +365,7 @@
 #endif
 
 /* The utimes syscall has been available for some architectures
-   forever.  For x86 it was introduced after 2.5.75, for x86-64, 
+   forever.  For x86 it was introduced after 2.5.75, for x86-64,
    ppc, and ppc64 it was introduced in 2.6.0-test3.  */
 #if defined __alpha__ || defined __ia64__ || defined __hppa__ \
     || defined __sparc__ \
@@ -425,8 +425,9 @@
 #endif
 
 /* Starting with version 2.6.9, the waitid system call is available.
-   Except for powerpc and powerpc64.  */
-#if __LINUX_KERNEL_VERSION >=  0x020609 && !defined __powerpc__
+   Except for powerpc and powerpc64, where it is available in 2.6.12.  */
+#if (__LINUX_KERNEL_VERSION >= 0x020609 && !defined __powerpc__) \
+    || (__LINUX_KERNEL_VERSION >= 0x02060c && defined __powerpc__)
 # define __ASSUME_WAITID_SYSCALL	1
 #endif