| From b33905dc310f475ddbde4c9fb7230724b2068a2b Mon Sep 17 00:00:00 2001 |
| From: Max Filippov <jcmvbkbc@gmail.com> |
| Date: Sat, 15 Aug 2015 05:12:11 +0300 |
| Subject: [PATCH 3/3] xtensa: fix _Unwind_GetCFA |
| |
| Returning context->cfa in _Unwind_GetCFA makes CFA point one stack frame |
| higher than what was actually used by code at context->ra. This results |
| in invalid CFA value in signal frames and premature unwinding completion |
| in forced unwinding used by uClibc NPTL thread cancellation. |
| Returning context->sp from _Unwind_GetCFA makes all CFA values valid and |
| matching code that used them. |
| |
| 2015-08-18 Max Filippov <jcmvbkbc@gmail.com> |
| libgcc/ |
| * config/xtensa/unwind-dw2-xtensa.c (_Unwind_GetCFA): Return |
| context->sp instead of context->cfa. |
| |
| Signed-off-by: Max Filippov <jcmvbkbc@gmail.com> |
| --- |
| Backported from: r226964 |
| |
| libgcc/config/xtensa/unwind-dw2-xtensa.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| diff --git a/libgcc/config/xtensa/unwind-dw2-xtensa.c b/libgcc/config/xtensa/unwind-dw2-xtensa.c |
| index 82b0e63..8e579c7 100644 |
| --- a/libgcc/config/xtensa/unwind-dw2-xtensa.c |
| +++ b/libgcc/config/xtensa/unwind-dw2-xtensa.c |
| @@ -130,7 +130,7 @@ _Unwind_GetGR (struct _Unwind_Context *context, int index) |
| _Unwind_Word |
| _Unwind_GetCFA (struct _Unwind_Context *context) |
| { |
| - return (_Unwind_Ptr) context->cfa; |
| + return (_Unwind_Ptr) context->sp; |
| } |
| |
| /* Overwrite the saved value for register INDEX in CONTEXT with VAL. */ |
| -- |
| 1.8.1.4 |
| |