This is the mail archive of the libc-hacker@sourceware.org mailing list for the glibc project.

Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] PPC32 cfi update part3


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."


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]