1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
|
/*
* hppa linux kernel vdso replacement.
*
* Copyright 2023 Linaro, Ltd.
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
#include <asm/unistd.h>
#include "vdso-asmoffset.h"
.text
/*
* arch/parisc/kernel/vdso32/sigtramp.S:
* Gdb expects the trampoline is on the stack and the pc is offset from
* a 64-byte boundary by 0, 4 or 5 instructions. Since the vdso trampoline
* is not on the stack, we need a new variant with different offsets and
* data to tell gdb where to find the signal context on the stack.
*
* Here we put the offset to the context data at the start of the trampoline
* region and offset the first trampoline by 2 instructions. Please do
* not change the trampoline as the code in gdb depends on the following
* instruction sequence exactly.
*/
/* arch/parisc/kernel/asm-offsets.c */
#define SIGFRAME_CONTEXT_REGS32 \
(offsetof_sigcontext - PARISC_RT_SIGFRAME_SIZE32)
.align 64
.word SIGFRAME_CONTEXT_REGS32
/*
* All that said, we can provide a proper unwind record, which means that
* GDB should not actually need the offset magic.
*
* The return address that arrived here, from the inner frame, is
* not marked as a signal frame and so the unwinder still tries to
* subtract 1 to examine the presumed call insn. Thus we must
* extend the unwind info to a nop before the start.
*/
.cfi_startproc simple
.cfi_signal_frame
/* Compare pa32_fallback_frame_state from libgcc. */
/*
* Place the CFA at the start of sigcontext for convenience.
* The previous CFA will be restored from the saved stack pointer.
*/
.cfi_def_cfa 30, -PARISC_RT_SIGFRAME_SIZE32 + offsetof_sigcontext
/* Record save offset of general registers. */
.cfi_offset 1, offsetof_sigcontext_gr + 1 * 4
.cfi_offset 2, offsetof_sigcontext_gr + 2 * 4
.cfi_offset 3, offsetof_sigcontext_gr + 3 * 4
.cfi_offset 4, offsetof_sigcontext_gr + 4 * 4
.cfi_offset 5, offsetof_sigcontext_gr + 5 * 4
.cfi_offset 6, offsetof_sigcontext_gr + 6 * 4
.cfi_offset 7, offsetof_sigcontext_gr + 7 * 4
.cfi_offset 8, offsetof_sigcontext_gr + 8 * 4
.cfi_offset 9, offsetof_sigcontext_gr + 9 * 4
.cfi_offset 10, offsetof_sigcontext_gr + 10 * 4
.cfi_offset 11, offsetof_sigcontext_gr + 11 * 4
.cfi_offset 12, offsetof_sigcontext_gr + 12 * 4
.cfi_offset 13, offsetof_sigcontext_gr + 13 * 4
.cfi_offset 14, offsetof_sigcontext_gr + 14 * 4
.cfi_offset 15, offsetof_sigcontext_gr + 15 * 4
.cfi_offset 16, offsetof_sigcontext_gr + 16 * 4
.cfi_offset 17, offsetof_sigcontext_gr + 17 * 4
.cfi_offset 18, offsetof_sigcontext_gr + 18 * 4
.cfi_offset 19, offsetof_sigcontext_gr + 19 * 4
.cfi_offset 20, offsetof_sigcontext_gr + 20 * 4
.cfi_offset 21, offsetof_sigcontext_gr + 21 * 4
.cfi_offset 22, offsetof_sigcontext_gr + 22 * 4
.cfi_offset 23, offsetof_sigcontext_gr + 23 * 4
.cfi_offset 24, offsetof_sigcontext_gr + 24 * 4
.cfi_offset 25, offsetof_sigcontext_gr + 25 * 4
.cfi_offset 26, offsetof_sigcontext_gr + 26 * 4
.cfi_offset 27, offsetof_sigcontext_gr + 27 * 4
.cfi_offset 28, offsetof_sigcontext_gr + 28 * 4
.cfi_offset 29, offsetof_sigcontext_gr + 29 * 4
.cfi_offset 30, offsetof_sigcontext_gr + 30 * 4
.cfi_offset 31, offsetof_sigcontext_gr + 31 * 4
/* Record save offset of fp registers, left and right halves. */
.cfi_offset 32, offsetof_sigcontext_fr + 4 * 8
.cfi_offset 33, offsetof_sigcontext_fr + 4 * 8 + 4
.cfi_offset 34, offsetof_sigcontext_fr + 5 * 8
.cfi_offset 35, offsetof_sigcontext_fr + 5 * 8 + 4
.cfi_offset 36, offsetof_sigcontext_fr + 6 * 8
.cfi_offset 37, offsetof_sigcontext_fr + 6 * 8 + 4
.cfi_offset 38, offsetof_sigcontext_fr + 7 * 8
.cfi_offset 39, offsetof_sigcontext_fr + 7 * 8 + 4
.cfi_offset 40, offsetof_sigcontext_fr + 8 * 8
.cfi_offset 41, offsetof_sigcontext_fr + 8 * 8 + 4
.cfi_offset 42, offsetof_sigcontext_fr + 9 * 8
.cfi_offset 43, offsetof_sigcontext_fr + 9 * 8 + 4
.cfi_offset 44, offsetof_sigcontext_fr + 10 * 8
.cfi_offset 45, offsetof_sigcontext_fr + 10 * 8 + 4
.cfi_offset 46, offsetof_sigcontext_fr + 11 * 8
.cfi_offset 47, offsetof_sigcontext_fr + 11 * 8 + 4
.cfi_offset 48, offsetof_sigcontext_fr + 12 * 8
.cfi_offset 49, offsetof_sigcontext_fr + 12 * 8 + 4
.cfi_offset 50, offsetof_sigcontext_fr + 13 * 8
.cfi_offset 51, offsetof_sigcontext_fr + 13 * 8 + 4
.cfi_offset 52, offsetof_sigcontext_fr + 14 * 8
.cfi_offset 53, offsetof_sigcontext_fr + 14 * 8 + 4
.cfi_offset 54, offsetof_sigcontext_fr + 15 * 8
.cfi_offset 55, offsetof_sigcontext_fr + 15 * 8 + 4
.cfi_offset 56, offsetof_sigcontext_fr + 16 * 8
.cfi_offset 57, offsetof_sigcontext_fr + 16 * 8 + 4
.cfi_offset 58, offsetof_sigcontext_fr + 17 * 8
.cfi_offset 59, offsetof_sigcontext_fr + 17 * 8 + 4
.cfi_offset 60, offsetof_sigcontext_fr + 18 * 8
.cfi_offset 61, offsetof_sigcontext_fr + 18 * 8 + 4
.cfi_offset 62, offsetof_sigcontext_fr + 19 * 8
.cfi_offset 63, offsetof_sigcontext_fr + 19 * 8 + 4
.cfi_offset 64, offsetof_sigcontext_fr + 20 * 8
.cfi_offset 65, offsetof_sigcontext_fr + 20 * 8 + 4
.cfi_offset 66, offsetof_sigcontext_fr + 21 * 8
.cfi_offset 67, offsetof_sigcontext_fr + 21 * 8 + 4
.cfi_offset 68, offsetof_sigcontext_fr + 22 * 8
.cfi_offset 69, offsetof_sigcontext_fr + 22 * 8 + 4
.cfi_offset 70, offsetof_sigcontext_fr + 23 * 8
.cfi_offset 71, offsetof_sigcontext_fr + 23 * 8 + 4
.cfi_offset 72, offsetof_sigcontext_fr + 24 * 8
.cfi_offset 73, offsetof_sigcontext_fr + 24 * 8 + 4
.cfi_offset 74, offsetof_sigcontext_fr + 25 * 8
.cfi_offset 75, offsetof_sigcontext_fr + 25 * 8 + 4
.cfi_offset 76, offsetof_sigcontext_fr + 26 * 8
.cfi_offset 77, offsetof_sigcontext_fr + 26 * 8 + 4
.cfi_offset 78, offsetof_sigcontext_fr + 27 * 8
.cfi_offset 79, offsetof_sigcontext_fr + 27 * 8 + 4
.cfi_offset 80, offsetof_sigcontext_fr + 28 * 8
.cfi_offset 81, offsetof_sigcontext_fr + 28 * 8 + 4
.cfi_offset 82, offsetof_sigcontext_fr + 29 * 8
.cfi_offset 83, offsetof_sigcontext_fr + 29 * 8 + 4
.cfi_offset 84, offsetof_sigcontext_fr + 30 * 8
.cfi_offset 85, offsetof_sigcontext_fr + 30 * 8 + 4
.cfi_offset 86, offsetof_sigcontext_fr + 31 * 8
.cfi_offset 87, offsetof_sigcontext_fr + 31 * 8 + 4
/* Record save offset of %sar */
.cfi_offset 88, offsetof_sigcontext_sar
/* Record save offset of return address, iaoq[0]. */
.cfi_return_column 89
.cfi_offset 89, offsetof_sigcontext_iaoq
nop
__kernel_sigtramp_rt:
ldi 0, %r25
ldi __NR_rt_sigreturn, %r20
be,l 0x100(%sr2, %r0), %sr0, %r31
nop
.cfi_endproc
.size __kernel_sigtramp_rt, . - __kernel_sigtramp_rt
.type __kernel_sigtramp_rt, @function
.globl __kernel_sigtramp_rt
|