Commit 26f4414a authored by Vasily Gorbik's avatar Vasily Gorbik Committed by Martin Schwidefsky

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: default avatarHendrik Brueckner <brueckner@linux.ibm.com>
Signed-off-by: default avatarVasily Gorbik <gor@linux.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent d1befa65
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include <asm/asm-offsets.h> #include <asm/asm-offsets.h>
#include <asm/unistd.h> #include <asm/unistd.h>
#include <asm/dwarf.h> #include <asm/dwarf.h>
#include <asm/ptrace.h>
.text .text
.align 4 .align 4
...@@ -18,8 +19,8 @@ ...@@ -18,8 +19,8 @@
__kernel_clock_gettime: __kernel_clock_gettime:
CFI_STARTPROC CFI_STARTPROC
ahi %r15,-16 ahi %r15,-16
CFI_DEF_CFA_OFFSET 176 CFI_DEF_CFA_OFFSET STACK_FRAME_OVERHEAD+16
CFI_VAL_OFFSET 15, -160 CFI_VAL_OFFSET 15, -STACK_FRAME_OVERHEAD
basr %r5,0 basr %r5,0
0: al %r5,21f-0b(%r5) /* get &_vdso_data */ 0: al %r5,21f-0b(%r5) /* get &_vdso_data */
chi %r2,__CLOCK_REALTIME_COARSE chi %r2,__CLOCK_REALTIME_COARSE
...@@ -72,13 +73,13 @@ __kernel_clock_gettime: ...@@ -72,13 +73,13 @@ __kernel_clock_gettime:
st %r1,4(%r3) /* store tp->tv_nsec */ st %r1,4(%r3) /* store tp->tv_nsec */
lhi %r2,0 lhi %r2,0
ahi %r15,16 ahi %r15,16
CFI_DEF_CFA_OFFSET 160 CFI_DEF_CFA_OFFSET STACK_FRAME_OVERHEAD
CFI_RESTORE 15 CFI_RESTORE 15
br %r14 br %r14
/* CLOCK_MONOTONIC_COARSE */ /* CLOCK_MONOTONIC_COARSE */
CFI_DEF_CFA_OFFSET 176 CFI_DEF_CFA_OFFSET STACK_FRAME_OVERHEAD+16
CFI_VAL_OFFSET 15, -160 CFI_VAL_OFFSET 15, -STACK_FRAME_OVERHEAD
9: l %r4,__VDSO_UPD_COUNT+4(%r5) /* load update counter */ 9: l %r4,__VDSO_UPD_COUNT+4(%r5) /* load update counter */
tml %r4,0x0001 /* pending update ? loop */ tml %r4,0x0001 /* pending update ? loop */
jnz 9b jnz 9b
...@@ -158,17 +159,17 @@ __kernel_clock_gettime: ...@@ -158,17 +159,17 @@ __kernel_clock_gettime:
st %r1,4(%r3) /* store tp->tv_nsec */ st %r1,4(%r3) /* store tp->tv_nsec */
lhi %r2,0 lhi %r2,0
ahi %r15,16 ahi %r15,16
CFI_DEF_CFA_OFFSET 160 CFI_DEF_CFA_OFFSET STACK_FRAME_OVERHEAD
CFI_RESTORE 15 CFI_RESTORE 15
br %r14 br %r14
/* Fallback to system call */ /* Fallback to system call */
CFI_DEF_CFA_OFFSET 176 CFI_DEF_CFA_OFFSET STACK_FRAME_OVERHEAD+16
CFI_VAL_OFFSET 15, -160 CFI_VAL_OFFSET 15, -STACK_FRAME_OVERHEAD
19: lhi %r1,__NR_clock_gettime 19: lhi %r1,__NR_clock_gettime
svc 0 svc 0
ahi %r15,16 ahi %r15,16
CFI_DEF_CFA_OFFSET 160 CFI_DEF_CFA_OFFSET STACK_FRAME_OVERHEAD
CFI_RESTORE 15 CFI_RESTORE 15
br %r14 br %r14
CFI_ENDPROC CFI_ENDPROC
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include <asm/asm-offsets.h> #include <asm/asm-offsets.h>
#include <asm/unistd.h> #include <asm/unistd.h>
#include <asm/dwarf.h> #include <asm/dwarf.h>
#include <asm/ptrace.h>
.text .text
.align 4 .align 4
...@@ -19,7 +20,7 @@ __kernel_gettimeofday: ...@@ -19,7 +20,7 @@ __kernel_gettimeofday:
CFI_STARTPROC CFI_STARTPROC
ahi %r15,-16 ahi %r15,-16
CFI_ADJUST_CFA_OFFSET 16 CFI_ADJUST_CFA_OFFSET 16
CFI_VAL_OFFSET 15, -160 CFI_VAL_OFFSET 15, -STACK_FRAME_OVERHEAD
basr %r5,0 basr %r5,0
0: al %r5,13f-0b(%r5) /* get &_vdso_data */ 0: al %r5,13f-0b(%r5) /* get &_vdso_data */
1: ltr %r3,%r3 /* check if tz is NULL */ 1: ltr %r3,%r3 /* check if tz is NULL */
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include <asm/asm-offsets.h> #include <asm/asm-offsets.h>
#include <asm/unistd.h> #include <asm/unistd.h>
#include <asm/dwarf.h> #include <asm/dwarf.h>
#include <asm/ptrace.h>
.text .text
.align 4 .align 4
...@@ -18,8 +19,8 @@ ...@@ -18,8 +19,8 @@
__kernel_clock_gettime: __kernel_clock_gettime:
CFI_STARTPROC CFI_STARTPROC
aghi %r15,-16 aghi %r15,-16
CFI_DEF_CFA_OFFSET 176 CFI_DEF_CFA_OFFSET STACK_FRAME_OVERHEAD+16
CFI_VAL_OFFSET 15, -160 CFI_VAL_OFFSET 15, -STACK_FRAME_OVERHEAD
larl %r5,_vdso_data larl %r5,_vdso_data
cghi %r2,__CLOCK_REALTIME_COARSE cghi %r2,__CLOCK_REALTIME_COARSE
je 4f je 4f
...@@ -56,13 +57,13 @@ __kernel_clock_gettime: ...@@ -56,13 +57,13 @@ __kernel_clock_gettime:
stg %r1,8(%r3) /* store tp->tv_nsec */ stg %r1,8(%r3) /* store tp->tv_nsec */
lghi %r2,0 lghi %r2,0
aghi %r15,16 aghi %r15,16
CFI_DEF_CFA_OFFSET 160 CFI_DEF_CFA_OFFSET STACK_FRAME_OVERHEAD
CFI_RESTORE 15 CFI_RESTORE 15
br %r14 br %r14
/* CLOCK_MONOTONIC_COARSE */ /* CLOCK_MONOTONIC_COARSE */
CFI_DEF_CFA_OFFSET 176 CFI_DEF_CFA_OFFSET STACK_FRAME_OVERHEAD+16
CFI_VAL_OFFSET 15, -160 CFI_VAL_OFFSET 15, -STACK_FRAME_OVERHEAD
3: lg %r4,__VDSO_UPD_COUNT(%r5) /* load update counter */ 3: lg %r4,__VDSO_UPD_COUNT(%r5) /* load update counter */
tmll %r4,0x0001 /* pending update ? loop */ tmll %r4,0x0001 /* pending update ? loop */
jnz 3b jnz 3b
...@@ -115,13 +116,13 @@ __kernel_clock_gettime: ...@@ -115,13 +116,13 @@ __kernel_clock_gettime:
stg %r1,8(%r3) /* store tp->tv_nsec */ stg %r1,8(%r3) /* store tp->tv_nsec */
lghi %r2,0 lghi %r2,0
aghi %r15,16 aghi %r15,16
CFI_DEF_CFA_OFFSET 160 CFI_DEF_CFA_OFFSET STACK_FRAME_OVERHEAD
CFI_RESTORE 15 CFI_RESTORE 15
br %r14 br %r14
/* CPUCLOCK_VIRT for this thread */ /* CPUCLOCK_VIRT for this thread */
CFI_DEF_CFA_OFFSET 176 CFI_DEF_CFA_OFFSET STACK_FRAME_OVERHEAD+16
CFI_VAL_OFFSET 15, -160 CFI_VAL_OFFSET 15, -STACK_FRAME_OVERHEAD
9: lghi %r4,0 9: lghi %r4,0
icm %r0,15,__VDSO_ECTG_OK(%r5) icm %r0,15,__VDSO_ECTG_OK(%r5)
jz 12f jz 12f
...@@ -142,17 +143,17 @@ __kernel_clock_gettime: ...@@ -142,17 +143,17 @@ __kernel_clock_gettime:
stg %r4,8(%r3) stg %r4,8(%r3)
lghi %r2,0 lghi %r2,0
aghi %r15,16 aghi %r15,16
CFI_DEF_CFA_OFFSET 160 CFI_DEF_CFA_OFFSET STACK_FRAME_OVERHEAD
CFI_RESTORE 15 CFI_RESTORE 15
br %r14 br %r14
/* Fallback to system call */ /* Fallback to system call */
CFI_DEF_CFA_OFFSET 176 CFI_DEF_CFA_OFFSET STACK_FRAME_OVERHEAD+16
CFI_VAL_OFFSET 15, -160 CFI_VAL_OFFSET 15, -STACK_FRAME_OVERHEAD
12: lghi %r1,__NR_clock_gettime 12: lghi %r1,__NR_clock_gettime
svc 0 svc 0
aghi %r15,16 aghi %r15,16
CFI_DEF_CFA_OFFSET 160 CFI_DEF_CFA_OFFSET STACK_FRAME_OVERHEAD
CFI_RESTORE 15 CFI_RESTORE 15
br %r14 br %r14
CFI_ENDPROC CFI_ENDPROC
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include <asm/asm-offsets.h> #include <asm/asm-offsets.h>
#include <asm/unistd.h> #include <asm/unistd.h>
#include <asm/dwarf.h> #include <asm/dwarf.h>
#include <asm/ptrace.h>
.text .text
.align 4 .align 4
...@@ -19,7 +20,7 @@ __kernel_gettimeofday: ...@@ -19,7 +20,7 @@ __kernel_gettimeofday:
CFI_STARTPROC CFI_STARTPROC
aghi %r15,-16 aghi %r15,-16
CFI_ADJUST_CFA_OFFSET 16 CFI_ADJUST_CFA_OFFSET 16
CFI_VAL_OFFSET 15, -160 CFI_VAL_OFFSET 15, -STACK_FRAME_OVERHEAD
larl %r5,_vdso_data larl %r5,_vdso_data
0: ltgr %r3,%r3 /* check if tz is NULL */ 0: ltgr %r3,%r3 /* check if tz is NULL */
je 1f je 1f
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment