1 |
vapier 13/11/23 05:14:46 |
2 |
|
3 |
Added: 6024_all_alpha-fix-signal-thunk-unwind-info.patch |
4 |
Log: |
5 |
add fix from upstream for signal handling #480740 by Tobias Klausmann |
6 |
|
7 |
Revision Changes Path |
8 |
1.1 src/patchsets/glibc/2.17/6024_all_alpha-fix-signal-thunk-unwind-info.patch |
9 |
|
10 |
file : http://sources.gentoo.org/viewvc.cgi/gentoo/src/patchsets/glibc/2.17/6024_all_alpha-fix-signal-thunk-unwind-info.patch?rev=1.1&view=markup |
11 |
plain: http://sources.gentoo.org/viewvc.cgi/gentoo/src/patchsets/glibc/2.17/6024_all_alpha-fix-signal-thunk-unwind-info.patch?rev=1.1&content-type=text/plain |
12 |
|
13 |
Index: 6024_all_alpha-fix-signal-thunk-unwind-info.patch |
14 |
=================================================================== |
15 |
https://bugs.gentoo.org/480740 |
16 |
|
17 |
From 027e32bd42314e17095ba39df82ef293f4a72c09 Mon Sep 17 00:00:00 2001 |
18 |
From: Richard Henderson <rth@×××××××.net> |
19 |
Date: Sat, 16 Nov 2013 06:34:39 +1000 |
20 |
Subject: [PATCH] alpha: Fix signal thunk unwind info |
21 |
|
22 |
2013-11-16 Richard Henderson <rth@××××××.com> |
23 |
|
24 |
* sysdeps/unix/sysv/linux/alpha/rt_sigaction.S: Include a nop |
25 |
before each signal thunk. |
26 |
|
27 |
--- |
28 |
ports/ChangeLog.alpha | 5 +++++ |
29 |
ports/sysdeps/unix/sysv/linux/alpha/rt_sigaction.S | 18 ++++++++++++++---- |
30 |
2 files changed, 19 insertions(+), 4 deletions(-) |
31 |
|
32 |
diff --git a/ports/sysdeps/unix/sysv/linux/alpha/rt_sigaction.S b/ports/sysdeps/unix/sysv/linux/alpha/rt_sigaction.S |
33 |
index 3d291fd..6efa738 100644 |
34 |
--- a/ports/sysdeps/unix/sysv/linux/alpha/rt_sigaction.S |
35 |
+++ b/ports/sysdeps/unix/sysv/linux/alpha/rt_sigaction.S |
36 |
@@ -83,14 +83,21 @@ PSEUDO_END(__syscall_rt_sigaction) |
37 |
cfi_offset (64, \base + 2 * 8) |
38 |
.endm |
39 |
|
40 |
- .align 4 |
41 |
- |
42 |
cfi_startproc |
43 |
cfi_return_column (64) |
44 |
.cfi_signal_frame |
45 |
SIGCONTEXT_REGS -648 |
46 |
- |
47 |
cfi_def_cfa_offset (648) |
48 |
+ |
49 |
+ /* While this frame is marked as a signal frame, that only applies |
50 |
+ to how this return address is handled for the outer frame. |
51 |
+ The return address that arrived here, from the inner frame, is |
52 |
+ not marked as a signal frame and so the unwinder still tries to |
53 |
+ subtract 1 to examine the presumed call insn. Thus we must |
54 |
+ extend the unwind info to a nop before the start. */ |
55 |
+ nop |
56 |
+ .align 4 |
57 |
+ |
58 |
__syscall_sigreturn: |
59 |
mov sp, a0 |
60 |
ldi v0, __NR_sigreturn |
61 |
@@ -98,8 +105,11 @@ __syscall_sigreturn: |
62 |
.size __syscall_sigreturn, .-__syscall_sigreturn |
63 |
.type __syscall_sigreturn, @function |
64 |
|
65 |
- .align 4 |
66 |
+ /* See above wrt including the nop. */ |
67 |
cfi_def_cfa_offset (176 + 648) |
68 |
+ nop |
69 |
+ .align 4 |
70 |
+ |
71 |
__syscall_rt_sigreturn: |
72 |
mov sp,a0 |
73 |
ldi v0,__NR_rt_sigreturn |
74 |
-- |
75 |
1.8.4.3 |