diff options
author | Jakub Jelinek <jakub@redhat.com> | 2005-05-04 18:33:36 +0000 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2005-05-04 18:33:36 +0000 |
commit | f6cc6cdf0b94eb1608ceeabcab2450c8cd4054a4 (patch) | |
tree | 01abe7e7555ee0d87db36c06881902ac01af2333 /sysdeps | |
parent | e759ccae887cac69cd47b878c67eba5dd1934f56 (diff) | |
download | glibc-f6cc6cdf0b94eb1608ceeabcab2450c8cd4054a4.tar.gz glibc-f6cc6cdf0b94eb1608ceeabcab2450c8cd4054a4.tar.xz glibc-f6cc6cdf0b94eb1608ceeabcab2450c8cd4054a4.zip |
Updated to fedora-glibc-20050504T1818
Diffstat (limited to 'sysdeps')
72 files changed, 312 insertions, 231 deletions
diff --git a/sysdeps/i386/addmul_1.S b/sysdeps/i386/addmul_1.S index 23c3f5922f..df501726c5 100644 --- a/sysdeps/i386/addmul_1.S +++ b/sysdeps/i386/addmul_1.S @@ -38,13 +38,13 @@ ENTRY (BP_SYM (__mpn_addmul_1)) ENTER - pushl %edi + pushl %res_ptr cfi_adjust_cfa_offset (4) - pushl %esi + pushl %s1_ptr cfi_adjust_cfa_offset (4) pushl %ebp cfi_adjust_cfa_offset (4) - pushl %ebx + pushl %s2_limb cfi_adjust_cfa_offset (4) movl RES(%esp), %res_ptr @@ -79,18 +79,18 @@ L(oop): jnz L(oop) movl %ebp, %eax - popl %ebx + popl %s2_limb cfi_adjust_cfa_offset (-4) - cfi_restore (ebx) + cfi_restore (s2_limb) popl %ebp cfi_adjust_cfa_offset (-4) cfi_restore (ebp) - popl %esi + popl %s1_ptr cfi_adjust_cfa_offset (-4) - cfi_restore (esi) - popl %edi + cfi_restore (s1_ptr) + popl %res_ptr cfi_adjust_cfa_offset (-4) - cfi_restore (edi) + cfi_restore (res_ptr) LEAVE ret diff --git a/sysdeps/i386/fpu/e_acosh.S b/sysdeps/i386/fpu/e_acosh.S index 981425ec7a..62a232471f 100644 --- a/sysdeps/i386/fpu/e_acosh.S +++ b/sysdeps/i386/fpu/e_acosh.S @@ -1,5 +1,5 @@ /* ix87 specific implementation of arcsinh. - Copyright (C) 1996 Free Software Foundation, Inc. + Copyright (C) 1996, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. @@ -50,9 +50,7 @@ ENTRY(__ieee754_acosh) cmpl $0x41b00000, %ecx ja 3f // x > 2^28 #ifdef PIC - call 1f -1: popl %edx - addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx + LOAD_PIC_REG (dx) #endif cmpl $0x40000000, %ecx ja 4f // x > 2 diff --git a/sysdeps/i386/fpu/e_acoshf.S b/sysdeps/i386/fpu/e_acoshf.S index 17be69d575..1906c60578 100644 --- a/sysdeps/i386/fpu/e_acoshf.S +++ b/sysdeps/i386/fpu/e_acoshf.S @@ -1,5 +1,5 @@ /* ix87 specific implementation of arcsinh. - Copyright (C) 1996, 1997 Free Software Foundation, Inc. + Copyright (C) 1996, 1997, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. @@ -50,9 +50,7 @@ ENTRY(__ieee754_acoshf) cmpl $0x47000000, %ecx ja 3f // x > 2^14 #ifdef PIC - call 1f -1: popl %edx - addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx + LOAD_PIC_REG (dx) #endif cmpl $0x40000000, %ecx ja 4f // x > 2 diff --git a/sysdeps/i386/fpu/e_acoshl.S b/sysdeps/i386/fpu/e_acoshl.S index 7b6885da18..c7b548d25a 100644 --- a/sysdeps/i386/fpu/e_acoshl.S +++ b/sysdeps/i386/fpu/e_acoshl.S @@ -1,5 +1,5 @@ /* ix87 specific implementation of arcsinh. - Copyright (C) 1996, 1997 Free Software Foundation, Inc. + Copyright (C) 1996, 1997, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. @@ -57,9 +57,7 @@ ENTRY(__ieee754_acoshl) cmpl $0x4020, %ecx ja 3f // x > 2^34 #ifdef PIC - call 1f -1: popl %edx - addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx + LOAD_PIC_REG (dx) #endif cmpl $0x4000, %ecx ja 4f // x > 2 diff --git a/sysdeps/i386/fpu/e_atanh.S b/sysdeps/i386/fpu/e_atanh.S index 6fb53a4acc..3566ec6eff 100644 --- a/sysdeps/i386/fpu/e_atanh.S +++ b/sysdeps/i386/fpu/e_atanh.S @@ -1,5 +1,5 @@ /* ix87 specific implementation of arctanh function. - Copyright (C) 1996, 1999 Free Software Foundation, Inc. + Copyright (C) 1996, 1999, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. @@ -58,7 +58,9 @@ ENTRY(__ieee754_atanh) #ifdef PIC call 1f + cfi_adjust_cfa_offset (4) 1: popl %edx + cfi_adjust_cfa_offset (-4) addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx #endif diff --git a/sysdeps/i386/fpu/e_atanhf.S b/sysdeps/i386/fpu/e_atanhf.S index a517929f2a..10ce6aed9e 100644 --- a/sysdeps/i386/fpu/e_atanhf.S +++ b/sysdeps/i386/fpu/e_atanhf.S @@ -1,5 +1,5 @@ /* ix87 specific implementation of arctanh function. - Copyright (C) 1996, 1999 Free Software Foundation, Inc. + Copyright (C) 1996, 1999, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. @@ -57,9 +57,7 @@ ENTRY(__ieee754_atanhf) ja 5f #ifdef PIC - call 1f -1: popl %edx - addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx + LOAD_PIC_REG (dx) #endif andl $0x80000000, %ecx // ECX == 0 iff X >= 0 diff --git a/sysdeps/i386/fpu/e_atanhl.S b/sysdeps/i386/fpu/e_atanhl.S index 6fda9bef89..8618c3fb35 100644 --- a/sysdeps/i386/fpu/e_atanhl.S +++ b/sysdeps/i386/fpu/e_atanhl.S @@ -64,9 +64,7 @@ ENTRY(__ieee754_atanhl) 7: #ifdef PIC - call 1f -1: popl %edx - addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx + LOAD_PIC_REG (dx) #endif andl $0x8000, %ecx // ECX == 0 iff X >= 0 diff --git a/sysdeps/i386/fpu/e_log.S b/sysdeps/i386/fpu/e_log.S index c7cacdfb0a..5604e638f5 100644 --- a/sysdeps/i386/fpu/e_log.S +++ b/sysdeps/i386/fpu/e_log.S @@ -37,9 +37,7 @@ ENTRY(__ieee754_log) fldln2 // log(2) fldl 4(%esp) // x : log(2) #ifdef PIC - call 1f -1: popl %edx - addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx + LOAD_PIC_REG (dx) #endif fld %st // x : x : log(2) fsubl MO(one) // x-1 : x : log(2) diff --git a/sysdeps/i386/fpu/e_log10.S b/sysdeps/i386/fpu/e_log10.S index e93184c219..525f08c96d 100644 --- a/sysdeps/i386/fpu/e_log10.S +++ b/sysdeps/i386/fpu/e_log10.S @@ -37,9 +37,7 @@ ENTRY(__ieee754_log10) fldlg2 // log10(2) fldl 4(%esp) // x : log10(2) #ifdef PIC - call 1f -1: popl %edx - addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx + LOAD_PIC_REG (dx) #endif fxam fnstsw diff --git a/sysdeps/i386/fpu/e_log10f.S b/sysdeps/i386/fpu/e_log10f.S index 0a89f54784..da5069d583 100644 --- a/sysdeps/i386/fpu/e_log10f.S +++ b/sysdeps/i386/fpu/e_log10f.S @@ -38,9 +38,7 @@ ENTRY(__ieee754_log10f) fldlg2 // log10(2) flds 4(%esp) // x : log10(2) #ifdef PIC - call 1f -1: popl %edx - addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx + LOAD_PIC_REG (dx) #endif fxam fnstsw diff --git a/sysdeps/i386/fpu/e_log10l.S b/sysdeps/i386/fpu/e_log10l.S index 25d3501663..3811516be5 100644 --- a/sysdeps/i386/fpu/e_log10l.S +++ b/sysdeps/i386/fpu/e_log10l.S @@ -39,9 +39,7 @@ ENTRY(__ieee754_log10l) fldlg2 // log10(2) fldt 4(%esp) // x : log10(2) #ifdef PIC - call 1f -1: popl %edx - addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx + LOAD_PIC_REG (dx) #endif fxam fnstsw diff --git a/sysdeps/i386/fpu/e_log2.S b/sysdeps/i386/fpu/e_log2.S index 4f7f0d57d9..d80bf80239 100644 --- a/sysdeps/i386/fpu/e_log2.S +++ b/sysdeps/i386/fpu/e_log2.S @@ -34,9 +34,7 @@ limit: .double 0.29 .text ENTRY(__ieee754_log2) #ifdef PIC - call 1f -1: popl %edx - addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx + LOAD_PIC_REG (dx) #endif fldl MO(one) fldl 4(%esp) // x : 1 diff --git a/sysdeps/i386/fpu/e_log2f.S b/sysdeps/i386/fpu/e_log2f.S index 88f28b423c..9eb7b2a826 100644 --- a/sysdeps/i386/fpu/e_log2f.S +++ b/sysdeps/i386/fpu/e_log2f.S @@ -34,9 +34,7 @@ limit: .double 0.29 .text ENTRY(__ieee754_log2f) #ifdef PIC - call 1f -1: popl %edx - addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx + LOAD_PIC_REG (dx) #endif fldl MO(one) flds 4(%esp) // x : 1 diff --git a/sysdeps/i386/fpu/e_log2l.S b/sysdeps/i386/fpu/e_log2l.S index f5c661a2d1..9de08f5de1 100644 --- a/sysdeps/i386/fpu/e_log2l.S +++ b/sysdeps/i386/fpu/e_log2l.S @@ -34,9 +34,7 @@ limit: .double 0.29 .text ENTRY(__ieee754_log2l) #ifdef PIC - call 1f -1: popl %edx - addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx + LOAD_PIC_REG (dx) #endif fldl MO(one) fldt 4(%esp) // x : 1 diff --git a/sysdeps/i386/fpu/e_logf.S b/sysdeps/i386/fpu/e_logf.S index bdba1d3225..128bb2754c 100644 --- a/sysdeps/i386/fpu/e_logf.S +++ b/sysdeps/i386/fpu/e_logf.S @@ -38,9 +38,7 @@ ENTRY(__ieee754_logf) fldln2 // log(2) flds 4(%esp) // x : log(2) #ifdef PIC - call 1f -1: popl %edx - addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx + LOAD_PIC_REG (dx) #endif fld %st // x : x : log(2) fsubl MO(one) // x-1 : x : log(2) diff --git a/sysdeps/i386/fpu/e_logl.S b/sysdeps/i386/fpu/e_logl.S index bda3ea508e..5023d3012f 100644 --- a/sysdeps/i386/fpu/e_logl.S +++ b/sysdeps/i386/fpu/e_logl.S @@ -38,9 +38,7 @@ ENTRY(__ieee754_logl) fldln2 // log(2) fldt 4(%esp) // x : log(2) #ifdef PIC - call 1f -1: popl %edx - addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx + LOAD_PIC_REG (dx) #endif fld %st // x : x : log(2) fsubl MO(one) // x-1 : x : log(2) diff --git a/sysdeps/i386/fpu/e_pow.S b/sysdeps/i386/fpu/e_pow.S index d100c0ac57..c554ca4ecb 100644 --- a/sysdeps/i386/fpu/e_pow.S +++ b/sysdeps/i386/fpu/e_pow.S @@ -1,5 +1,5 @@ /* ix87 specific implementation of pow function. - Copyright (C) 1996, 1997, 1998, 1999, 2001, 2004 + Copyright (C) 1996, 1997, 1998, 1999, 2001, 2004, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. @@ -67,9 +67,7 @@ ENTRY(__ieee754_pow) fxam #ifdef PIC - call 1f -1: popl %ecx - addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ecx + LOAD_PIC_REG (cx) #endif fnstsw @@ -87,6 +85,7 @@ ENTRY(__ieee754_pow) fldl 4(%esp) // x : y subl $8,%esp + cfi_adjust_cfa_offset (8) fxam fnstsw @@ -120,7 +119,9 @@ ENTRY(__ieee754_pow) /* OK, we have an integer value for y. */ popl %eax + cfi_adjust_cfa_offset (-4) popl %edx + cfi_adjust_cfa_offset (-4) orl $0, %edx fstp %st(0) // x jns 4f // y >= 0, jump @@ -155,6 +156,7 @@ ENTRY(__ieee754_pow) 31: fstp %st(1) ret + cfi_adjust_cfa_offset (8) .align ALIGNARG(4) 2: /* y is a real number. */ fxch // x : y @@ -181,6 +183,7 @@ ENTRY(__ieee754_pow) faddl MO(one) // 2^fract(y*log2(x)) : int(y*log2(x)) fscale // 2^fract(y*log2(x))*2^int(y*log2(x)) : int(y*log2(x)) addl $8, %esp + cfi_adjust_cfa_offset (-8) fstp %st(1) // 2^fract(y*log2(x))*2^int(y*log2(x)) ret @@ -219,6 +222,7 @@ ENTRY(__ieee754_pow) 13: fldl 4(%esp) // load x == NaN ret + cfi_adjust_cfa_offset (8) .align ALIGNARG(4) // x is ±inf 15: fstp %st(0) // y @@ -237,7 +241,9 @@ ENTRY(__ieee754_pow) // OK, the value is an integer, but is the number of bits small // enough so that all are coming from the mantissa? popl %eax + cfi_adjust_cfa_offset (-4) popl %edx + cfi_adjust_cfa_offset (-4) andb $1, %al jz 18f // jump if not odd movl %edx, %eax @@ -251,22 +257,27 @@ ENTRY(__ieee754_pow) fldl MOX(minf_mzero, %edx, 8) ret + cfi_adjust_cfa_offset (8) .align ALIGNARG(4) 16: fcompl MO(zero) addl $8, %esp + cfi_adjust_cfa_offset (-8) fnstsw shrl $5, %eax andl $8, %eax fldl MOX(inf_zero, %eax, 1) ret + cfi_adjust_cfa_offset (8) .align ALIGNARG(4) 17: shll $30, %edx // sign bit for y in right position addl $8, %esp + cfi_adjust_cfa_offset (-8) 18: shrl $31, %edx fldl MOX(inf_zero, %edx, 8) ret + cfi_adjust_cfa_offset (8) .align ALIGNARG(4) // x is ±0 20: fstp %st(0) // y @@ -288,7 +299,9 @@ ENTRY(__ieee754_pow) // OK, the value is an integer, but is the number of bits small // enough so that all are coming from the mantissa? popl %eax + cfi_adjust_cfa_offset (-4) popl %edx + cfi_adjust_cfa_offset (-4) andb $1, %al jz 27f // jump if not odd cmpl $0xffe00000, %edx @@ -300,13 +313,16 @@ ENTRY(__ieee754_pow) fchs ret + cfi_adjust_cfa_offset (8) 25: fstp %st(0) 26: addl $8, %esp + cfi_adjust_cfa_offset (-8) 27: // Raise divide-by-zero exception and get infinity value. fldl MO(one) fdivl MO(zero) ret + cfi_adjust_cfa_offset (8) .align ALIGNARG(4) // x is ±0 and y is > 0. We must find out whether y is an odd integer. 21: testb $2, %dh @@ -323,7 +339,9 @@ ENTRY(__ieee754_pow) // OK, the value is an integer, but is the number of bits small // enough so that all are coming from the mantissa? popl %eax + cfi_adjust_cfa_offset (-4) popl %edx + cfi_adjust_cfa_offset (-4) andb $1, %al jz 24f // jump if not odd cmpl $0xffe00000, %edx @@ -332,8 +350,10 @@ ENTRY(__ieee754_pow) fldl MO(mzero) ret + cfi_adjust_cfa_offset (8) 22: fstp %st(0) 23: addl $8, %esp // Don't use 2 x pop + cfi_adjust_cfa_offset (-8) 24: fldl MO(zero) ret diff --git a/sysdeps/i386/fpu/e_powf.S b/sysdeps/i386/fpu/e_powf.S index b3fa624f4d..c835b978b9 100644 --- a/sysdeps/i386/fpu/e_powf.S +++ b/sysdeps/i386/fpu/e_powf.S @@ -1,5 +1,6 @@ /* ix87 specific implementation of pow function. - Copyright (C) 1996, 1997, 1999, 2001, 2004 Free Software Foundation, Inc. + Copyright (C) 1996, 1997, 1999, 2001, 2004, 2005 + Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. @@ -66,9 +67,7 @@ ENTRY(__ieee754_powf) fxam #ifdef PIC - call 1f -1: popl %ecx - addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ecx + LOAD_PIC_REG (cx) #endif fnstsw @@ -86,6 +85,7 @@ ENTRY(__ieee754_powf) flds 4(%esp) // x : y subl $4, %esp + cfi_adjust_cfa_offset (4) fxam fnstsw @@ -119,6 +119,7 @@ ENTRY(__ieee754_powf) /* OK, we have an integer value for y. */ popl %edx + cfi_adjust_cfa_offset (-4) orl $0, %edx fstp %st(0) // x jns 4f // y >= 0, jump @@ -149,6 +150,7 @@ ENTRY(__ieee754_powf) 31: fstp %st(1) ret + cfi_adjust_cfa_offset (4) .align ALIGNARG(4) 2: /* y is a real number. */ fxch // x : y @@ -175,6 +177,7 @@ ENTRY(__ieee754_powf) faddl MO(one) // 2^fract(y*log2(x)) : int(y*log2(x)) fscale // 2^fract(y*log2(x))*2^int(y*log2(x)) : int(y*log2(x)) addl $4, %esp + cfi_adjust_cfa_offset (-4) fstp %st(1) // 2^fract(y*log2(x))*2^int(y*log2(x)) ret @@ -213,6 +216,7 @@ ENTRY(__ieee754_powf) 13: flds 4(%esp) // load x == NaN ret + cfi_adjust_cfa_offset (4) .align ALIGNARG(4) // x is ±inf 15: fstp %st(0) // y @@ -231,6 +235,7 @@ ENTRY(__ieee754_powf) // OK, the value is an integer, but is the number of bits small // enough so that all are coming from the mantissa? popl %edx + cfi_adjust_cfa_offset (-4) testb $1, %dl jz 18f // jump if not odd movl %edx, %eax @@ -244,22 +249,27 @@ ENTRY(__ieee754_powf) fldl MOX(minf_mzero, %edx, 8) ret + cfi_adjust_cfa_offset (4) .align ALIGNARG(4) 16: fcompl MO(zero) addl $4, %esp + cfi_adjust_cfa_offset (-4) fnstsw shrl $5, %eax andl $8, %eax fldl MOX(inf_zero, %eax, 1) ret + cfi_adjust_cfa_offset (4) .align ALIGNARG(4) 17: shll $30, %edx // sign bit for y in right position addl $4, %esp + cfi_adjust_cfa_offset (-4) 18: shrl $31, %edx fldl MOX(inf_zero, %edx, 8) ret + cfi_adjust_cfa_offset (4) .align ALIGNARG(4) // x is ±0 20: fstp %st(0) // y @@ -281,6 +291,7 @@ ENTRY(__ieee754_powf) // OK, the value is an integer, but is the number of bits small // enough so that all are coming from the mantissa? popl %edx + cfi_adjust_cfa_offset (-4) testb $1, %dl jz 27f // jump if not odd cmpl $0xff000000, %edx @@ -292,13 +303,16 @@ ENTRY(__ieee754_powf) fchs ret + cfi_adjust_cfa_offset (4) 25: fstp %st(0) 26: addl $4, %esp + cfi_adjust_cfa_offset (-4) 27: // Raise divide-by-zero exception and get infinity value. fldl MO(one) fdivl MO(zero) ret + cfi_adjust_cfa_offset (4) .align ALIGNARG(4) // x is ±0 and y is > 0. We must find out whether y is an odd integer. 21: testb $2, %dh @@ -315,6 +329,7 @@ ENTRY(__ieee754_powf) // OK, the value is an integer, but is the number of bits small // enough so that all are coming from the mantissa? popl %edx + cfi_adjust_cfa_offset (-4) testb $1, %dl jz 24f // jump if not odd cmpl $0xff000000, %edx @@ -323,8 +338,10 @@ ENTRY(__ieee754_powf) fldl MO(mzero) ret + cfi_adjust_cfa_offset (4) 22: fstp %st(0) 23: addl $4, %esp // Don't use pop. + cfi_adjust_cfa_offset (-4) 24: fldl MO(zero) ret diff --git a/sysdeps/i386/fpu/e_powl.S b/sysdeps/i386/fpu/e_powl.S index 080764b84a..74f422816a 100644 --- a/sysdeps/i386/fpu/e_powl.S +++ b/sysdeps/i386/fpu/e_powl.S @@ -1,5 +1,5 @@ /* ix87 specific implementation of pow function. - Copyright (C) 1996, 1997, 1998, 1999, 2001, 2004 + Copyright (C) 1996, 1997, 1998, 1999, 2001, 2004, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. @@ -67,9 +67,7 @@ ENTRY(__ieee754_powl) fxam #ifdef PIC - call 1f -1: popl %ecx - addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ecx + LOAD_PIC_REG (cx) #endif fnstsw @@ -87,6 +85,7 @@ ENTRY(__ieee754_powl) fldt 4(%esp) // x : y subl $8,%esp + cfi_adjust_cfa_offset (8) fxam fnstsw @@ -120,7 +119,9 @@ ENTRY(__ieee754_powl) /* OK, we have an integer value for y. */ popl %eax + cfi_adjust_cfa_offset (-4) popl %edx + cfi_adjust_cfa_offset (-4) orl $0, %edx fstp %st(0) // x jns 4f // y >= 0, jump @@ -155,6 +156,7 @@ ENTRY(__ieee754_powl) 31: fstp %st(1) ret + cfi_adjust_cfa_offset (8) .align ALIGNARG(4) 2: /* y is a real number. */ fxch // x : y @@ -186,13 +188,16 @@ ENTRY(__ieee754_powl) faddl MO(one) // 2^fract(y*log2(x)) : int(y*log2(x)) fscale // 2^fract(y*log2(x))*2^int(y*log2(x)) : int(y*log2(x)) addl $8, %esp + cfi_adjust_cfa_offset (-8) fstp %st(1) // 2^fract(y*log2(x))*2^int(y*log2(x)) ret + cfi_adjust_cfa_offset (8) 28: fstp %st(1) // y*log2(x) fldl MO(one) // 1 : y*log2(x) fscale // 2^(y*log2(x)) : y*log2(x) addl $8, %esp + cfi_adjust_cfa_offset (-8) fstp %st(1) // 2^(y*log2(x)) ret @@ -230,6 +235,7 @@ ENTRY(__ieee754_powl) 13: fldt 4(%esp) // load x == NaN ret + cfi_adjust_cfa_offset (8) .align ALIGNARG(4) // x is ±inf 15: fstp %st(0) // y @@ -247,7 +253,9 @@ ENTRY(__ieee754_powl) // OK, the value is an integer, but is it odd? popl %eax + cfi_adjust_cfa_offset (-4) popl %edx + cfi_adjust_cfa_offset (-4) andb $1, %al jz 18f // jump if not odd // It's an odd integer. @@ -255,22 +263,27 @@ ENTRY(__ieee754_powl) fldl MOX(minf_mzero, %edx, 8) ret + cfi_adjust_cfa_offset (8) .align ALIGNARG(4) 16: fcompl MO(zero) addl $8, %esp + cfi_adjust_cfa_offset (-8) fnstsw shrl $5, %eax andl $8, %eax fldl MOX(inf_zero, %eax, 1) ret + cfi_adjust_cfa_offset (8) .align ALIGNARG(4) 17: shll $30, %edx // sign bit for y in right position addl $8, %esp + cfi_adjust_cfa_offset (-8) 18: shrl $31, %edx fldl MOX(inf_zero, %edx, 8) ret + cfi_adjust_cfa_offset (8) .align ALIGNARG(4) // x is ±0 20: fstp %st(0) // y @@ -291,7 +304,9 @@ ENTRY(__ieee754_powl) // OK, the value is an integer, but is it odd? popl %eax + cfi_adjust_cfa_offset (-4) popl %edx + cfi_adjust_cfa_offset (-4) andb $1, %al jz 27f // jump if not odd // It's an odd integer. @@ -301,13 +316,16 @@ ENTRY(__ieee754_powl) fchs ret + cfi_adjust_cfa_offset (8) 25: fstp %st(0) 26: addl $8, %esp + cfi_adjust_cfa_offset (-8) 27: // Raise divide-by-zero exception and get infinity value. fldl MO(one) fdivl MO(zero) ret + cfi_adjust_cfa_offset (8) .align ALIGNARG(4) // x is ±0 and y is > 0. We must find out whether y is an odd integer. 21: testb $2, %dh @@ -323,15 +341,19 @@ ENTRY(__ieee754_powl) // OK, the value is an integer, but is it odd? popl %eax + cfi_adjust_cfa_offset (-4) popl %edx + cfi_adjust_cfa_offset (-4) andb $1, %al jz 24f // jump if not odd // It's an odd integer. fldl MO(mzero) ret + cfi_adjust_cfa_offset (8) 22: fstp %st(0) 23: addl $8, %esp // Don't use 2 x pop + cfi_adjust_cfa_offset (-8) 24: fldl MO(zero) ret diff --git a/sysdeps/i386/fpu/e_scalb.S b/sysdeps/i386/fpu/e_scalb.S index 1596f6a700..7e334a3611 100644 --- a/sysdeps/i386/fpu/e_scalb.S +++ b/sysdeps/i386/fpu/e_scalb.S @@ -64,9 +64,7 @@ ENTRY(__ieee754_scalb) /* y is -inf */ 1: fxam #ifdef PIC - call 1f -1: popl %ecx - addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ecx + LOAD_PIC_REG (cx) #endif fnstsw movl 8(%esp), %edx @@ -86,9 +84,7 @@ ENTRY(__ieee754_scalb) 2: fstp %st fstp %st #ifdef PIC - call 1f -1: popl %ecx - addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ecx + LOAD_PIC_REG (cx) #endif fldl MO(nan) ret diff --git a/sysdeps/i386/fpu/e_scalbf.S b/sysdeps/i386/fpu/e_scalbf.S index d41c29327d..e99ee92cb0 100644 --- a/sysdeps/i386/fpu/e_scalbf.S +++ b/sysdeps/i386/fpu/e_scalbf.S @@ -66,9 +66,7 @@ ENTRY(__ieee754_scalbf) /* y is -inf */ 1: fxam #ifdef PIC - call 1f -1: popl %ecx - addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ecx + LOAD_PIC_REG (cx) #endif fnstsw movl 4(%esp), %edx @@ -88,9 +86,7 @@ ENTRY(__ieee754_scalbf) 2: fstp %st fstp %st #ifdef PIC - call 1f -1: popl %ecx - addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ecx + LOAD_PIC_REG (cx) #endif fldl MO(nan) ret diff --git a/sysdeps/i386/fpu/e_scalbl.S b/sysdeps/i386/fpu/e_scalbl.S index 65644f8f0e..3f67d0befb 100644 --- a/sysdeps/i386/fpu/e_scalbl.S +++ b/sysdeps/i386/fpu/e_scalbl.S @@ -66,9 +66,7 @@ ENTRY(__ieee754_scalbl) /* y is -inf */ 1: fxam #ifdef PIC - call 1f -1: popl %ecx - addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ecx + LOAD_PIC_REG (cx) #endif fnstsw movl 12(%esp), %edx @@ -88,9 +86,7 @@ ENTRY(__ieee754_scalbl) 2: fstp %st fstp %st #ifdef PIC - call 1f -1: popl %ecx - addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ecx + LOAD_PIC_REG (cx) #endif fldl MO(nan) ret diff --git a/sysdeps/i386/fpu/s_asinh.S b/sysdeps/i386/fpu/s_asinh.S index 6c99d3b6f6..ca042b414b 100644 --- a/sysdeps/i386/fpu/s_asinh.S +++ b/sysdeps/i386/fpu/s_asinh.S @@ -1,5 +1,5 @@ /* ix87 specific implementation of arcsinh. - Copyright (C) 1996, 1997 Free Software Foundation, Inc. + Copyright (C) 1996, 1997, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. @@ -62,9 +62,7 @@ ENTRY(__asinh) fxch // |x| : log(2) ja 3f // |x| > 2^28 #ifdef PIC - call 1f -1: popl %edx - addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx + LOAD_PIC_REG (dx) #endif cmpl $0x40000000, %eax ja 5f // |x| > 2 @@ -100,9 +98,7 @@ ENTRY(__asinh) .align ALIGNARG(4) 2: #ifdef PIC - call 1f -1: popl %edx - addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx + LOAD_PIC_REG (dx) #endif jecxz 4f fchs // x diff --git a/sysdeps/i386/fpu/s_asinhf.S b/sysdeps/i386/fpu/s_asinhf.S index 32e6fd6071..d0ce6afc22 100644 --- a/sysdeps/i386/fpu/s_asinhf.S +++ b/sysdeps/i386/fpu/s_asinhf.S @@ -1,5 +1,5 @@ /* ix87 specific implementation of arcsinh. - Copyright (C) 1996, 1997, 1999 Free Software Foundation, Inc. + Copyright (C) 1996, 1997, 1999, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. @@ -62,9 +62,7 @@ ENTRY(__asinhf) fxch // |x| : log(2) ja 3f // |x| > 2^14 #ifdef PIC - call 1f -1: popl %edx - addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx + LOAD_PIC_REG (dx) #endif cmpl $0x40000000, %eax ja 5f // |x| > 2 @@ -100,9 +98,7 @@ ENTRY(__asinhf) .align ALIGNARG(4) 2: #ifdef PIC - call 1f -1: popl %edx - addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx + LOAD_PIC_REG (dx) #endif jecxz 4f fchs // x diff --git a/sysdeps/i386/fpu/s_asinhl.S b/sysdeps/i386/fpu/s_asinhl.S index 5933460f64..1040eead1c 100644 --- a/sysdeps/i386/fpu/s_asinhl.S +++ b/sysdeps/i386/fpu/s_asinhl.S @@ -1,5 +1,5 @@ /* ix87 specific implementation of arcsinh. - Copyright (C) 1996, 1997 Free Software Foundation, Inc. + Copyright (C) 1996, 1997, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. @@ -69,9 +69,7 @@ ENTRY(__asinhl) fxch // |x| : log(2) ja 3f // |x| > 2^34 #ifdef PIC - call 1f -1: popl %edx - addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx + LOAD_PIC_REG (dx) #endif cmpl $0x4000, %eax ja 5f // |x| > 2 @@ -107,9 +105,7 @@ ENTRY(__asinhl) .align ALIGNARG(4) 2: #ifdef PIC - call 1f -1: popl %edx - addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx + LOAD_PIC_REG (dx) #endif jecxz 4f fchs // x diff --git a/sysdeps/i386/fpu/s_cbrt.S b/sysdeps/i386/fpu/s_cbrt.S index c69958bb57..e180b15466 100644 --- a/sysdeps/i386/fpu/s_cbrt.S +++ b/sysdeps/i386/fpu/s_cbrt.S @@ -1,5 +1,5 @@ /* Compute cubic root of double value. - Copyright (C) 1997 Free Software Foundation, Inc. + Copyright (C) 1997, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Dirk Alboth <dirka@uni-paderborn.de> and Ulrich Drepper <drepper@cygnus.com>, 1997. @@ -89,9 +89,9 @@ ENTRY(__cbrt) #ifdef PIC pushl %ebx - call 3f -3: popl %ebx - addl $_GLOBAL_OFFSET_TABLE_+[.-3b], %ebx + cfi_adjust_cfa_offset (4) + cfi_rel_offset (ebx, 0) + LOAD_PIC_REG (bx) #endif cmpl $0x00100000, %eax @@ -178,13 +178,17 @@ ENTRY(__cbrt) fdivp %st, %st(1) /* u*(t2+2*xm)/(2*t2+xm) */ fmull MOX(16+factor,%ecx) /* u*(t2+2*xm)/(2*t2+xm)*FACT */ pushl %eax + cfi_adjust_cfa_offset (4) fildl (%esp) /* xe/3 : u*(t2+2*xm)/(2*t2+xm)*FACT */ fxch /* u*(t2+2*xm)/(2*t2+xm)*FACT : xe/3 */ fscale /* u*(t2+2*xm)/(2*t2+xm)*FACT*2^xe/3 */ popl %edx + cfi_adjust_cfa_offset (-4) #ifdef PIC movl 12(%esp), %eax popl %ebx + cfi_adjust_cfa_offset (-4) + cfi_restore (ebx) #else movl 8(%esp), %eax #endif diff --git a/sysdeps/i386/fpu/s_cbrtf.S b/sysdeps/i386/fpu/s_cbrtf.S index 03d5770efa..2ff4f6e088 100644 --- a/sysdeps/i386/fpu/s_cbrtf.S +++ b/sysdeps/i386/fpu/s_cbrtf.S @@ -1,5 +1,5 @@ /* Compute cubic root of float value. - Copyright (C) 1997 Free Software Foundation, Inc. + Copyright (C) 1997, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Dirk Alboth <dirka@uni-paderborn.de> and Ulrich Drepper <drepper@cygnus.com>, 1997. @@ -76,9 +76,9 @@ ENTRY(__cbrtf) #ifdef PIC pushl %ebx - call 3f -3: popl %ebx - addl $_GLOBAL_OFFSET_TABLE_+[.-3b], %ebx + cfi_adjust_cfa_offset (4) + cfi_rel_offset (ebx, 0) + LOAD_PIC_REG (bx) #endif cmpl $0x00800000, %eax @@ -155,13 +155,17 @@ ENTRY(__cbrtf) fdivp %st, %st(1) /* u*(t2+2*xm)/(2*t2+xm) */ fmull MOX(16+factor,%ecx) /* u*(t2+2*xm)/(2*t2+xm)*FACT */ pushl %eax + cfi_adjust_cfa_offset (4) fildl (%esp) /* xe/3 : u*(t2+2*xm)/(2*t2+xm)*FACT */ fxch /* u*(t2+2*xm)/(2*t2+xm)*FACT : xe/3 */ fscale /* u*(t2+2*xm)/(2*t2+xm)*FACT*2^xe/3 */ popl %edx + cfi_adjust_cfa_offset (-4) #ifdef PIC movl 8(%esp), %eax popl %ebx + cfi_adjust_cfa_offset (-4) + cfi_restore (ebx) #else movl 4(%esp), %eax #endif diff --git a/sysdeps/i386/fpu/s_cbrtl.S b/sysdeps/i386/fpu/s_cbrtl.S index f9dac170e0..637ad729c1 100644 --- a/sysdeps/i386/fpu/s_cbrtl.S +++ b/sysdeps/i386/fpu/s_cbrtl.S @@ -1,5 +1,5 @@ /* Compute cubic root of long double value. - Copyright (C) 1997 Free Software Foundation, Inc. + Copyright (C) 1997, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Dirk Alboth <dirka@uni-paderborn.de> and Ulrich Drepper <drepper@cygnus.com>, 1997. @@ -108,9 +108,9 @@ ENTRY(__cbrtl) #ifdef PIC pushl %ebx - call 3f -3: popl %ebx - addl $_GLOBAL_OFFSET_TABLE_+[.-3b], %ebx + cfi_adjust_cfa_offset (4) + cfi_rel_offset (ebx, 0) + LOAD_PIC_REG (bx) #endif cmpl $0, %eax @@ -206,13 +206,17 @@ ENTRY(__cbrtl) fldt MOX(32+factor,%ecx) fmulp /* u*(t2+2*xm)/(2*t2+xm)*FACT */ pushl %eax + cfi_adjust_cfa_offset (4) fildl (%esp) /* xe/3 : u*(t2+2*xm)/(2*t2+xm)*FACT */ fxch /* u*(t2+2*xm)/(2*t2+xm)*FACT : xe/3 */ fscale /* u*(t2+2*xm)/(2*t2+xm)*FACT*2^xe/3 */ popl %edx + cfi_adjust_cfa_offset (-4) #ifdef PIC movl 16(%esp), %eax popl %ebx + cfi_adjust_cfa_offset (-4) + cfi_restore (ebx) #else movl 12(%esp), %eax #endif diff --git a/sysdeps/i386/fpu/s_cexp.S b/sysdeps/i386/fpu/s_cexp.S index 50d17aea11..47e3eb66a6 100644 --- a/sysdeps/i386/fpu/s_cexp.S +++ b/sysdeps/i386/fpu/s_cexp.S @@ -1,5 +1,5 @@ /* ix87 specific implementation of complex exponential function for double. - Copyright (C) 1997 Free Software Foundation, Inc. + Copyright (C) 1997, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. @@ -71,9 +71,7 @@ ENTRY(__cexp) fnstsw fldl 16(%esp) /* y : x */ #ifdef PIC - call 1f -1: popl %ecx - addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ecx + LOAD_PIC_REG (cx) #endif movb %ah, %dh andb $0x45, %ah diff --git a/sysdeps/i386/fpu/s_cexpf.S b/sysdeps/i386/fpu/s_cexpf.S index 396e056135..f116854096 100644 --- a/sysdeps/i386/fpu/s_cexpf.S +++ b/sysdeps/i386/fpu/s_cexpf.S @@ -1,5 +1,5 @@ /* ix87 specific implementation of complex exponential function for double. - Copyright (C) 1997 Free Software Foundation, Inc. + Copyright (C) 1997, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. @@ -71,9 +71,7 @@ ENTRY(__cexpf) fnstsw flds 8(%esp) /* y : x */ #ifdef PIC - call 1f -1: popl %ecx - addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ecx + LOAD_PIC_REG (cx) #endif movb %ah, %dh andb $0x45, %ah @@ -114,10 +112,13 @@ ENTRY(__cexpf) fmulp %st, %st(3) /* sin(y) : e^x : e^x * cos(y) */ fmulp %st, %st(1) /* e^x * sin(y) : e^x * cos(y) */ subl $8, %esp + cfi_adjust_cfa_offset (8) fstps 4(%esp) fstps (%esp) popl %eax + cfi_adjust_cfa_offset (-4) popl %edx + cfi_adjust_cfa_offset (-4) ret /* We have to reduce the argument to fsincos. */ @@ -133,10 +134,13 @@ ENTRY(__cexpf) fmulp %st, %st(3) fmulp %st, %st(1) subl $8, %esp + cfi_adjust_cfa_offset (8) fstps 4(%esp) fstps (%esp) popl %eax + cfi_adjust_cfa_offset (-4) popl %edx + cfi_adjust_cfa_offset (-4) ret /* The real part is +-inf. We must make further differences. */ @@ -210,12 +214,14 @@ ENTRY(__cexpf) +-Inf+-0i. */ .align ALIGNARG(4) 4: subl $4, %esp + cfi_adjust_cfa_offset (4) fstps (%esp) shrl $6, %edx fstp %st(0) andl $8, %edx movl MOX(huge_nan_null_null,%edx,1), %eax popl %edx + cfi_adjust_cfa_offset (-4) ret /* The real part is +-Inf, the imaginary is also is not finite. */ diff --git a/sysdeps/i386/fpu/s_cexpl.S b/sysdeps/i386/fpu/s_cexpl.S index cbc7c99f0e..8bb0680bce 100644 --- a/sysdeps/i386/fpu/s_cexpl.S +++ b/sysdeps/i386/fpu/s_cexpl.S @@ -1,5 +1,5 @@ /* ix87 specific implementation of complex exponential function for double. - Copyright (C) 1997 Free Software Foundation, Inc. + Copyright (C) 1997, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. @@ -71,9 +71,7 @@ ENTRY(__cexpl) fnstsw fldt 20(%esp) /* y : x */ #ifdef PIC - call 1f -1: popl %ecx - addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ecx + LOAD_PIC_REG (cx) #endif movb %ah, %dh andb $0x45, %ah diff --git a/sysdeps/i386/fpu/s_expm1.S b/sysdeps/i386/fpu/s_expm1.S index 35e1ff6693..e761183639 100644 --- a/sysdeps/i386/fpu/s_expm1.S +++ b/sysdeps/i386/fpu/s_expm1.S @@ -1,5 +1,5 @@ /* ix87 specific implementation of exp(x)-1. - Copyright (C) 1996, 1997 Free Software Foundation, Inc. + Copyright (C) 1996, 1997, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. Based on code by John C. Bowman <bowman@ipp-garching.mpg.de>. @@ -56,9 +56,7 @@ ENTRY(__expm1) cmpb $0x40, %ch je 3f // If +-0, jump. #ifdef PIC - call 1f -1: popl %edx - addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx + LOAD_PIC_REG (dx) #endif cmpb $0x05, %ch je 2f // If +-Inf, jump. diff --git a/sysdeps/i386/fpu/s_expm1f.S b/sysdeps/i386/fpu/s_expm1f.S index c2c64f0748..88adb75b86 100644 --- a/sysdeps/i386/fpu/s_expm1f.S +++ b/sysdeps/i386/fpu/s_expm1f.S @@ -1,5 +1,5 @@ /* ix87 specific implementation of exp(x)-1. - Copyright (C) 1996, 1997 Free Software Foundation, Inc. + Copyright (C) 1996, 1997, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. Based on code by John C. Bowman <bowman@ipp-garching.mpg.de>. @@ -56,9 +56,7 @@ ENTRY(__expm1f) cmpb $0x40, %ch je 3f // If +-0, jump. #ifdef PIC - call 1f -1: popl %edx - addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx + LOAD_PIC_REG (dx) #endif cmpb $0x05, %ch je 2f // If +-Inf, jump. diff --git a/sysdeps/i386/fpu/s_expm1l.S b/sysdeps/i386/fpu/s_expm1l.S index 4d491c02f8..2dc379b790 100644 --- a/sysdeps/i386/fpu/s_expm1l.S +++ b/sysdeps/i386/fpu/s_expm1l.S @@ -1,5 +1,5 @@ /* ix87 specific implementation of exp(x)-1. - Copyright (C) 1996, 1997, 2002 Free Software Foundation, Inc. + Copyright (C) 1996, 1997, 2002, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. Based on code by John C. Bowman <bowman@ipp-garching.mpg.de>. @@ -56,9 +56,7 @@ ENTRY(__expm1l) cmpb $0x40, %ch je 3f // If +-0, jump. #ifdef PIC - call 1f -1: popl %edx - addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx + LOAD_PIC_REG (dx) #endif cmpb $0x05, %ch je 2f // If +-Inf, jump. diff --git a/sysdeps/i386/fpu/s_frexp.S b/sysdeps/i386/fpu/s_frexp.S index 563105a917..cfc822106e 100644 --- a/sysdeps/i386/fpu/s_frexp.S +++ b/sysdeps/i386/fpu/s_frexp.S @@ -1,5 +1,5 @@ /* ix87 specific frexp implementation for double. - Copyright (C) 1997, 2000 Free Software Foundation, Inc. + Copyright (C) 1997, 2000, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. @@ -63,9 +63,7 @@ ENTRY (BP_SYM (__frexp)) fldl VAL0(%esp) #ifdef PIC - call 3f -3: popl %edx - addl $_GLOBAL_OFFSET_TABLE_+[.-3b], %edx + LOAD_PIC_REG (dx) #endif fmull MO(two54) movl $-54, %ecx diff --git a/sysdeps/i386/fpu/s_frexpf.S b/sysdeps/i386/fpu/s_frexpf.S index 00c4ab5b8e..8640bbc223 100644 --- a/sysdeps/i386/fpu/s_frexpf.S +++ b/sysdeps/i386/fpu/s_frexpf.S @@ -1,5 +1,5 @@ /* ix87 specific frexp implementation for float. - Copyright (C) 1997, 2000 Free Software Foundation, Inc. + Copyright (C) 1997, 2000, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. @@ -60,9 +60,7 @@ ENTRY (BP_SYM (__frexpf)) flds VAL(%esp) #ifdef PIC - call 3f -3: popl %edx - addl $_GLOBAL_OFFSET_TABLE_+[.-3b], %edx + LOAD_PIC_REG (dx) #endif fmuls MO(two25) movl $-25, %ecx diff --git a/sysdeps/i386/fpu/s_frexpl.S b/sysdeps/i386/fpu/s_frexpl.S index 1417507ded..60ae57ee3e 100644 --- a/sysdeps/i386/fpu/s_frexpl.S +++ b/sysdeps/i386/fpu/s_frexpl.S @@ -1,5 +1,5 @@ /* ix87 specific frexp implementation for long double. - Copyright (C) 1997, 2000, 2001 Free Software Foundation, Inc. + Copyright (C) 1997, 2000, 2001, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. @@ -65,9 +65,7 @@ ENTRY (BP_SYM (__frexpl)) fldt VAL0(%esp) #ifdef PIC - call 3f -3: popl %edx - addl $_GLOBAL_OFFSET_TABLE_+[.-3b], %edx + LOAD_PIC_REG (dx) #endif fmull MO(two64) /* It's not necessary to use a 80bit factor */ diff --git a/sysdeps/i386/fpu/s_ilogb.S b/sysdeps/i386/fpu/s_ilogb.S index 68d9c1a680..0cf1ad7419 100644 --- a/sysdeps/i386/fpu/s_ilogb.S +++ b/sysdeps/i386/fpu/s_ilogb.S @@ -21,11 +21,13 @@ ENTRY(__ilogb) fxtract pushl %eax + cfi_adjust_cfa_offset (4) fstp %st fistpl (%esp) fwait popl %eax + cfi_adjust_cfa_offset (-4) ret diff --git a/sysdeps/i386/fpu/s_ilogbf.S b/sysdeps/i386/fpu/s_ilogbf.S index 521afe2b60..99e53edd75 100644 --- a/sysdeps/i386/fpu/s_ilogbf.S +++ b/sysdeps/i386/fpu/s_ilogbf.S @@ -21,11 +21,13 @@ ENTRY(__ilogbf) fxtract pushl %eax + cfi_adjust_cfa_offset (4) fstp %st fistpl (%esp) fwait popl %eax + cfi_adjust_cfa_offset (-4) ret diff --git a/sysdeps/i386/fpu/s_ilogbl.S b/sysdeps/i386/fpu/s_ilogbl.S index ed547bdc8b..1f559b311e 100644 --- a/sysdeps/i386/fpu/s_ilogbl.S +++ b/sysdeps/i386/fpu/s_ilogbl.S @@ -22,11 +22,13 @@ ENTRY(__ilogbl) fxtract pushl %eax + cfi_adjust_cfa_offset (4) fstp %st fistpl (%esp) fwait popl %eax + cfi_adjust_cfa_offset (-4) ret diff --git a/sysdeps/i386/fpu/s_llrint.S b/sysdeps/i386/fpu/s_llrint.S index e8e5ecee09..23bbec6024 100644 --- a/sysdeps/i386/fpu/s_llrint.S +++ b/sysdeps/i386/fpu/s_llrint.S @@ -1,6 +1,6 @@ /* Round argument to nearest integral value according to current rounding direction. - Copyright (C) 1997 Free Software Foundation, Inc. + Copyright (C) 1997, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. @@ -25,10 +25,13 @@ ENTRY(__llrint) fldl 4(%esp) subl $8, %esp + cfi_adjust_cfa_offset (8) fistpll (%esp) fwait popl %eax + cfi_adjust_cfa_offset (-4) popl %edx + cfi_adjust_cfa_offset (-4) ret END(__llrint) weak_alias (__llrint, llrint) diff --git a/sysdeps/i386/fpu/s_llrintf.S b/sysdeps/i386/fpu/s_llrintf.S index 1deabc4f54..3de73f6661 100644 --- a/sysdeps/i386/fpu/s_llrintf.S +++ b/sysdeps/i386/fpu/s_llrintf.S @@ -1,6 +1,6 @@ /* Round argument to nearest integral value according to current rounding direction. - Copyright (C) 1997 Free Software Foundation, Inc. + Copyright (C) 1997, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. @@ -25,10 +25,13 @@ ENTRY(__llrintf) flds 4(%esp) subl $8, %esp + cfi_adjust_cfa_offset (8) fistpll (%esp) fwait popl %eax + cfi_adjust_cfa_offset (-4) popl %edx + cfi_adjust_cfa_offset (-4) ret END(__llrintf) weak_alias (__llrintf, llrintf) diff --git a/sysdeps/i386/fpu/s_llrintl.S b/sysdeps/i386/fpu/s_llrintl.S index b34d79a5d8..f6545e9fcd 100644 --- a/sysdeps/i386/fpu/s_llrintl.S +++ b/sysdeps/i386/fpu/s_llrintl.S @@ -1,6 +1,6 @@ /* Round argument to nearest integral value according to current rounding direction. - Copyright (C) 1997 Free Software Foundation, Inc. + Copyright (C) 1997, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. @@ -25,10 +25,13 @@ ENTRY(__llrintl) fldt 4(%esp) subl $8, %esp + cfi_adjust_cfa_offset (8) fistpll (%esp) fwait popl %eax + cfi_adjust_cfa_offset (-4) popl %edx + cfi_adjust_cfa_offset (-4) ret END(__llrintl) weak_alias (__llrintl, llrintl) diff --git a/sysdeps/i386/fpu/s_log1p.S b/sysdeps/i386/fpu/s_log1p.S index d3bc3d7251..ec777fdf93 100644 --- a/sysdeps/i386/fpu/s_log1p.S +++ b/sysdeps/i386/fpu/s_log1p.S @@ -31,9 +31,7 @@ ENTRY(__log1p) fldl 4(%esp) #ifdef PIC - call 1f -1: popl %edx - addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx + LOAD_PIC_REG (dx) #endif fxam diff --git a/sysdeps/i386/fpu/s_log1pf.S b/sysdeps/i386/fpu/s_log1pf.S index d5283fcfee..6919ac902e 100644 --- a/sysdeps/i386/fpu/s_log1pf.S +++ b/sysdeps/i386/fpu/s_log1pf.S @@ -31,9 +31,7 @@ ENTRY(__log1pf) flds 4(%esp) #ifdef PIC - call 1f -1: popl %edx - addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx + LOAD_PIC_REG (dx) #endif fxam diff --git a/sysdeps/i386/fpu/s_log1pl.S b/sysdeps/i386/fpu/s_log1pl.S index 26c407b606..4bca67d6b0 100644 --- a/sysdeps/i386/fpu/s_log1pl.S +++ b/sysdeps/i386/fpu/s_log1pl.S @@ -36,9 +36,7 @@ ENTRY(__log1pl) fldt 4(%esp) #ifdef PIC - call 1f -1: popl %edx - addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx + LOAD_PIC_REG (dx) #endif fxam diff --git a/sysdeps/i386/fpu/s_lrint.S b/sysdeps/i386/fpu/s_lrint.S index a15f54f1da..799875b335 100644 --- a/sysdeps/i386/fpu/s_lrint.S +++ b/sysdeps/i386/fpu/s_lrint.S @@ -1,6 +1,6 @@ /* Round argument to nearest integral value according to current rounding direction. - Copyright (C) 1997 Free Software Foundation, Inc. + Copyright (C) 1997, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. @@ -25,9 +25,11 @@ ENTRY(__lrint) fldl 4(%esp) subl $4, %esp + cfi_adjust_cfa_offset (4) fistpl (%esp) fwait popl %eax + cfi_adjust_cfa_offset (-4) ret END(__lrint) weak_alias (__lrint, lrint) diff --git a/sysdeps/i386/fpu/s_lrintf.S b/sysdeps/i386/fpu/s_lrintf.S index 0f15e64de2..2aa1a4e83d 100644 --- a/sysdeps/i386/fpu/s_lrintf.S +++ b/sysdeps/i386/fpu/s_lrintf.S @@ -1,6 +1,6 @@ /* Round argument to nearest integral value according to current rounding direction. - Copyright (C) 1997 Free Software Foundation, Inc. + Copyright (C) 1997, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. @@ -25,9 +25,11 @@ ENTRY(__lrintf) flds 4(%esp) subl $4, %esp + cfi_adjust_cfa_offset (4) fistpl (%esp) fwait popl %eax + cfi_adjust_cfa_offset (-4) ret END(__lrintf) weak_alias (__lrintf, lrintf) diff --git a/sysdeps/i386/fpu/s_lrintl.S b/sysdeps/i386/fpu/s_lrintl.S index 90313d612c..c0211c11da 100644 --- a/sysdeps/i386/fpu/s_lrintl.S +++ b/sysdeps/i386/fpu/s_lrintl.S @@ -1,6 +1,6 @@ /* Round argument to nearest integral value according to current rounding direction. - Copyright (C) 1997 Free Software Foundation, Inc. + Copyright (C) 1997, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. @@ -25,9 +25,11 @@ ENTRY(__lrintl) fldt 4(%esp) subl $4, %esp + cfi_adjust_cfa_offset (4) fistpl (%esp) fwait popl %eax + cfi_adjust_cfa_offset (-4) ret END(__lrintl) weak_alias (__lrintl, lrintl) diff --git a/sysdeps/i386/fpu/s_nearbyint.S b/sysdeps/i386/fpu/s_nearbyint.S index d8bb382d9e..52909139a9 100644 --- a/sysdeps/i386/fpu/s_nearbyint.S +++ b/sysdeps/i386/fpu/s_nearbyint.S @@ -9,7 +9,9 @@ ENTRY(__nearbyint) fldl 4(%esp) pushl %eax + cfi_adjust_cfa_offset (4) pushl %ecx + cfi_adjust_cfa_offset (4) fnstcw (%esp) movl (%esp), %eax orl $0x20, %eax @@ -19,7 +21,9 @@ ENTRY(__nearbyint) fclex fldcw (%esp) popl %ecx + cfi_adjust_cfa_offset (-4) popl %eax + cfi_adjust_cfa_offset (-4) ret END (__nearbyint) weak_alias (__nearbyint, nearbyint) diff --git a/sysdeps/i386/fpu/s_nearbyintf.S b/sysdeps/i386/fpu/s_nearbyintf.S index 21858650e2..6a6b1d6c2b 100644 --- a/sysdeps/i386/fpu/s_nearbyintf.S +++ b/sysdeps/i386/fpu/s_nearbyintf.S @@ -9,7 +9,9 @@ ENTRY(__nearbyintf) flds 4(%esp) pushl %eax + cfi_adjust_cfa_offset (4) pushl %ecx + cfi_adjust_cfa_offset (4) fnstcw (%esp) movl (%esp), %eax orl $0x20, %eax @@ -19,7 +21,9 @@ ENTRY(__nearbyintf) fclex fldcw (%esp) popl %ecx + cfi_adjust_cfa_offset (-4) popl %eax + cfi_adjust_cfa_offset (-4) ret END (__nearbyintf) weak_alias (__nearbyintf, nearbyintf) diff --git a/sysdeps/i386/fpu/s_nearbyintl.S b/sysdeps/i386/fpu/s_nearbyintl.S index d74dacb990..819af63a8d 100644 --- a/sysdeps/i386/fpu/s_nearbyintl.S +++ b/sysdeps/i386/fpu/s_nearbyintl.S @@ -9,7 +9,9 @@ ENTRY(__nearbyintl) fldt 4(%esp) pushl %eax + cfi_adjust_cfa_offset (4) pushl %ecx + cfi_adjust_cfa_offset (4) fnstcw (%esp) movl (%esp), %eax orl $0x20, %eax @@ -19,7 +21,9 @@ ENTRY(__nearbyintl) fclex fldcw (%esp) popl %ecx + cfi_adjust_cfa_offset (-4) popl %eax + cfi_adjust_cfa_offset (-4) ret END (__nearbyintl) weak_alias (__nearbyintl, nearbyintl) diff --git a/sysdeps/i386/i586/addmul_1.S b/sysdeps/i386/i586/addmul_1.S index 18955e36d9..1890c5dfa1 100644 --- a/sysdeps/i386/i586/addmul_1.S +++ b/sysdeps/i386/i586/addmul_1.S @@ -38,13 +38,13 @@ ENTRY (BP_SYM (__mpn_addmul_1)) ENTER - pushl %edi + pushl %res_ptr cfi_adjust_cfa_offset (4) - pushl %esi + pushl %s1_ptr cfi_adjust_cfa_offset (4) pushl %ebp cfi_adjust_cfa_offset (4) - pushl %ebx + pushl %s2_limb cfi_adjust_cfa_offset (4) movl RES(%esp), %res_ptr @@ -86,18 +86,18 @@ L(oop): adcl $0, %ebp adcl $0, %ebp movl %ebp, %eax - popl %ebx + popl %s2_limb cfi_adjust_cfa_offset (-4) - cfi_restore (ebx) + cfi_restore (s2_limb) popl %ebp cfi_adjust_cfa_offset (-4) cfi_restore (ebp) - popl %esi + popl %s1_ptr cfi_adjust_cfa_offset (-4) - cfi_restore (esi) - popl %edi + cfi_restore (s1_ptr) + popl %res_ptr cfi_adjust_cfa_offset (-4) - cfi_restore (edi) + cfi_restore (res_ptr) LEAVE ret diff --git a/sysdeps/i386/i586/memcpy.S b/sysdeps/i386/i586/memcpy.S index 1fa267ef50..6ab457fc55 100644 --- a/sysdeps/i386/i586/memcpy.S +++ b/sysdeps/i386/i586/memcpy.S @@ -46,7 +46,7 @@ ENTRY (BP_SYM (memcpy)) movl DEST(%esp), %edi cfi_rel_offset (edi, 4) movl SRC(%esp), %esi - cfi_rel_offset (esi, 4) + cfi_rel_offset (esi, 0) movl LEN(%esp), %ecx CHECK_BOUNDS_BOTH_WIDE (%edi, DEST(%esp), %ecx) CHECK_BOUNDS_BOTH_WIDE (%esi, SRC(%esp), %ecx) diff --git a/sysdeps/i386/i586/mul_1.S b/sysdeps/i386/i586/mul_1.S index b537c709a3..15765d758f 100644 --- a/sysdeps/i386/i586/mul_1.S +++ b/sysdeps/i386/i586/mul_1.S @@ -38,13 +38,13 @@ ENTRY (BP_SYM (__mpn_mul_1)) ENTER - pushl %edi + pushl %res_ptr cfi_adjust_cfa_offset (4) - pushl %esi + pushl %s1_ptr cfi_adjust_cfa_offset (4) pushl %ebp cfi_adjust_cfa_offset (4) - pushl %ebx + pushl %s2_limb cfi_adjust_cfa_offset (4) movl RES(%esp), %res_ptr @@ -82,18 +82,18 @@ L(oop): adcl $0, %ebp adcl $0, %ebp movl %ebp, %eax - popl %ebx + popl %s2_limb cfi_adjust_cfa_offset (-4) - cfi_restore (ebx) + cfi_restore (s2_limb) popl %ebp cfi_adjust_cfa_offset (-4) cfi_restore (ebp) - popl %esi + popl %s1_ptr cfi_adjust_cfa_offset (-4) - cfi_restore (esi) - popl %edi + cfi_restore (s1_ptr) + popl %res_ptr cfi_adjust_cfa_offset (-4) - cfi_restore (edi) + cfi_restore (res_ptr) LEAVE ret diff --git a/sysdeps/i386/i586/rshift.S b/sysdeps/i386/i586/rshift.S index 29eded369b..7b88289d3e 100644 --- a/sysdeps/i386/i586/rshift.S +++ b/sysdeps/i386/i586/rshift.S @@ -165,7 +165,7 @@ L(end2): cfi_rel_offset (edi, 12) cfi_rel_offset (esi, 8) cfi_rel_offset (ebp, 4) - cfi_rel_offset (ebx, 3) + cfi_rel_offset (ebx, 0) L(special): leal -4(%edi,%ebx,4),%edi leal -4(%esi,%ebx,4),%esi diff --git a/sysdeps/i386/i586/sub_n.S b/sysdeps/i386/i586/sub_n.S index 1c40a80082..7c32c1adb6 100644 --- a/sysdeps/i386/i586/sub_n.S +++ b/sysdeps/i386/i586/sub_n.S @@ -56,8 +56,8 @@ 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 + cfi_rel_offset (ebp, 4) decl %ecx movl %ecx,%edx diff --git a/sysdeps/i386/i586/submul_1.S b/sysdeps/i386/i586/submul_1.S index b9e578fde4..e8bc6478c1 100644 --- a/sysdeps/i386/i586/submul_1.S +++ b/sysdeps/i386/i586/submul_1.S @@ -38,13 +38,13 @@ ENTRY (BP_SYM (__mpn_submul_1)) ENTER - pushl %edi + pushl %res_ptr cfi_adjust_cfa_offset (4) - pushl %esi + pushl %s1_ptr cfi_adjust_cfa_offset (4) pushl %ebp cfi_adjust_cfa_offset (4) - pushl %ebx + pushl %s2_limb cfi_adjust_cfa_offset (4) movl RES(%esp), %res_ptr @@ -86,18 +86,18 @@ L(oop): adcl $0, %ebp adcl $0, %ebp movl %ebp, %eax - popl %ebx + popl %s2_limb cfi_adjust_cfa_offset (-4) - cfi_restore (ebx) + cfi_restore (s2_limb) popl %ebp cfi_adjust_cfa_offset (-4) cfi_restore (ebp) - popl %esi + popl %s1_ptr cfi_adjust_cfa_offset (-4) - cfi_restore (esi) - popl %edi + cfi_restore (s1_ptr) + popl %res_ptr cfi_adjust_cfa_offset (-4) - cfi_restore (edi) + cfi_restore (res_ptr) LEAVE ret diff --git a/sysdeps/i386/i686/memcmp.S b/sysdeps/i386/i686/memcmp.S index 4f1c7413fc..4bd5394bec 100644 --- a/sysdeps/i386/i686/memcmp.S +++ b/sysdeps/i386/i686/memcmp.S @@ -29,7 +29,8 @@ #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 + cfi_restore (ebx); LEAVE; ret; \ + cfi_adjust_cfa_offset (4); cfi_rel_offset (ebx, 0); /* Load an entry in a jump table into EBX. TABLE is a jump table with relative offsets. INDEX is a register contains the index @@ -79,6 +80,8 @@ L(neq): sbbl $-1, %eax RETURN + cfi_adjust_cfa_offset (4) + cfi_rel_offset (ebx, 0) L(not_1): jl L(bye) /* LEN == 0 */ @@ -137,8 +140,9 @@ L(0bytes): xorl %eax, %eax RETURN - cfi_adjust_cfa_offset (4) + cfi_adjust_cfa_offset (8) cfi_rel_offset (esi, 0) + cfi_rel_offset (ebx, 4) L(29bytes): movl -29(%esi), %eax movl -29(%edx), %ecx @@ -184,8 +188,9 @@ L(1bytes): xorl %eax, %eax RETURN - cfi_adjust_cfa_offset (4) + cfi_adjust_cfa_offset (8) cfi_rel_offset (esi, 0) + cfi_rel_offset (ebx, 4) L(30bytes): movl -30(%esi), %eax movl -30(%edx), %ecx @@ -234,8 +239,9 @@ L(2bytes): xorl %eax, %eax RETURN - cfi_adjust_cfa_offset (4) + cfi_adjust_cfa_offset (8) cfi_rel_offset (esi, 0) + cfi_rel_offset (ebx, 4) L(31bytes): movl -31(%esi), %eax movl -31(%edx), %ecx @@ -287,8 +293,9 @@ L(3bytes): xorl %eax, %eax RETURN - cfi_adjust_cfa_offset (4) + cfi_adjust_cfa_offset (8) cfi_rel_offset (esi, 0) + cfi_rel_offset (ebx, 4) ALIGN (4) /* ECX >= 32. */ L(32bytesormore): diff --git a/sysdeps/i386/i686/memmove.S b/sysdeps/i386/i686/memmove.S index a433622246..b93b5c729f 100644 --- a/sysdeps/i386/i686/memmove.S +++ b/sysdeps/i386/i686/memmove.S @@ -79,6 +79,10 @@ ENTRY (BP_SYM (memmove)) LEAVE RET_PTR + cfi_adjust_cfa_offset (4) + cfi_rel_offset (edi, 0) + cfi_register (esi, edx) + /* Backward copying. */ 3: std leal -1(%edi, %ecx), %edi diff --git a/sysdeps/i386/mul_1.S b/sysdeps/i386/mul_1.S index 2de8783816..0d0c07e7cf 100644 --- a/sysdeps/i386/mul_1.S +++ b/sysdeps/i386/mul_1.S @@ -38,13 +38,13 @@ ENTRY (BP_SYM (__mpn_mul_1)) ENTER - pushl %edi + pushl %res_ptr cfi_adjust_cfa_offset (4) - pushl %esi + pushl %s1_ptr cfi_adjust_cfa_offset (4) pushl %ebp cfi_adjust_cfa_offset (4) - pushl %ebx + pushl %s2_limb cfi_adjust_cfa_offset (4) movl RES(%esp), %res_ptr @@ -78,18 +78,18 @@ L(oop): jnz L(oop) movl %ebp, %eax - popl %ebx + popl %s2_limb cfi_adjust_cfa_offset (-4) - cfi_restore (ebx) + cfi_restore (s2_limb) popl %ebp cfi_adjust_cfa_offset (-4) cfi_restore (ebp) - popl %esi + popl %s1_ptr cfi_adjust_cfa_offset (-4) - cfi_restore (esi) - popl %edi + cfi_restore (s1_ptr) + popl %res_ptr cfi_adjust_cfa_offset (-4) - cfi_restore (edi) + cfi_restore (res_ptr) LEAVE ret diff --git a/sysdeps/i386/strtok.S b/sysdeps/i386/strtok.S index e45db61287..88b343b6fe 100644 --- a/sysdeps/i386/strtok.S +++ b/sysdeps/i386/strtok.S @@ -81,7 +81,7 @@ ENTRY (BP_SYM (FUNCTION)) cfi_adjust_cfa_offset (4) call L(here) cfi_adjust_cfa_offset (4) - cfi_rel_offset (ebx, 4) + cfi_rel_offset (ebx, 0) L(here): popl %ebx cfi_adjust_cfa_offset (-4) diff --git a/sysdeps/i386/sub_n.S b/sysdeps/i386/sub_n.S index c9f64181c6..e1e62b89d3 100644 --- a/sysdeps/i386/sub_n.S +++ b/sysdeps/i386/sub_n.S @@ -67,10 +67,12 @@ ENTRY (BP_SYM (__mpn_sub_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 diff --git a/sysdeps/i386/submul_1.S b/sysdeps/i386/submul_1.S index f932213b99..7f8523d96d 100644 --- a/sysdeps/i386/submul_1.S +++ b/sysdeps/i386/submul_1.S @@ -46,14 +46,15 @@ ENTRY (BP_SYM (__mpn_submul_1)) cfi_adjust_cfa_offset (4) pushl %ebx cfi_adjust_cfa_offset (4) + cfi_rel_offset (edi, 12) + cfi_rel_offset (esi, 8) + cfi_rel_offset (ebp, 4) + cfi_rel_offset (ebx, 0) 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) @@ -64,7 +65,6 @@ 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 diff --git a/sysdeps/unix/sysv/linux/i386/clone.S b/sysdeps/unix/sysv/linux/i386/clone.S index 69243d5c8c..54524ec120 100644 --- a/sysdeps/unix/sysv/linux/i386/clone.S +++ b/sysdeps/unix/sysv/linux/i386/clone.S @@ -88,6 +88,7 @@ ENTRY (BP_SYM (__clone)) cfi_adjust_cfa_offset (4) pushl %edi cfi_adjust_cfa_offset (4) + movl TLS+12(%esp),%esi cfi_rel_offset (esi, 4) movl PTID+12(%esp),%edx @@ -102,16 +103,14 @@ ENTRY (BP_SYM (__clone)) movl %ebx, (%ecx) #endif + /* End FDE now, because in the child the unwind info will be + wrong. */ + cfi_endproc + int $0x80 popl %edi - cfi_adjust_cfa_offset (-4) - cfi_restore (edi) popl %esi - cfi_adjust_cfa_offset (-4) - cfi_restore (esi) popl %ebx - cfi_adjust_cfa_offset (-4) - cfi_restore (ebx) test %eax,%eax jl SYSCALL_ERROR_LABEL @@ -131,10 +130,8 @@ L(haspid): call *%ebx #ifdef PIC call L(here) - cfi_adjust_cfa_offset (4) L(here): popl %ebx - cfi_adjust_cfa_offset (-4) addl $_GLOBAL_OFFSET_TABLE_+[.-L(here)], %ebx #endif movl %eax, %ebx @@ -156,6 +153,7 @@ L(nomoregetpid): .previous #endif + cfi_startproc PSEUDO_END (BP_SYM (__clone)) weak_alias (BP_SYM (__clone), BP_SYM (clone)) diff --git a/sysdeps/unix/sysv/linux/i386/getcontext.S b/sysdeps/unix/sysv/linux/i386/getcontext.S index 68541d5d80..76ba6047c1 100644 --- a/sysdeps/unix/sysv/linux/i386/getcontext.S +++ b/sysdeps/unix/sysv/linux/i386/getcontext.S @@ -1,5 +1,5 @@ /* Save current context. - Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. + Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2001. @@ -63,12 +63,16 @@ ENTRY(__getcontext) /* Save the current signal mask. */ pushl %ebx + cfi_adjust_cfa_offset (4) + cfi_rel_offset (ebx, 0) leal oSIGMASK(%eax), %edx xorl %ecx, %ecx movl $SIG_BLOCK, %ebx movl $__NR_sigprocmask, %eax ENTER_KERNEL popl %ebx + cfi_adjust_cfa_offset (-4) + cfi_restore (ebx) cmpl $-4095, %eax /* Check %eax for error. */ jae SYSCALL_ERROR_LABEL /* Jump to error handler if error. */ diff --git a/sysdeps/unix/sysv/linux/i386/makecontext.S b/sysdeps/unix/sysv/linux/i386/makecontext.S index ec49b74b9a..03dc648c59 100644 --- a/sysdeps/unix/sysv/linux/i386/makecontext.S +++ b/sysdeps/unix/sysv/linux/i386/makecontext.S @@ -1,5 +1,5 @@ /* Create new context. - Copyright (C) 2001,02 Free Software Foundation, Inc. + Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2001. @@ -68,7 +68,9 @@ ENTRY(__makecontext) below). */ #ifdef PIC call 1f + cfi_adjust_cfa_offset (4) 1: popl %ecx + cfi_adjust_cfa_offset (-4) addl $L(exitcode)-1b, %ecx movl %ecx, (%edx) #else @@ -83,6 +85,7 @@ ENTRY(__makecontext) the context 'makecontext' manipulated at the time of the 'makecontext' call. If the pointer is NULL the process must terminate. */ + cfi_endproc L(exitcode): /* This removes the parameters passed to the function given to 'makecontext' from the stack. EBX contains the number of @@ -108,6 +111,7 @@ L(exitcode): /* The 'exit' call should never return. In case it does cause the process to terminate. */ hlt + cfi_startproc END(__makecontext) weak_alias(__makecontext, makecontext) diff --git a/sysdeps/unix/sysv/linux/i386/mmap.S b/sysdeps/unix/sysv/linux/i386/mmap.S index 9f664de991..10f8bc75a7 100644 --- a/sysdeps/unix/sysv/linux/i386/mmap.S +++ b/sysdeps/unix/sysv/linux/i386/mmap.S @@ -26,7 +26,7 @@ ENTRY (__mmap) -/* I don't think it is worthwhile trzing to use mmap2 whenever it +/* I don't think it is worthwhile trying to use mmap2 whenever it is available. Only use it when we are sure the syscall exists. */ #ifdef __ASSUME_MMAP2_SYSCALL @@ -78,6 +78,7 @@ L(skip): /* Save registers. */ movl %ebx, %edx + cfi_register (ebx, edx) movl $SYS_ify(mmap), %eax /* System call number in %eax. */ @@ -88,6 +89,7 @@ L(skip): /* Restore registers. */ movl %edx, %ebx + cfi_restore (ebx) #endif diff --git a/sysdeps/unix/sysv/linux/i386/mmap64.S b/sysdeps/unix/sysv/linux/i386/mmap64.S index 89d9f5f356..4209453819 100644 --- a/sysdeps/unix/sysv/linux/i386/mmap64.S +++ b/sysdeps/unix/sysv/linux/i386/mmap64.S @@ -130,6 +130,7 @@ L(einval): 3: /* Save registers. */ movl %ebx, %edx + cfi_register (ebx, edx) cmpl $0, OFFHI-SVRSP(%esp) jne L(einval2) @@ -143,6 +144,7 @@ L(einval): /* Restore registers. */ movl %edx, %ebx + cfi_restore (ebx) /* If 0 > %eax > -4096 there was an error. */ cmpl $-4096, %eax @@ -154,8 +156,10 @@ L(pseudo_end): #endif ret + cfi_register (ebx, edx) L(einval2): movl %edx, %ebx + cfi_restore (ebx) movl $-EINVAL, %eax jmp SYSCALL_ERROR_LABEL #endif diff --git a/sysdeps/unix/sysv/linux/i386/setcontext.S b/sysdeps/unix/sysv/linux/i386/setcontext.S index 22469b2b85..c493cf9798 100644 --- a/sysdeps/unix/sysv/linux/i386/setcontext.S +++ b/sysdeps/unix/sysv/linux/i386/setcontext.S @@ -61,6 +61,13 @@ ENTRY(__setcontext) movl oEIP(%eax), %ecx /* Load the new stack pointer. */ + cfi_def_cfa (eax, 0) + cfi_offset (edi, oEDI) + cfi_offset (esi, oESI) + cfi_offset (ebp, oEBP) + cfi_offset (ebx, oEBX) + cfi_offset (edx, oEDX) + cfi_offset (ecx, oECX) movl oESP(%eax), %esp /* Push the return address on the new stack so we can return there. */ @@ -76,6 +83,10 @@ ENTRY(__setcontext) movl oECX(%eax), %ecx movl oEAX(%eax), %eax + /* End FDE here, we fall into another context. */ + cfi_endproc + cfi_startproc + /* The following 'ret' will pop the address of the code and jump to it. */ diff --git a/sysdeps/unix/sysv/linux/i386/sysdep.h b/sysdeps/unix/sysv/linux/i386/sysdep.h index d64d0a3a5c..a9637be33d 100644 --- a/sysdeps/unix/sysv/linux/i386/sysdep.h +++ b/sysdeps/unix/sysv/linux/i386/sysdep.h @@ -118,6 +118,7 @@ .previous # else # define SETUP_PIC_REG(reg) \ + .ifndef __i686.get_pc_thunk.reg; \ .section .gnu.linkonce.t.__i686.get_pc_thunk.reg,"ax",@progbits; \ .globl __i686.get_pc_thunk.reg; \ .hidden __i686.get_pc_thunk.reg; \ @@ -127,9 +128,13 @@ __i686.get_pc_thunk.reg: \ ret; \ .size __i686.get_pc_thunk.reg, . - __i686.get_pc_thunk.reg; \ .previous; \ + .endif; \ call __i686.get_pc_thunk.reg # endif +# define LOAD_PIC_REG(reg) \ + SETUP_PIC_REG(reg); addl $_GLOBAL_OFFSET_TABLE_, %e##reg + # if RTLD_PRIVATE_ERRNO # define SYSCALL_ERROR_HANDLER \ 0:SETUP_PIC_REG(cx); \ diff --git a/sysdeps/unix/sysv/linux/i386/vfork.S b/sysdeps/unix/sysv/linux/i386/vfork.S index e660e6b70e..eefd4b49cb 100644 --- a/sysdeps/unix/sysv/linux/i386/vfork.S +++ b/sysdeps/unix/sysv/linux/i386/vfork.S @@ -1,4 +1,4 @@ -/* Copyright (C) 1999, 2002, 2004 Free Software Foundation, Inc. +/* Copyright (C) 1999, 2002, 2004, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Andreas Schwab <schwab@gnu.org>. @@ -33,6 +33,7 @@ ENTRY (__vfork) /* Pop the return PC value into ECX. */ popl %ecx + cfi_adjust_cfa_offset (-4) #ifdef SAVE_PID SAVE_PID @@ -46,6 +47,7 @@ ENTRY (__vfork) disturbs the branch target cache. Instead push the return address back on the stack. */ pushl %ecx + cfi_adjust_cfa_offset (4) #ifdef RESTORE_PID RESTORE_PID |