From 5162e7dd96efcd9b45c1dc1471a964d45278b1e1 Mon Sep 17 00:00:00 2001 From: Ulrich Weigand Date: Wed, 4 Dec 2013 06:41:52 -0600 Subject: PowerPC64: Fix incorrect CFI in *context routines The context established by "makecontext" has a link register pointing back to an error path within the makecontext routine. This is currently covered by the CFI FDE for makecontext itself, which is simply wrong for the stack frame *inside* the context. When trying to unwind (e.g. doing a backtrace) in a routine inside a context created by makecontext, this can lead to uninitialized stack slots being accessed, causing the unwinder to crash in the worst case. Similarly, during parts of the "setcontext" routine, when the stack pointer has already been switched to point to the new context, the address range is still covered by the CFI FDE for setcontext. When trying to unwind in that situation (e.g. backtrace from an async signal handler for profiling), it is again possible that the unwinder crashes. Theses are all problems in existing code, but the changes in stack frame layout appear to make the "worst case" much more likely in the ELFv2 ABI context. This causes regressions e.g. in the libgo testsuite on ELFv2. This patch fixes this by ending the makecontext/setcontext FDEs before those problematic parts of the assembler, similar to what is already done on other platforms. This fixes the libgo regression on ELFv2. --- ChangeLog | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'ChangeLog') diff --git a/ChangeLog b/ChangeLog index 2f04edda39..80b0a757a3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2013-12-04 Ulrich Weigand + + * sysdeps/unix/sysv/linux/powerpc/powerpc64/makecontext.S + (__makecontext): Fix incorrect CFI when backtracing out of + context created via makecontext. + * sysdeps/unix/sysv/linux/powerpc/powerpc64/secontext.S + (__setcontext): Fix incorrect CFI during switch to new context. + (__novec_setcontext): Likewise. + 2013-12-04 Ondřej Bílka [BZ #4772] -- cgit 1.4.1