aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVasily Gorbik <gor@linux.ibm.com>2018-09-14 12:08:10 -0400
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2018-09-20 07:20:29 -0400
commit26f4414a45b808f83d42d6fd2fbf4a59ef25e84b (patch)
treeb0c8dc5f007a5e13ca0794252777a454980be27e
parentd1befa65823e9c6d013883b8a41d081ec338c489 (diff)
s390/vdso: correct CFI annotations of vDSO functions
Correct stack frame overhead for 31-bit vdso, which should be 96 rather then 160. This is done by reusing STACK_FRAME_OVERHEAD definition which contains correct value based on build flags. This fixes stack unwinding within vdso code for 31-bit processes. While at it replace all hard coded stack frame overhead values with the same definition in vdso64 as well. Reviewed-by: Hendrik Brueckner <brueckner@linux.ibm.com> Signed-off-by: Vasily Gorbik <gor@linux.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
-rw-r--r--arch/s390/kernel/vdso32/clock_gettime.S19
-rw-r--r--arch/s390/kernel/vdso32/gettimeofday.S3
-rw-r--r--arch/s390/kernel/vdso64/clock_gettime.S25
-rw-r--r--arch/s390/kernel/vdso64/gettimeofday.S3
4 files changed, 27 insertions, 23 deletions
diff --git a/arch/s390/kernel/vdso32/clock_gettime.S b/arch/s390/kernel/vdso32/clock_gettime.S
index a9418bf975db..ada5c11a16e5 100644
--- a/arch/s390/kernel/vdso32/clock_gettime.S
+++ b/arch/s390/kernel/vdso32/clock_gettime.S
@@ -10,6 +10,7 @@
10#include <asm/asm-offsets.h> 10#include <asm/asm-offsets.h>
11#include <asm/unistd.h> 11#include <asm/unistd.h>
12#include <asm/dwarf.h> 12#include <asm/dwarf.h>
13#include <asm/ptrace.h>
13 14
14 .text 15 .text
15 .align 4 16 .align 4
@@ -18,8 +19,8 @@
18__kernel_clock_gettime: 19__kernel_clock_gettime:
19 CFI_STARTPROC 20 CFI_STARTPROC
20 ahi %r15,-16 21 ahi %r15,-16
21 CFI_DEF_CFA_OFFSET 176 22 CFI_DEF_CFA_OFFSET STACK_FRAME_OVERHEAD+16
22 CFI_VAL_OFFSET 15, -160 23 CFI_VAL_OFFSET 15, -STACK_FRAME_OVERHEAD
23 basr %r5,0 24 basr %r5,0
240: al %r5,21f-0b(%r5) /* get &_vdso_data */ 250: al %r5,21f-0b(%r5) /* get &_vdso_data */
25 chi %r2,__CLOCK_REALTIME_COARSE 26 chi %r2,__CLOCK_REALTIME_COARSE
@@ -72,13 +73,13 @@ __kernel_clock_gettime:
72 st %r1,4(%r3) /* store tp->tv_nsec */ 73 st %r1,4(%r3) /* store tp->tv_nsec */
73 lhi %r2,0 74 lhi %r2,0
74 ahi %r15,16 75 ahi %r15,16
75 CFI_DEF_CFA_OFFSET 160 76 CFI_DEF_CFA_OFFSET STACK_FRAME_OVERHEAD
76 CFI_RESTORE 15 77 CFI_RESTORE 15
77 br %r14 78 br %r14
78 79
79 /* CLOCK_MONOTONIC_COARSE */ 80 /* CLOCK_MONOTONIC_COARSE */
80 CFI_DEF_CFA_OFFSET 176 81 CFI_DEF_CFA_OFFSET STACK_FRAME_OVERHEAD+16
81 CFI_VAL_OFFSET 15, -160 82 CFI_VAL_OFFSET 15, -STACK_FRAME_OVERHEAD
829: l %r4,__VDSO_UPD_COUNT+4(%r5) /* load update counter */ 839: l %r4,__VDSO_UPD_COUNT+4(%r5) /* load update counter */
83 tml %r4,0x0001 /* pending update ? loop */ 84 tml %r4,0x0001 /* pending update ? loop */
84 jnz 9b 85 jnz 9b
@@ -158,17 +159,17 @@ __kernel_clock_gettime:
158 st %r1,4(%r3) /* store tp->tv_nsec */ 159 st %r1,4(%r3) /* store tp->tv_nsec */
159 lhi %r2,0 160 lhi %r2,0
160 ahi %r15,16 161 ahi %r15,16
161 CFI_DEF_CFA_OFFSET 160 162 CFI_DEF_CFA_OFFSET STACK_FRAME_OVERHEAD
162 CFI_RESTORE 15 163 CFI_RESTORE 15
163 br %r14 164 br %r14
164 165
165 /* Fallback to system call */ 166 /* Fallback to system call */
166 CFI_DEF_CFA_OFFSET 176 167 CFI_DEF_CFA_OFFSET STACK_FRAME_OVERHEAD+16
167 CFI_VAL_OFFSET 15, -160 168 CFI_VAL_OFFSET 15, -STACK_FRAME_OVERHEAD
16819: lhi %r1,__NR_clock_gettime 16919: lhi %r1,__NR_clock_gettime
169 svc 0 170 svc 0
170 ahi %r15,16 171 ahi %r15,16
171 CFI_DEF_CFA_OFFSET 160 172 CFI_DEF_CFA_OFFSET STACK_FRAME_OVERHEAD
172 CFI_RESTORE 15 173 CFI_RESTORE 15
173 br %r14 174 br %r14
174 CFI_ENDPROC 175 CFI_ENDPROC
diff --git a/arch/s390/kernel/vdso32/gettimeofday.S b/arch/s390/kernel/vdso32/gettimeofday.S
index 3c0db0fa6ad9..b23063fbc892 100644
--- a/arch/s390/kernel/vdso32/gettimeofday.S
+++ b/arch/s390/kernel/vdso32/gettimeofday.S
@@ -10,6 +10,7 @@
10#include <asm/asm-offsets.h> 10#include <asm/asm-offsets.h>
11#include <asm/unistd.h> 11#include <asm/unistd.h>
12#include <asm/dwarf.h> 12#include <asm/dwarf.h>
13#include <asm/ptrace.h>
13 14
14 .text 15 .text
15 .align 4 16 .align 4
@@ -19,7 +20,7 @@ __kernel_gettimeofday:
19 CFI_STARTPROC 20 CFI_STARTPROC
20 ahi %r15,-16 21 ahi %r15,-16
21 CFI_ADJUST_CFA_OFFSET 16 22 CFI_ADJUST_CFA_OFFSET 16
22 CFI_VAL_OFFSET 15, -160 23 CFI_VAL_OFFSET 15, -STACK_FRAME_OVERHEAD
23 basr %r5,0 24 basr %r5,0
240: al %r5,13f-0b(%r5) /* get &_vdso_data */ 250: al %r5,13f-0b(%r5) /* get &_vdso_data */
251: ltr %r3,%r3 /* check if tz is NULL */ 261: ltr %r3,%r3 /* check if tz is NULL */
diff --git a/arch/s390/kernel/vdso64/clock_gettime.S b/arch/s390/kernel/vdso64/clock_gettime.S
index fac3ab5ec83a..9d2ee79b90f2 100644
--- a/arch/s390/kernel/vdso64/clock_gettime.S
+++ b/arch/s390/kernel/vdso64/clock_gettime.S
@@ -10,6 +10,7 @@
10#include <asm/asm-offsets.h> 10#include <asm/asm-offsets.h>
11#include <asm/unistd.h> 11#include <asm/unistd.h>
12#include <asm/dwarf.h> 12#include <asm/dwarf.h>
13#include <asm/ptrace.h>
13 14
14 .text 15 .text
15 .align 4 16 .align 4
@@ -18,8 +19,8 @@
18__kernel_clock_gettime: 19__kernel_clock_gettime:
19 CFI_STARTPROC 20 CFI_STARTPROC
20 aghi %r15,-16 21 aghi %r15,-16
21 CFI_DEF_CFA_OFFSET 176 22 CFI_DEF_CFA_OFFSET STACK_FRAME_OVERHEAD+16
22 CFI_VAL_OFFSET 15, -160 23 CFI_VAL_OFFSET 15, -STACK_FRAME_OVERHEAD
23 larl %r5,_vdso_data 24 larl %r5,_vdso_data
24 cghi %r2,__CLOCK_REALTIME_COARSE 25 cghi %r2,__CLOCK_REALTIME_COARSE
25 je 4f 26 je 4f
@@ -56,13 +57,13 @@ __kernel_clock_gettime:
56 stg %r1,8(%r3) /* store tp->tv_nsec */ 57 stg %r1,8(%r3) /* store tp->tv_nsec */
57 lghi %r2,0 58 lghi %r2,0
58 aghi %r15,16 59 aghi %r15,16
59 CFI_DEF_CFA_OFFSET 160 60 CFI_DEF_CFA_OFFSET STACK_FRAME_OVERHEAD
60 CFI_RESTORE 15 61 CFI_RESTORE 15
61 br %r14 62 br %r14
62 63
63 /* CLOCK_MONOTONIC_COARSE */ 64 /* CLOCK_MONOTONIC_COARSE */
64 CFI_DEF_CFA_OFFSET 176 65 CFI_DEF_CFA_OFFSET STACK_FRAME_OVERHEAD+16
65 CFI_VAL_OFFSET 15, -160 66 CFI_VAL_OFFSET 15, -STACK_FRAME_OVERHEAD
663: lg %r4,__VDSO_UPD_COUNT(%r5) /* load update counter */ 673: lg %r4,__VDSO_UPD_COUNT(%r5) /* load update counter */
67 tmll %r4,0x0001 /* pending update ? loop */ 68 tmll %r4,0x0001 /* pending update ? loop */
68 jnz 3b 69 jnz 3b
@@ -115,13 +116,13 @@ __kernel_clock_gettime:
115 stg %r1,8(%r3) /* store tp->tv_nsec */ 116 stg %r1,8(%r3) /* store tp->tv_nsec */
116 lghi %r2,0 117 lghi %r2,0
117 aghi %r15,16 118 aghi %r15,16
118 CFI_DEF_CFA_OFFSET 160 119 CFI_DEF_CFA_OFFSET STACK_FRAME_OVERHEAD
119 CFI_RESTORE 15 120 CFI_RESTORE 15
120 br %r14 121 br %r14
121 122
122 /* CPUCLOCK_VIRT for this thread */ 123 /* CPUCLOCK_VIRT for this thread */
123 CFI_DEF_CFA_OFFSET 176 124 CFI_DEF_CFA_OFFSET STACK_FRAME_OVERHEAD+16
124 CFI_VAL_OFFSET 15, -160 125 CFI_VAL_OFFSET 15, -STACK_FRAME_OVERHEAD
1259: lghi %r4,0 1269: lghi %r4,0
126 icm %r0,15,__VDSO_ECTG_OK(%r5) 127 icm %r0,15,__VDSO_ECTG_OK(%r5)
127 jz 12f 128 jz 12f
@@ -142,17 +143,17 @@ __kernel_clock_gettime:
142 stg %r4,8(%r3) 143 stg %r4,8(%r3)
143 lghi %r2,0 144 lghi %r2,0
144 aghi %r15,16 145 aghi %r15,16
145 CFI_DEF_CFA_OFFSET 160 146 CFI_DEF_CFA_OFFSET STACK_FRAME_OVERHEAD
146 CFI_RESTORE 15 147 CFI_RESTORE 15
147 br %r14 148 br %r14
148 149
149 /* Fallback to system call */ 150 /* Fallback to system call */
150 CFI_DEF_CFA_OFFSET 176 151 CFI_DEF_CFA_OFFSET STACK_FRAME_OVERHEAD+16
151 CFI_VAL_OFFSET 15, -160 152 CFI_VAL_OFFSET 15, -STACK_FRAME_OVERHEAD
15212: lghi %r1,__NR_clock_gettime 15312: lghi %r1,__NR_clock_gettime
153 svc 0 154 svc 0
154 aghi %r15,16 155 aghi %r15,16
155 CFI_DEF_CFA_OFFSET 160 156 CFI_DEF_CFA_OFFSET STACK_FRAME_OVERHEAD
156 CFI_RESTORE 15 157 CFI_RESTORE 15
157 br %r14 158 br %r14
158 CFI_ENDPROC 159 CFI_ENDPROC
diff --git a/arch/s390/kernel/vdso64/gettimeofday.S b/arch/s390/kernel/vdso64/gettimeofday.S
index 6e1f0b421695..aebe10dc7c99 100644
--- a/arch/s390/kernel/vdso64/gettimeofday.S
+++ b/arch/s390/kernel/vdso64/gettimeofday.S
@@ -10,6 +10,7 @@
10#include <asm/asm-offsets.h> 10#include <asm/asm-offsets.h>
11#include <asm/unistd.h> 11#include <asm/unistd.h>
12#include <asm/dwarf.h> 12#include <asm/dwarf.h>
13#include <asm/ptrace.h>
13 14
14 .text 15 .text
15 .align 4 16 .align 4
@@ -19,7 +20,7 @@ __kernel_gettimeofday:
19 CFI_STARTPROC 20 CFI_STARTPROC
20 aghi %r15,-16 21 aghi %r15,-16
21 CFI_ADJUST_CFA_OFFSET 16 22 CFI_ADJUST_CFA_OFFSET 16
22 CFI_VAL_OFFSET 15, -160 23 CFI_VAL_OFFSET 15, -STACK_FRAME_OVERHEAD
23 larl %r5,_vdso_data 24 larl %r5,_vdso_data
240: ltgr %r3,%r3 /* check if tz is NULL */ 250: ltgr %r3,%r3 /* check if tz is NULL */
25 je 1f 26 je 1f