about summary refs log tree commit diff
path: root/sysdeps/i386
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/i386')
-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
39 files changed, 825 insertions, 132 deletions
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