diff options
author | Ulrich Drepper <drepper@redhat.com> | 2005-05-04 06:22:30 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2005-05-04 06:22:30 +0000 |
commit | 1ad9da69c607236f70689dab39a7d937398d2f10 (patch) | |
tree | c6f6a3a9f909389ced37fa6d3e5b229bc98b001a /sysdeps/i386 | |
parent | 5085cd1fa10472c6e484e0cb6cb06417ca69de1d (diff) | |
download | glibc-1ad9da69c607236f70689dab39a7d937398d2f10.tar.gz |
* sysdeps/i386/add_n.S: Add call frame information.cvs/fedora-glibc-20050504T0728
* 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.
Diffstat (limited to 'sysdeps/i386')
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 |