public inbox for libc-hacker@sourceware.org
 help / color / mirror / Atom feed
* [PATCH] PPC32 cfi update part3
@ 2006-01-04 23:53 Steven Munroe
  2006-01-07  3:58 ` Ulrich Drepper
  2006-08-13  8:15 ` Andreas Schwab
  0 siblings, 2 replies; 5+ messages in thread
From: Steven Munroe @ 2006-01-04 23:53 UTC (permalink / raw)
  To: libc-hacker, Alan Modra

[-- Attachment #1: Type: text/plain, Size: 343 bytes --]

Removed the cfi directives from the epilogue and used DW_CFA_same_value
to indicate when LR is restored from the tmp register as Alan Modra
suggested. I found that binutils 2.15 implemented .cfi_same_value but
the cfi_same_value was not defined by ./sysdeps/generic/sysdep.h so I
added that macro. I think this is better than .cfi_escape.





[-- Attachment #2: ppc32-cfi-20060103.txt --]
[-- Type: text/plain, Size: 37194 bytes --]

2006-01-03  Steven Munroe  <sjmunroe@us.ibm.com>

	* sysdeps/generic/sysdep.h (cfi_same_value): Define macro.

	* sysdeps/powerpc/powerpc32/dl-trampoline.S (_dl_runtime_resolve,
	_dl_profile_resolve): Add CFI directives for stack and LR save.
	Save LR in LRSAVE of previous frame per ABI.
	* sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S: Add CFI directives
	for LR save.
	* sysdeps/powerpc/powerpc32/fpu/s_ceil.S: Add CFI directive
	for LR save to register.
	* sysdeps/powerpc/powerpc32/fpu/s_ceilf.S: Add CFI directive
	for LR save to register.
	* sysdeps/powerpc/powerpc32/fpu/s_copysign.S: Add CFI directive
	for stack.
	* sysdeps/powerpc/powerpc32/fpu/s_floor.S: Add CFI directive
	for LR save to register.
	* sysdeps/powerpc/powerpc32/fpu/s_floorf.S: Add CFI directive
	for LR save to register.
	* sysdeps/powerpc/powerpc32/fpu/s_lround.S:  Add CFI directives
	for stack and LR save.  Don't use negative stack addressing.
	* sysdeps/powerpc/powerpc32/fpu/s_rint.S: Add CFI directive
	for LR save to register.
	* sysdeps/powerpc/powerpc32/fpu/s_rintf.S: Add CFI directive
	for LR save to register.
	* sysdeps/powerpc/powerpc32/fpu/s_round.S: Add CFI directive
	for LR save to register.
	* sysdeps/powerpc/powerpc32/fpu/s_roundf.S: Add CFI directive
	for LR save to register.
	* sysdeps/powerpc/powerpc32/fpu/s_trunc.S: Add CFI directive
	for LR save to register.
	* sysdeps/powerpc/powerpc32/fpu/s_truncf.S: Add CFI directive
	for LR save to register.
	* sysdeps/powerpc/powerpc32/fpu/setjmp-common.S: Add CFI directive
	for LR save to register.
	* sysdeps/powerpc/powerpc32/lshift.S: Add CFI directive for LR save.
	* sysdeps/powerpc/powerpc32/ppc-mcount.S: Add CFI directives for stack
	and LR save.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/brk.S: Add CFI directive
	for stack and LR save.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/clone.S: Add CFI directive
	for stack.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/getcontext-common.S:
	Add CFI directives for stack and LR save.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/makecontext.S
	(__makecontext, __novec_makecontext): Add CFI directive for LR save.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext-common.S:
	Add CFI directives for stack and LR save.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S:
	Add CFI directives for stack and LR save.

diff -urN libc24-cvstip-20060103/sysdeps/generic/sysdep.h libc24/sysdeps/generic/sysdep.h
--- libc24-cvstip-20060103/sysdeps/generic/sysdep.h	2003-08-31 12:21:03.000000000 -0500
+++ libc24/sysdeps/generic/sysdep.h	2006-01-04 16:23:38.357222576 -0600
@@ -60,6 +60,7 @@
 #  define cfi_register(r1, r2)		.cfi_register r1, r2
 #  define cfi_return_column(reg)	.cfi_return_column reg
 #  define cfi_restore(reg)		.cfi_restore reg
+#  define cfi_same_value(reg)		.cfi_same_value reg
 #  define cfi_undefined(reg)		.cfi_undefined reg
 #  define cfi_remember_state		.cfi_remember_state
 #  define cfi_restore_state		.cfi_restore_state
@@ -76,6 +77,7 @@
 #  define cfi_register(r1, r2)
 #  define cfi_return_column(reg)
 #  define cfi_restore(reg)
+#  define cfi_same_value(reg)
 #  define cfi_undefined(reg)
 #  define cfi_remember_state
 #  define cfi_restore_state
diff -urN libc24-cvstip-20060103/sysdeps/powerpc/powerpc32/dl-trampoline.S libc24/sysdeps/powerpc/powerpc32/dl-trampoline.S
--- libc24-cvstip-20060103/sysdeps/powerpc/powerpc32/dl-trampoline.S	2005-07-06 21:34:56.000000000 -0500
+++ libc24/sysdeps/powerpc/powerpc32/dl-trampoline.S	2006-01-03 14:44:31.000000000 -0600
@@ -1,5 +1,5 @@
 /* PLT trampolines.  PPC32 version.
-   Copyright (C) 2005 Free Software Foundation, Inc.
+   Copyright (C) 2005, 2006 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
@@ -14,8 +14,8 @@
 
    You should have received a copy of the GNU Lesser General Public
    License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
+   Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA
+   02110-1301 USA.  */
 
 #include <sysdep.h>
 
@@ -24,9 +24,11 @@
 	.globl _dl_runtime_resolve
 	.type _dl_runtime_resolve,@function
 _dl_runtime_resolve:
+	cfi_startproc
  # We need to save the registers used to pass parameters, and register 0,
  # which is used by _mcount; the registers are saved in a stack frame.
 	stwu r1,-64(r1)
+	cfi_adjust_cfa_offset (64)
 	stw r0,12(r1)
 	stw r3,16(r1)
 	stw r4,20(r1)
@@ -38,7 +40,8 @@
 	mflr r0
  # We also need to save some of the condition register fields
 	stw r7,32(r1)
-	stw r0,48(r1)
+	stw r0,68(r1)
+ 	cfi_offset (lr, 4)
 	stw r8,36(r1)
 	mfcr r0
 	stw r9,40(r1)
@@ -48,7 +51,7 @@
  # 'fixup' returns the address we want to branch to.
 	mtctr r3
  # Put the registers back...
-	lwz r0,48(r1)
+	lwz r0,68(r1)
 	lwz r10,44(r1)
 	lwz r9,40(r1)
 	mtlr r0
@@ -64,6 +67,7 @@
  # ...unwind the stack frame, and jump to the PLT entry we updated.
 	addi r1,r1,64
 	bctr
+	cfi_endproc
 	.size	 _dl_runtime_resolve,.-_dl_runtime_resolve
 
 #ifndef PROF
@@ -71,9 +75,11 @@
 	.globl _dl_prof_resolve
 	.type _dl_prof_resolve,@function
 _dl_prof_resolve:
+	cfi_startproc
  # We need to save the registers used to pass parameters, and register 0,
  # which is used by _mcount; the registers are saved in a stack frame.
 	stwu r1,-320(r1)
+	cfi_adjust_cfa_offset (320)
 	/* Stack layout:
 
 	  +312   stackframe
@@ -122,7 +128,8 @@
 	mflr r5
  # We also need to save some of the condition register fields.
 	stw r7,32(r1)
-	stw r5,308(r1)
+	stw r5,324(r1)
+	cfi_offset (lr, 4)
 	stw r8,36(r1)
 	mfcr r0
 	stw r9,40(r1)
@@ -147,7 +154,7 @@
  # 'fixup' returns the address we want to branch to.
 	mtctr r3
  # Put the registers back...
-	lwz r0,308(r1)
+	lwz r0,324(r1)
 	lwz r10,44(r1)
 	lwz r9,40(r1)
 	mtlr r0
@@ -172,5 +179,6 @@
  # ...unwind the stack frame, and jump to the PLT entry we updated.
 	addi r1,r1,320
 	bctr
+	cfi_endproc
 	.size	 _dl_prof_resolve,.-_dl_prof_resolve
 #endif
diff -urN libc24-cvstip-20060103/sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S libc24/sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S
--- libc24-cvstip-20060103/sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S	2005-12-29 16:00:03.000000000 -0600
+++ libc24/sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S	2006-01-04 16:24:55.741304784 -0600
@@ -1,5 +1,5 @@
 /* longjmp for PowerPC.
-   Copyright (C) 1995-99, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
+   Copyright (C) 1995-99, 2000, 2003-2005, 2006 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
@@ -14,8 +14,8 @@
 
    You should have received a copy of the GNU Lesser General Public
    License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
+   Software Foundation, Inc., 1 Franklin Street, Fifth Floor, Boston MA
+   02110-1301 USA.  */
 
 #include <sysdep.h>
 #define _ASM
@@ -34,6 +34,7 @@
 #ifndef __NO_VMX__
 # ifdef PIC
 	mflr    r6
+	cfi_register (lr,r6)
 #  ifdef HAVE_ASM_PPC_REL16
 	bcl	20,31,1f
 1:	mflr	r5
@@ -46,10 +47,12 @@
 #  ifdef SHARED
 	lwz     r5,_rtld_global_ro@got(r5)
 	mtlr    r6
+	cfi_same_value (lr)
 	lwz     r5,RTLD_GLOBAL_RO_DL_HWCAP_OFFSET(r5)
 #  else
 	lwz     r5,_dl_hwcap@got(r5)
 	mtlr    r6
+	cfi_same_value (lr)
 	lwz     r5,0(r5)
 #  endif
 # else
diff -urN libc24-cvstip-20060103/sysdeps/powerpc/powerpc32/fpu/s_ceil.S libc24/sysdeps/powerpc/powerpc32/fpu/s_ceil.S
--- libc24-cvstip-20060103/sysdeps/powerpc/powerpc32/fpu/s_ceil.S	2005-06-17 18:09:36.000000000 -0500
+++ libc24/sysdeps/powerpc/powerpc32/fpu/s_ceil.S	2006-01-04 16:51:40.184258272 -0600
@@ -1,5 +1,5 @@
 /* ceil function.  PowerPC32 version.
-   Copyright (C) 2004 Free Software Foundation, Inc.
+   Copyright (C) 2004, 2006 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
@@ -14,8 +14,8 @@
 
    You should have received a copy of the GNU Lesser General Public
    License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
+   Software Foundation, Inc., 1 Franklin Street, Fifth Floor, Boston MA
+   02110-1301 USA.  */
 
 #include <sysdep.h>
 
@@ -29,19 +29,20 @@
 	mffs	fp11		/* Save current FPU rounding mode.  */
 #ifdef SHARED
 	mflr	r11
+	cfi_register(lr,r11)
 # ifdef HAVE_ASM_PPC_REL16
 	bcl	20,31,1f
 1:	mflr	r9
 	addis	r9,r9,.LC0-1b@ha
-	mtlr	r11
 	lfs	fp13,.LC0-1b@l(r9)
 # else
 	bl	_GLOBAL_OFFSET_TABLE_@local-4
 	mflr	r10
 	lwz	r9,.LC0@got(10)
-	mtlr	r11
 	lfs	fp13,0(r9)
 # endif
+	mtlr	r11
+	cfi_same_value (lr)
 #else
 	lis	r9,.LC0@ha
 	lfs	fp13,.LC0@l(r9)
diff -urN libc24-cvstip-20060103/sysdeps/powerpc/powerpc32/fpu/s_ceilf.S libc24/sysdeps/powerpc/powerpc32/fpu/s_ceilf.S
--- libc24-cvstip-20060103/sysdeps/powerpc/powerpc32/fpu/s_ceilf.S	2005-06-17 18:09:36.000000000 -0500
+++ libc24/sysdeps/powerpc/powerpc32/fpu/s_ceilf.S	2006-01-04 16:51:04.184273168 -0600
@@ -1,5 +1,5 @@
 /* float ceil function.  PowerPC32 version.
-   Copyright (C) 2004 Free Software Foundation, Inc.
+   Copyright (C) 2004, 2006 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
@@ -14,8 +14,8 @@
 
    You should have received a copy of the GNU Lesser General Public
    License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
+   Software Foundation, Inc., 1 Franklin Street, Fifth Floor, Boston MA
+   02110-1301 USA.  */
 
 #include <sysdep.h>
 
@@ -29,19 +29,20 @@
 	mffs	fp11		/* Save current FPU rounding mode.  */
 #ifdef SHARED
 	mflr	r11
+	cfi_register(lr,r11)
 # ifdef HAVE_ASM_PPC_REL16
 	bcl	20,31,1f
 1:	mflr	r9
 	addis	r9,r9,.LC0-1b@ha
-	mtlr	r11
 	lfs	fp13,.LC0-1b@l(r9)
 # else
 	bl	_GLOBAL_OFFSET_TABLE_@local-4
 	mflr	r10
 	lwz	r9,.LC0@got(10)
-	mtlr	r11
 	lfs	fp13,0(r9)
 # endif
+	mtlr	r11
+	cfi_same_value (lr)
 #else
 	lis	r9,.LC0@ha
 	lfs	fp13,.LC0@l(r9)
diff -urN libc24-cvstip-20060103/sysdeps/powerpc/powerpc32/fpu/s_copysign.S libc24/sysdeps/powerpc/powerpc32/fpu/s_copysign.S
--- libc24-cvstip-20060103/sysdeps/powerpc/powerpc32/fpu/s_copysign.S	2005-05-26 09:30:44.000000000 -0500
+++ libc24/sysdeps/powerpc/powerpc32/fpu/s_copysign.S	2006-01-03 14:33:01.000000000 -0600
@@ -1,5 +1,5 @@
 /* Copy a sign bit between floating-point values.
-   Copyright (C) 1997, 1999, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1997, 1999, 2000, 2006 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
@@ -14,8 +14,8 @@
 
    You should have received a copy of the GNU Lesser General Public
    License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
+   Software Foundation, Inc., 1 Franklin Street, Fifth Floor, Boston MA
+   02110-1301 USA.  */
 
 /* This has been coded in assembler because GCC makes such a mess of it
    when it's coded in C.  */
@@ -27,6 +27,7 @@
    copysign(x,y) returns a value with the magnitude of x and
    with the sign bit of y.  */
 	stwu	r1,-16(r1)
+	cfi_adjust_cfa_offset (16)
 	stfd	fp2,8(r1)
 	lwz	r3,8(r1)
 	cmpwi   r3,0
diff -urN libc24-cvstip-20060103/sysdeps/powerpc/powerpc32/fpu/s_floor.S libc24/sysdeps/powerpc/powerpc32/fpu/s_floor.S
--- libc24-cvstip-20060103/sysdeps/powerpc/powerpc32/fpu/s_floor.S	2005-06-17 18:09:36.000000000 -0500
+++ libc24/sysdeps/powerpc/powerpc32/fpu/s_floor.S	2006-01-04 16:50:35.808195280 -0600
@@ -1,5 +1,5 @@
 /* Floor function.  PowerPC32 version.
-   Copyright (C) 2004 Free Software Foundation, Inc.
+   Copyright (C) 2004, 2006 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
@@ -14,8 +14,8 @@
 
    You should have received a copy of the GNU Lesser General Public
    License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
+   Software Foundation, Inc., 1 Franklin Street, Fifth Floor, Boston MA
+   02110-1301 USA.  */
 
 #include <sysdep.h>
 
@@ -29,19 +29,20 @@
 	mffs	fp11		/* Save current FPU rounding mode.  */
 #ifdef SHARED
 	mflr	r11
+	cfi_register(lr,r11)
 # ifdef HAVE_ASM_PPC_REL16
 	bcl	20,31,1f
 1:	mflr	r9
 	addis	r9,r9,.LC0-1b@ha
-	mtlr	r11
 	lfs	fp13,.LC0-1b@l(r9)
 # else
 	bl	_GLOBAL_OFFSET_TABLE_@local-4
 	mflr	r10
 	lwz	r9,.LC0@got(10)
-	mtlr	r11
 	lfs	fp13,0(r9)
 # endif
+	mtlr	r11
+	cfi_same_value (lr)
 #else
 	lis	r9,.LC0@ha
 	lfs	fp13,.LC0@l(r9)
diff -urN libc24-cvstip-20060103/sysdeps/powerpc/powerpc32/fpu/s_floorf.S libc24/sysdeps/powerpc/powerpc32/fpu/s_floorf.S
--- libc24-cvstip-20060103/sysdeps/powerpc/powerpc32/fpu/s_floorf.S	2005-06-17 18:09:36.000000000 -0500
+++ libc24/sysdeps/powerpc/powerpc32/fpu/s_floorf.S	2006-01-04 16:50:01.033289520 -0600
@@ -1,5 +1,5 @@
 /* float Floor function.  PowerPC32 version.
-   Copyright (C) 2004 Free Software Foundation, Inc.
+   Copyright (C) 2004, 2006 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
@@ -14,8 +14,8 @@
 
    You should have received a copy of the GNU Lesser General Public
    License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
+   Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA
+   02110-1301 USA.  */
 
 #include <sysdep.h>
 
@@ -29,19 +29,20 @@
 	mffs	fp11		/* Save current FPU rounding mode.  */
 #ifdef SHARED
 	mflr	r11
+	cfi_register(lr,r11)
 # ifdef HAVE_ASM_PPC_REL16
 	bcl	20,31,1f
 1:	mflr	r9
 	addis	r9,r9,.LC0-1b@ha
-	mtlr	r11
 	lfs	fp13,.LC0-1b@l(r9)
 # else
 	bl	_GLOBAL_OFFSET_TABLE_@local-4
 	mflr	r10
 	lwz	r9,.LC0@got(10)
-	mtlr	r11
 	lfs	fp13,0(r9)
 # endif
+	mtlr	r11
+	cfi_same_value (lr)
 #else
 	lis	r9,.LC0@ha
 	lfs	fp13,.LC0@l(r9)
diff -urN libc24-cvstip-20060103/sysdeps/powerpc/powerpc32/fpu/s_lround.S libc24/sysdeps/powerpc/powerpc32/fpu/s_lround.S
--- libc24-cvstip-20060103/sysdeps/powerpc/powerpc32/fpu/s_lround.S	2005-11-18 16:48:11.000000000 -0600
+++ libc24/sysdeps/powerpc/powerpc32/fpu/s_lround.S	2006-01-04 16:47:06.554187376 -0600
@@ -1,5 +1,5 @@
 /* lround function.  PowerPC32 version.
-   Copyright (C) 2004 Free Software Foundation, Inc.
+   Copyright (C) 2004, 2006 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
@@ -14,8 +14,8 @@
 
    You should have received a copy of the GNU Lesser General Public
    License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
+   Software Foundation, Inc., 1 Franklin Street, Fifth Floor, Boston MA
+   02110-1301 USA.  */
 
 #include <sysdep.h>
 
@@ -39,8 +39,11 @@
    to the integer value.  */
 
 ENTRY (__lround)
+	stwu    r1,-16(r1)
+	cfi_adjust_cfa_offset (16)
 #ifdef SHARED
 	mflr	r11
+	cfi_register(lr,r11)
 # ifdef HAVE_ASM_PPC_REL16
 	bcl	20,31,1f
 1:	mflr	r9
@@ -52,6 +55,7 @@
 	lwz	r9,.LC0@got(10)
 # endif
 	mtlr	r11
+	cfi_same_value (lr)
 	lfs	fp12,0(r9)
 #else
 	lis	r9,.LC0@ha
@@ -68,11 +72,12 @@
 	fadd	fp1,fp1,fp10	/* x+= 0.5;  */
 .L9:
 	fctiwz	fp2,fp1		/* Convert To Integer DW lround toward 0.  */
-	stfd	fp2,-8(r1)
+	stfd	fp2,8(r1)
 	nop	/* Ensure the following load is in a different dispatch  */
 	nop	/* group to avoid pipe stall on POWER4&5.  */
 	nop
-	lwz	r3,-4(r1)
+	lwz	r3,12(r1)
+	addi	r1,r1,16
 	blr
 .L4:
 	fsub	fp1,fp1,fp10	/* x-= 0.5;  */
diff -urN libc24-cvstip-20060103/sysdeps/powerpc/powerpc32/fpu/s_rint.S libc24/sysdeps/powerpc/powerpc32/fpu/s_rint.S
--- libc24-cvstip-20060103/sysdeps/powerpc/powerpc32/fpu/s_rint.S	2005-06-17 18:09:36.000000000 -0500
+++ libc24/sysdeps/powerpc/powerpc32/fpu/s_rint.S	2006-01-04 16:48:53.753266872 -0600
@@ -1,5 +1,5 @@
 /* Round to int floating-point values.  PowerPC32 version.
-   Copyright (C) 2004 Free Software Foundation, Inc.
+   Copyright (C) 2004, 2006 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
@@ -14,8 +14,8 @@
 
    You should have received a copy of the GNU Lesser General Public
    License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
+   Software Foundation, Inc., 1 Franklin Street, Fifth Floor, Boston MA
+   02110-1301 USA.  */
 
 /* This has been coded in assembler because GCC makes such a mess of it
    when it's coded in C.  */
@@ -31,19 +31,20 @@
 ENTRY (__rint)
 #ifdef SHARED
 	mflr	r11
+	cfi_register(lr,r11)
 # ifdef HAVE_ASM_PPC_REL16
 	bcl	20,31,1f
 1:	mflr	r9
 	addis	r9,r9,.LC0-1b@ha
-	mtlr	r11
 	lfs	fp13,.LC0-1b@l(r9)
 # else
 	bl	_GLOBAL_OFFSET_TABLE_@local-4
 	mflr	r10
 	lwz	r9,.LC0@got(10)
-	mtlr	r11
 	lfs	fp13,0(r9)
 # endif
+	mtlr	r11
+	cfi_same_value (lr)
 #else
 	lis	r9,.LC0@ha
 	lfs	fp13,.LC0@l(r9)
diff -urN libc24-cvstip-20060103/sysdeps/powerpc/powerpc32/fpu/s_rintf.S libc24/sysdeps/powerpc/powerpc32/fpu/s_rintf.S
--- libc24-cvstip-20060103/sysdeps/powerpc/powerpc32/fpu/s_rintf.S	2005-06-17 18:09:36.000000000 -0500
+++ libc24/sysdeps/powerpc/powerpc32/fpu/s_rintf.S	2006-01-04 16:52:47.783233736 -0600
@@ -1,5 +1,5 @@
 /* Round float to int floating-point values.  PowerPC32 version.
-   Copyright (C) 2004 Free Software Foundation, Inc.
+   Copyright (C) 2004, 2006 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
@@ -14,8 +14,8 @@
 
    You should have received a copy of the GNU Lesser General Public
    License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
+   Software Foundation, Inc., 1 Franklin Street, Fifth Floor, Boston MA
+   02110-1301 USA.  */
 
 #include <sysdep.h>
 
@@ -28,19 +28,20 @@
 ENTRY (__rintf)
 #ifdef SHARED
 	mflr	r11
+	cfi_register(lr,r11)
 # ifdef HAVE_ASM_PPC_REL16
 	bcl	20,31,1f
 1:	mflr	r9
 	addis	r9,r9,.LC0-1b@ha
-	mtlr	r11
 	lfs	fp13,.LC0-1b@l(r9)
 # else
 	bl	_GLOBAL_OFFSET_TABLE_@local-4
 	mflr	r10
 	lwz	r9,.LC0@got(10)
-	mtlr	r11
 	lfs	fp13,0(r9)
 # endif
+	mtlr	r11
+	cfi_same_value (lr)
 #else
 	lis	r9,.LC0@ha
 	lfs	fp13,.LC0@l(r9)
diff -urN libc24-cvstip-20060103/sysdeps/powerpc/powerpc32/fpu/s_round.S libc24/sysdeps/powerpc/powerpc32/fpu/s_round.S
--- libc24-cvstip-20060103/sysdeps/powerpc/powerpc32/fpu/s_round.S	2005-06-17 18:09:36.000000000 -0500
+++ libc24/sysdeps/powerpc/powerpc32/fpu/s_round.S	2006-01-04 16:54:26.166187832 -0600
@@ -1,5 +1,5 @@
 /* round function.  PowerPC32 version.
-   Copyright (C) 2004 Free Software Foundation, Inc.
+   Copyright (C) 2004, 2006 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
@@ -14,8 +14,8 @@
 
    You should have received a copy of the GNU Lesser General Public
    License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
+   Software Foundation, Inc., 1 Franklin Street, Fifth Floor, Boston MA
+   02110-1301 USA.  */
 
 #include <sysdep.h>
 
@@ -41,6 +41,7 @@
 	mffs	fp11		/* Save current FPU rounding mode.  */
 #ifdef SHARED
 	mflr	r11
+	cfi_register(lr,r11)
 # ifdef HAVE_ASM_PPC_REL16
 	bcl	20,31,1f
 1:	mflr	r9
@@ -52,6 +53,7 @@
 	lwz	r9,.LC0@got(10)
 # endif
 	mtlr	r11
+	cfi_same_value (lr)
 	lfs	fp13,0(r9)
 #else
 	lis	r9,.LC0@ha
diff -urN libc24-cvstip-20060103/sysdeps/powerpc/powerpc32/fpu/s_roundf.S libc24/sysdeps/powerpc/powerpc32/fpu/s_roundf.S
--- libc24-cvstip-20060103/sysdeps/powerpc/powerpc32/fpu/s_roundf.S	2005-06-17 18:09:36.000000000 -0500
+++ libc24/sysdeps/powerpc/powerpc32/fpu/s_roundf.S	2006-01-04 16:55:17.254275688 -0600
@@ -1,5 +1,5 @@
 /* roundf  function.  PowerPC32 version.
-   Copyright (C) 2004 Free Software Foundation, Inc.
+   Copyright (C) 2004, 2006 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
@@ -14,8 +14,8 @@
 
    You should have received a copy of the GNU Lesser General Public
    License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
+   Software Foundation, Inc., 1 Franklin Street, Fifth Floor, Boston MA
+   02110-1301 USA.  */
 
 #include <sysdep.h>
 
@@ -41,6 +41,7 @@
 	mffs	fp11		/* Save current FPU rounding mode.  */
 #ifdef SHARED
 	mflr	r11
+	cfi_register(lr,r11)
 # ifdef HAVE_ASM_PPC_REL16
 	bcl	20,31,1f
 1:	mflr	r9
@@ -52,6 +53,7 @@
 	lwz	r9,.LC0@got(10)
 # endif
 	mtlr	r11
+	cfi_same_value (lr)
 	lfs	fp13,0(r9)
 #else
 	lis	r9,.LC0@ha
diff -urN libc24-cvstip-20060103/sysdeps/powerpc/powerpc32/fpu/s_trunc.S libc24/sysdeps/powerpc/powerpc32/fpu/s_trunc.S
--- libc24-cvstip-20060103/sysdeps/powerpc/powerpc32/fpu/s_trunc.S	2005-06-17 18:09:36.000000000 -0500
+++ libc24/sysdeps/powerpc/powerpc32/fpu/s_trunc.S	2006-01-04 16:55:56.086230088 -0600
@@ -1,5 +1,5 @@
 /* trunc function.  PowerPC32 version.
-   Copyright (C) 2004 Free Software Foundation, Inc.
+   Copyright (C) 2004, 2006 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
@@ -14,8 +14,8 @@
 
    You should have received a copy of the GNU Lesser General Public
    License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
+   Software Foundation, Inc., 1 Franklin Street, Fifth Floor, Boston MA
+   02110-1301 USA.  */
 
 #include <sysdep.h>
 
@@ -36,19 +36,20 @@
 	mffs	fp11		/* Save current FPU rounding mode.  */
 #ifdef SHARED
 	mflr	r11
+	cfi_register(lr,r11)
 # ifdef HAVE_ASM_PPC_REL16
 	bcl	20,31,1f
 1:	mflr	r9
 	addis	r9,r9,.LC0-1b@ha
-	mtlr	r11
 	lfs	fp13,.LC0-1b@l(r9)
 # else
 	bl	_GLOBAL_OFFSET_TABLE_@local-4
 	mflr	r10
 	lwz	r9,.LC0@got(10)
-	mtlr	r11
 	lfs	fp13,0(r9)
 # endif
+	mtlr	r11
+	cfi_same_value (lr)
 #else
 	lis	r9,.LC0@ha
 	lfs	fp13,.LC0@l(r9)
diff -urN libc24-cvstip-20060103/sysdeps/powerpc/powerpc32/fpu/s_truncf.S libc24/sysdeps/powerpc/powerpc32/fpu/s_truncf.S
--- libc24-cvstip-20060103/sysdeps/powerpc/powerpc32/fpu/s_truncf.S	2005-06-17 18:09:36.000000000 -0500
+++ libc24/sysdeps/powerpc/powerpc32/fpu/s_truncf.S	2006-01-04 16:57:11.541207592 -0600
@@ -1,5 +1,5 @@
 /* truncf function.  PowerPC32 version.
-   Copyright (C) 2004 Free Software Foundation, Inc.
+   Copyright (C) 2004, 2006 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
@@ -14,8 +14,8 @@
 
    You should have received a copy of the GNU Lesser General Public
    License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
+   Software Foundation, Inc., 1 Franklin Street, Fifth Floor, Boston MA
+   02110-1301 USA.  */
 
 #include <sysdep.h>
 
@@ -36,19 +36,20 @@
 	mffs	fp11		/* Save current FPU rounding mode.  */
 #ifdef SHARED
 	mflr	r11
+	cfi_register(lr,r11)
 # ifdef HAVE_ASM_PPC_REL16
 	bcl	20,31,1f
 1:	mflr	r9
 	addis	r9,r9,.LC0-1b@ha
-	mtlr	r11
 	lfs	fp13,.LC0-1b@l(r9)
 # else
 	bl	_GLOBAL_OFFSET_TABLE_@local-4
 	mflr	r10
 	lwz	r9,.LC0@got(10)
-	mtlr	r11
 	lfs	fp13,0(r9)
 # endif
+	mtlr	r11
+	cfi_same_value (lr)
 #else
 	lis	r9,.LC0@ha
 	lfs	fp13,.LC0@l(r9)
diff -urN libc24-cvstip-20060103/sysdeps/powerpc/powerpc32/fpu/setjmp-common.S libc24/sysdeps/powerpc/powerpc32/fpu/setjmp-common.S
--- libc24-cvstip-20060103/sysdeps/powerpc/powerpc32/fpu/setjmp-common.S	2005-12-30 15:02:52.000000000 -0600
+++ libc24/sysdeps/powerpc/powerpc32/fpu/setjmp-common.S	2006-01-04 16:59:17.610213128 -0600
@@ -1,5 +1,5 @@
 /* setjmp for PowerPC.
-   Copyright (C) 1995-2000, 2003, 2004, 2005 Free Software Foundation, Inc.
+   Copyright (C) 1995-2000, 2003-2005, 2006 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
@@ -14,8 +14,8 @@
 
    You should have received a copy of the GNU Lesser General Public
    License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
+   Software Foundation, Inc., 1 Franklin Street, Fifth Floor, Boston MA
+   02110-1301 USA.  */
 
 #include <sysdep.h>
 #define _ASM
@@ -85,6 +85,7 @@
 #ifndef __NO_VMX__
 # ifdef PIC
 	mflr    r6
+	cfi_register(lr,r6)
 #  ifdef HAVE_ASM_PPC_REL16
 	bcl	20,31,1f
 1:	mflr	r5
@@ -94,13 +95,13 @@
 	bl      _GLOBAL_OFFSET_TABLE_@local-4
 	mflr    r5
 #  endif
+	mtlr	r6
+	cfi_same_value (lr)
 #  ifdef SHARED
 	lwz     r5,_rtld_global_ro@got(r5)
-	mtlr    r6
 	lwz     r5,RTLD_GLOBAL_RO_DL_HWCAP_OFFSET(r5)
 #  else
 	lwz     r5,_dl_hwcap@got(r5)
-	mtlr    r6
 	lwz     r5,0(r5)
 #  endif
 # else
diff -urN libc24-cvstip-20060103/sysdeps/powerpc/powerpc32/lshift.S libc24/sysdeps/powerpc/powerpc32/lshift.S
--- libc24-cvstip-20060103/sysdeps/powerpc/powerpc32/lshift.S	2002-09-05 03:31:33.000000000 -0500
+++ libc24/sysdeps/powerpc/powerpc32/lshift.S	2006-01-04 17:01:17.004302136 -0600
@@ -1,5 +1,5 @@
 /* Shift a limb left, low level routine.
-   Copyright (C) 1996, 1997, 1999, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1996, 1997, 1999, 2000, 2006 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
@@ -14,8 +14,8 @@
 
    You should have received a copy of the GNU Lesser General Public
    License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
+   Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA
+   02110-1301 USA.  */
 
 #include <sysdep.h>
 #include <bp-sym.h>
@@ -67,6 +67,7 @@
 /* We imitate a case statement, by using (yuk!) fixed-length code chunks,
    of size 4*12 bytes.  We have to do this (or something) to make this PIC.  */
 L(big):	mflr    r9
+	cfi_register(lr,r9)
 	bltl-   cr0,L(boom)	# Never taken, only used to set LR.
 	slwi    r10,r6,4
 	mflr    r12
@@ -75,7 +76,8 @@
 	add     r10,r8,r10
 	mtctr   r10
 	addi	r5,r5,-1
-	mtlr    r9
+	mtlr	r9
+	cfi_same_value (lr)
 	bctr
 
 L(end2):slw	r0,r10,r6
diff -urN libc24-cvstip-20060103/sysdeps/powerpc/powerpc32/ppc-mcount.S libc24/sysdeps/powerpc/powerpc32/ppc-mcount.S
--- libc24-cvstip-20060103/sysdeps/powerpc/powerpc32/ppc-mcount.S	2005-06-17 18:03:48.000000000 -0500
+++ libc24/sysdeps/powerpc/powerpc32/ppc-mcount.S	2006-01-04 11:37:20.426223720 -0600
@@ -1,5 +1,5 @@
 /* PowerPC-specific implementation of profiling support.
-   Copyright (C) 1997, 1999, 2005 Free Software Foundation, Inc.
+   Copyright (C) 1997, 1999, 2005, 2006 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
@@ -14,8 +14,8 @@
 
    You should have received a copy of the GNU Lesser General Public
    License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
+   Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA
+   02110-1301 USA.  */
 
 /* This would be bad.  */
 #ifdef PROF
@@ -42,6 +42,7 @@
 
 ENTRY(_mcount)
 	stwu	r1,-48(r1)
+	cfi_adjust_cfa_offset (48)
 /* We need to save the parameter-passing registers.  */
 	stw	r3, 12(r1)
 	stw	r4, 16(r1)
@@ -55,6 +56,7 @@
 	stw	r9, 36(r1)
 	stw	r10,40(r1)
 	stw	r4, 44(r1)
+	cfi_offset (lr, -4)
 	stw	r5,  8(r1)
 	bl	__mcount_internal@local
 	nop
diff -urN libc24-cvstip-20060103/sysdeps/unix/sysv/linux/powerpc/powerpc32/brk.S libc24/sysdeps/unix/sysv/linux/powerpc/powerpc32/brk.S
--- libc24-cvstip-20060103/sysdeps/unix/sysv/linux/powerpc/powerpc32/brk.S	2005-06-17 18:09:36.000000000 -0500
+++ libc24/sysdeps/unix/sysv/linux/powerpc/powerpc32/brk.S	2006-01-04 13:37:18.634276184 -0600
@@ -1,5 +1,5 @@
 /* brk system call for Linux/ppc.
-   Copyright (C) 1995, 1996, 1997, 1999, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1995-97, 1999, 2000, 2006 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
@@ -14,8 +14,8 @@
 
    You should have received a copy of the GNU Lesser General Public
    License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
+   Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA
+   02110-1301 USA.  */
 
 #include <sysdep.h>
 #define _ERRNO_H	1
@@ -27,32 +27,34 @@
 	.section ".text"
 ENTRY (BP_SYM (__brk))
 	DISCARD_BOUNDS (r3)	/* the bounds are meaningless, so toss 'em */
-
+	mflr	r0
 	stwu    r1,-16(r1)
+	cfi_adjust_cfa_offset (16)
 	stw	r3,8(r1)
+	stw	r0,20(r1)
+	cfi_offset (lr, 4)
 	DO_CALL(SYS_ify(brk))
 	lwz     r6,8(r1)
 #ifdef PIC
-	mflr    r4
 # ifdef HAVE_ASM_PPC_REL16
 	bcl	20,31,1f
 1:	mflr	r5
 	addis	r5,r5,__curbrk-1b@ha
-	mtlr	r4
 	stw	r3,__curbrk-1b@l(r5)
 # else
 	bl      _GLOBAL_OFFSET_TABLE_@local-4
 	mflr    r5
 	lwz     r5,__curbrk@got(r5)
-	mtlr    r4
 	stw     r3,0(r5)
 # endif
 #else
 	lis     r4,__curbrk@ha
 	stw     r3,__curbrk@l(r4)
 #endif
+	lwz	r0,20(r1)
 	cmplw   r6,r3
 	addi    r1,r1,16
+	mtlr	r0
 	li	r3,0
 	blelr+
 	li      r3,ENOMEM
diff -urN libc24-cvstip-20060103/sysdeps/unix/sysv/linux/powerpc/powerpc32/clone.S libc24/sysdeps/unix/sysv/linux/powerpc/powerpc32/clone.S
--- libc24-cvstip-20060103/sysdeps/unix/sysv/linux/powerpc/powerpc32/clone.S	2005-05-21 14:27:08.000000000 -0500
+++ libc24/sysdeps/unix/sysv/linux/powerpc/powerpc32/clone.S	2006-01-04 17:22:01.475263360 -0600
@@ -1,5 +1,5 @@
 /* Wrapper around clone system call.
-   Copyright (C) 1997,98,99,2000,02,2004 Free Software Foundation, Inc.
+   Copyright (C) 1997,98,99,2000,02,04,2006 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
@@ -14,8 +14,8 @@
 
    You should have received a copy of the GNU Lesser General Public
    License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
+   Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA
+   02110-1301 USA.  */
 
 #include <sysdep.h>
 #define _ERRNO_H	1
@@ -49,6 +49,7 @@
 
 	/* Set up stack frame for parent.  */
 	stwu	r1,-32(r1)
+	cfi_adjust_cfa_offset (32)
 #ifdef RESET_PID
 	stmw	r28,16(r1)
 #else
diff -urN libc24-cvstip-20060103/sysdeps/unix/sysv/linux/powerpc/powerpc32/getcontext-common.S libc24/sysdeps/unix/sysv/linux/powerpc/powerpc32/getcontext-common.S
--- libc24-cvstip-20060103/sysdeps/unix/sysv/linux/powerpc/powerpc32/getcontext-common.S	2005-12-29 15:06:08.000000000 -0600
+++ libc24/sysdeps/unix/sysv/linux/powerpc/powerpc32/getcontext-common.S	2006-01-04 13:38:57.410303696 -0600
@@ -1,5 +1,5 @@
 /* Save current context, powerpc32 common.
-   Copyright (C) 2005 Free Software Foundation, Inc.
+   Copyright (C) 2005, 2006 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
@@ -40,6 +40,7 @@
 #endif
 ENTRY(__CONTEXT_FUNC_NAME)
 	stwu	r1,-16(r1)
+	cfi_adjust_cfa_offset (16)
 /* Insure that the _UC_REGS start on a quadword boundary.  */
 	stw	r3,_FRAME_PARM_SAVE1(r1)
 	addi	r3,r3,_UC_REG_SPACE+12
@@ -55,6 +56,7 @@
 	stw	r0,_UC_GREGS+(PT_LNK*4)(r3)
 	stw	r0,_UC_GREGS+(PT_NIP*4)(r3)
 	stw	r0,_FRAME_LR_SAVE+16(r1)
+	cfi_offset (lr, _FRAME_LR_SAVE)
 	stw	r5,_UC_GREGS+(PT_R5*4)(r3)
 	stw	r6,_UC_GREGS+(PT_R6*4)(r3)
 	stw	r7,_UC_GREGS+(PT_R7*4)(r3)
diff -urN libc24-cvstip-20060103/sysdeps/unix/sysv/linux/powerpc/powerpc32/makecontext.S libc24/sysdeps/unix/sysv/linux/powerpc/powerpc32/makecontext.S
--- libc24-cvstip-20060103/sysdeps/unix/sysv/linux/powerpc/powerpc32/makecontext.S	2005-05-21 14:27:08.000000000 -0500
+++ libc24/sysdeps/unix/sysv/linux/powerpc/powerpc32/makecontext.S	2006-01-04 17:03:37.906183816 -0600
@@ -1,5 +1,5 @@
 /* Set up a context to call a function.
-   Copyright (C) 2002, 2004 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2004, 2006 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
@@ -14,8 +14,8 @@
 
    You should have received a copy of the GNU Lesser General Public
    License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
+   Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA
+   02110-1301 USA.  */
 
 #include <sysdep.h>
 #include <shlib-compat.h>
@@ -49,10 +49,12 @@
 	/* Set the function's LR to point to the exitcode below. */
 #ifdef PIC
 	mflr	r0
+	cfi_register(lr,r0)
 	bl	1f
 1:	mflr	r6
 	addi	r6,r6,L(exitcode)-1b
 	mtlr	r0
+	cfi_same_value (lr)
 #else
 	lis	r6,L(exitcode)@ha
 	addi	r6,r6,L(exitcode)@l
@@ -136,10 +138,12 @@
 	/* Set the function's LR to point to the exitcode below. */
 #ifdef PIC
 	mflr	r0
+	cfi_register(lr,r0)
 	bl	1f
 1:	mflr	r6
 	addi	r6,r6,L(novec_exitcode)-1b
 	mtlr	r0
+	cfi_same_value (lr)
 #else
 	lis	r6,L(novec_exitcode)@ha
 	addi	r6,r6,L(novec_exitcode)@l
diff -urN libc24-cvstip-20060103/sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext-common.S libc24/sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext-common.S
--- libc24-cvstip-20060103/sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext-common.S	2005-12-29 15:06:54.000000000 -0600
+++ libc24/sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext-common.S	2006-01-04 13:39:56.521237120 -0600
@@ -1,5 +1,5 @@
 /* Jump to a new context powerpc32 common.
-   Copyright (C) 2005 Free Software Foundation, Inc.
+   Copyright (C) 2005, 2006 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
@@ -41,7 +41,9 @@
 ENTRY(__CONTEXT_FUNC_NAME)
 	mflr	r0
 	stwu	r1,-16(r1)
+	cfi_adjust_cfa_offset (16)
 	stw	r0,20(r1)
+	cfi_offset (lr, _FRAME_LR_SAVE)
 	stw	r31,12(r1)
 	lwz	r31,_UC_REGS_PTR(r3)
 
diff -urN libc24-cvstip-20060103/sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S libc24/sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S
--- libc24-cvstip-20060103/sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S	2005-12-29 15:07:44.000000000 -0600
+++ libc24/sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S	2006-01-04 17:27:03.600250912 -0600
@@ -1,5 +1,5 @@
 /* Save current context and jump to a new context.
-   Copyright (C) 2005 Free Software Foundation, Inc.
+   Copyright (C) 2005, 2006 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
@@ -40,6 +40,7 @@
 #endif
 ENTRY(__CONTEXT_FUNC_NAME)
 	stwu	r1,-16(r1)
+	cfi_adjust_cfa_offset (16)
 /* Insure that the _UC_REGS start on a quadword boundary.  */
 	stw	r3,_FRAME_PARM_SAVE1(r1)
 	addi	r3,r3,_UC_REG_SPACE+12
@@ -56,6 +57,7 @@
 	stw	r0,_UC_GREGS+(PT_LNK*4)(r3)
 	stw	r0,_UC_GREGS+(PT_NIP*4)(r3)
 	stw	r0,_FRAME_LR_SAVE+16(r1)
+	cfi_offset (lr, _FRAME_LR_SAVE)
 	stw	r5,_UC_GREGS+(PT_R5*4)(r3)
 	stw	r6,_UC_GREGS+(PT_R6*4)(r3)
 	stw	r7,_UC_GREGS+(PT_R7*4)(r3)
@@ -309,13 +311,12 @@
 	bl      _GLOBAL_OFFSET_TABLE_@local-4
 	mflr    r7
 #   endif
+	mtlr    r8
 #   ifdef SHARED
 	lwz     r7,_rtld_global_ro@got(r7)
-	mtlr    r8
 	lwz     r7,RTLD_GLOBAL_RO_DL_HWCAP_OFFSET(r7)
 #   else
 	lwz     r7,_dl_hwcap@got(r7)
-	mtlr    r8
 	lwz     r7,0(r7)
 #   endif
 #  else
@@ -467,7 +468,6 @@
 	mtcr	r5
 
 	/* Restore the general registers */
-	lwz	r1,_UC_GREGS+(PT_R1*4)(r31)
 	lwz	r3,_UC_GREGS+(PT_R3*4)(r31)
 	lwz	r4,_UC_GREGS+(PT_R4*4)(r31)
 	lwz	r5,_UC_GREGS+(PT_R5*4)(r31)
@@ -496,6 +496,7 @@
 	lwz	r28,_UC_GREGS+(PT_R28*4)(r31)
 	lwz	r29,_UC_GREGS+(PT_R29*4)(r31)
 	lwz	r30,_UC_GREGS+(PT_R30*4)(r31)
+	lwz	r1,_UC_GREGS+(PT_R1*4)(r31)
 	lwz	r31,_UC_GREGS+(PT_R31*4)(r31)
 
 	bctr

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] PPC32 cfi update part3
  2006-01-04 23:53 [PATCH] PPC32 cfi update part3 Steven Munroe
@ 2006-01-07  3:58 ` Ulrich Drepper
  2006-08-13  8:15 ` Andreas Schwab
  1 sibling, 0 replies; 5+ messages in thread
From: Ulrich Drepper @ 2006-01-07  3:58 UTC (permalink / raw)
  To: Steven Munroe; +Cc: libc-hacker, Alan Modra

[-- Attachment #1: Type: text/plain, Size: 111 bytes --]

I applied part3&4.

-- 
➧ Ulrich Drepper ➧ Red Hat, Inc. ➧ 444 Castro St ➧ Mountain View, CA ❖


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 251 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] PPC32 cfi update part3
  2006-01-04 23:53 [PATCH] PPC32 cfi update part3 Steven Munroe
  2006-01-07  3:58 ` Ulrich Drepper
@ 2006-08-13  8:15 ` Andreas Schwab
  2006-08-13  9:43   ` Andreas Schwab
  1 sibling, 1 reply; 5+ messages in thread
From: Andreas Schwab @ 2006-08-13  8:15 UTC (permalink / raw)
  To: Steven Munroe; +Cc: libc-hacker, Alan Modra

Steven Munroe <munroesj@us.ibm.com> writes:

> 	* sysdeps/powerpc/powerpc32/dl-trampoline.S (_dl_runtime_resolve,
> 	_dl_profile_resolve): Add CFI directives for stack and LR save.
> 	Save LR in LRSAVE of previous frame per ABI.

This breaks profiling.  The caller of _mcount is supposed to store LR in
LRSAVE, and _mcount restores it from there, but LRSAVE gets clobbered by
the trampoline.

Andreas.

-- 
Andreas Schwab, SuSE Labs, schwab@suse.de
SuSE Linux Products GmbH, Maxfeldstraße 5, 90409 Nürnberg, Germany
PGP key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] PPC32 cfi update part3
  2006-08-13  8:15 ` Andreas Schwab
@ 2006-08-13  9:43   ` Andreas Schwab
  2006-08-14 22:20     ` Ulrich Drepper
  0 siblings, 1 reply; 5+ messages in thread
From: Andreas Schwab @ 2006-08-13  9:43 UTC (permalink / raw)
  To: Steven Munroe; +Cc: libc-hacker, Alan Modra

Andreas Schwab <schwab@suse.de> writes:

> Steven Munroe <munroesj@us.ibm.com> writes:
>
>> 	* sysdeps/powerpc/powerpc32/dl-trampoline.S (_dl_runtime_resolve,
>> 	_dl_profile_resolve): Add CFI directives for stack and LR save.
>> 	Save LR in LRSAVE of previous frame per ABI.
>
> This breaks profiling.  The caller of _mcount is supposed to store LR in
> LRSAVE, and _mcount restores it from there, but LRSAVE gets clobbered by
> the trampoline.

Here is a patch that unbreaks it.

Andreas.

2006-08-13  Andreas Schwab  <schwab@suse.de>

	* sysdeps/powerpc/powerpc32/dl-trampoline.S (_dl_runtime_resolve):
	Don't clobber caller's LRSAVE.
	(_dl_prof_resolve): Likewise.

--- sysdeps/powerpc/powerpc32/dl-trampoline.S	22 Jan 2006 13:45:52 +0100	1.5
+++ sysdeps/powerpc/powerpc32/dl-trampoline.S	13 Aug 2006 10:31:04 +0200	
@@ -40,8 +40,9 @@ _dl_runtime_resolve:
 	mflr r0
  # We also need to save some of the condition register fields
 	stw r7,32(r1)
-	stw r0,68(r1)
- 	cfi_offset (lr, 4)
+ # Don't clobber the caller's LRSAVE, it is needed by _mcount.
+	stw r0,48(r1)
+ 	cfi_offset (lr, -16)
 	stw r8,36(r1)
 	mfcr r0
 	stw r9,40(r1)
@@ -51,7 +52,7 @@ _dl_runtime_resolve:
  # 'fixup' returns the address we want to branch to.
 	mtctr r3
  # Put the registers back...
-	lwz r0,68(r1)
+	lwz r0,48(r1)
 	lwz r10,44(r1)
 	lwz r9,40(r1)
 	mtlr r0
@@ -128,8 +129,9 @@ _dl_prof_resolve:
 	mflr r5
  # We also need to save some of the condition register fields.
 	stw r7,32(r1)
-	stw r5,324(r1)
-	cfi_offset (lr, 4)
+ # Don't clobber the caller's LRSAVE, it is needed by _mcount.
+	stw r5,308(r1)
+	cfi_offset (lr, -12)
 	stw r8,36(r1)
 	mfcr r0
 	stw r9,40(r1)
@@ -154,7 +156,7 @@ _dl_prof_resolve:
  # 'fixup' returns the address we want to branch to.
 	mtctr r3
  # Put the registers back...
-	lwz r0,324(r1)
+	lwz r0,308(r1)
 	lwz r10,44(r1)
 	lwz r9,40(r1)
 	mtlr r0

-- 
Andreas Schwab, SuSE Labs, schwab@suse.de
SuSE Linux Products GmbH, Maxfeldstraße 5, 90409 Nürnberg, Germany
PGP key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] PPC32 cfi update part3
  2006-08-13  9:43   ` Andreas Schwab
@ 2006-08-14 22:20     ` Ulrich Drepper
  0 siblings, 0 replies; 5+ messages in thread
From: Ulrich Drepper @ 2006-08-14 22:20 UTC (permalink / raw)
  To: Andreas Schwab; +Cc: Steven Munroe, libc-hacker, Alan Modra

[-- Attachment #1: Type: text/plain, Size: 181 bytes --]

Andreas Schwab wrote:
> Here is a patch that unbreaks it.

Looks reasonable, applied.

-- 
➧ Ulrich Drepper ➧ Red Hat, Inc. ➧ 444 Castro St ➧ Mountain View, CA ❖


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 251 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2006-08-14 22:20 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-01-04 23:53 [PATCH] PPC32 cfi update part3 Steven Munroe
2006-01-07  3:58 ` Ulrich Drepper
2006-08-13  8:15 ` Andreas Schwab
2006-08-13  9:43   ` Andreas Schwab
2006-08-14 22:20     ` Ulrich Drepper

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).