s390/vdso: correct CFI annotations of vDSO functions
authorVasily Gorbik <gor@linux.ibm.com>
Fri, 14 Sep 2018 16:08:10 +0000 (18:08 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Thu, 20 Sep 2018 11:20:29 +0000 (13:20 +0200)
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>
arch/s390/kernel/vdso32/clock_gettime.S
arch/s390/kernel/vdso32/gettimeofday.S
arch/s390/kernel/vdso64/clock_gettime.S
arch/s390/kernel/vdso64/gettimeofday.S

index a9418bf..ada5c11 100644 (file)
@@ -10,6 +10,7 @@
 #include <asm/asm-offsets.h>
 #include <asm/unistd.h>
 #include <asm/dwarf.h>
+#include <asm/ptrace.h>
 
        .text
        .align 4
@@ -18,8 +19,8 @@
 __kernel_clock_gettime:
        CFI_STARTPROC
        ahi     %r15,-16
-       CFI_DEF_CFA_OFFSET 176
-       CFI_VAL_OFFSET 15, -160
+       CFI_DEF_CFA_OFFSET STACK_FRAME_OVERHEAD+16
+       CFI_VAL_OFFSET 15, -STACK_FRAME_OVERHEAD
        basr    %r5,0
 0:     al      %r5,21f-0b(%r5)                 /* get &_vdso_data */
        chi     %r2,__CLOCK_REALTIME_COARSE
@@ -72,13 +73,13 @@ __kernel_clock_gettime:
        st      %r1,4(%r3)                      /* store tp->tv_nsec */
        lhi     %r2,0
        ahi     %r15,16
-       CFI_DEF_CFA_OFFSET 160
+       CFI_DEF_CFA_OFFSET STACK_FRAME_OVERHEAD
        CFI_RESTORE 15
        br      %r14
 
        /* CLOCK_MONOTONIC_COARSE */
-       CFI_DEF_CFA_OFFSET 176
-       CFI_VAL_OFFSET 15, -160
+       CFI_DEF_CFA_OFFSET STACK_FRAME_OVERHEAD+16
+       CFI_VAL_OFFSET 15, -STACK_FRAME_OVERHEAD
 9:     l       %r4,__VDSO_UPD_COUNT+4(%r5)     /* load update counter */
        tml     %r4,0x0001                      /* pending update ? loop */
        jnz     9b
@@ -158,17 +159,17 @@ __kernel_clock_gettime:
        st      %r1,4(%r3)                      /* store tp->tv_nsec */
        lhi     %r2,0
        ahi     %r15,16
-       CFI_DEF_CFA_OFFSET 160
+       CFI_DEF_CFA_OFFSET STACK_FRAME_OVERHEAD
        CFI_RESTORE 15
        br      %r14
 
        /* Fallback to system call */
-       CFI_DEF_CFA_OFFSET 176
-       CFI_VAL_OFFSET 15, -160
+       CFI_DEF_CFA_OFFSET STACK_FRAME_OVERHEAD+16
+       CFI_VAL_OFFSET 15, -STACK_FRAME_OVERHEAD
 19:    lhi     %r1,__NR_clock_gettime
        svc     0
        ahi     %r15,16
-       CFI_DEF_CFA_OFFSET 160
+       CFI_DEF_CFA_OFFSET STACK_FRAME_OVERHEAD
        CFI_RESTORE 15
        br      %r14
        CFI_ENDPROC
index 3c0db0f..b23063f 100644 (file)
@@ -10,6 +10,7 @@
 #include <asm/asm-offsets.h>
 #include <asm/unistd.h>
 #include <asm/dwarf.h>
+#include <asm/ptrace.h>
 
        .text
        .align 4
@@ -19,7 +20,7 @@ __kernel_gettimeofday:
        CFI_STARTPROC
        ahi     %r15,-16
        CFI_ADJUST_CFA_OFFSET 16
-       CFI_VAL_OFFSET 15, -160
+       CFI_VAL_OFFSET 15, -STACK_FRAME_OVERHEAD
        basr    %r5,0
 0:     al      %r5,13f-0b(%r5)                 /* get &_vdso_data */
 1:     ltr     %r3,%r3                         /* check if tz is NULL */
index fac3ab5..9d2ee79 100644 (file)
@@ -10,6 +10,7 @@
 #include <asm/asm-offsets.h>
 #include <asm/unistd.h>
 #include <asm/dwarf.h>
+#include <asm/ptrace.h>
 
        .text
        .align 4
@@ -18,8 +19,8 @@
 __kernel_clock_gettime:
        CFI_STARTPROC
        aghi    %r15,-16
-       CFI_DEF_CFA_OFFSET 176
-       CFI_VAL_OFFSET 15, -160
+       CFI_DEF_CFA_OFFSET STACK_FRAME_OVERHEAD+16
+       CFI_VAL_OFFSET 15, -STACK_FRAME_OVERHEAD
        larl    %r5,_vdso_data
        cghi    %r2,__CLOCK_REALTIME_COARSE
        je      4f
@@ -56,13 +57,13 @@ __kernel_clock_gettime:
        stg     %r1,8(%r3)                      /* store tp->tv_nsec */
        lghi    %r2,0
        aghi    %r15,16
-       CFI_DEF_CFA_OFFSET 160
+       CFI_DEF_CFA_OFFSET STACK_FRAME_OVERHEAD
        CFI_RESTORE 15
        br      %r14
 
        /* CLOCK_MONOTONIC_COARSE */
-       CFI_DEF_CFA_OFFSET 176
-       CFI_VAL_OFFSET 15, -160
+       CFI_DEF_CFA_OFFSET STACK_FRAME_OVERHEAD+16
+       CFI_VAL_OFFSET 15, -STACK_FRAME_OVERHEAD
 3:     lg      %r4,__VDSO_UPD_COUNT(%r5)       /* load update counter */
        tmll    %r4,0x0001                      /* pending update ? loop */
        jnz     3b
@@ -115,13 +116,13 @@ __kernel_clock_gettime:
        stg     %r1,8(%r3)                      /* store tp->tv_nsec */
        lghi    %r2,0
        aghi    %r15,16
-       CFI_DEF_CFA_OFFSET 160
+       CFI_DEF_CFA_OFFSET STACK_FRAME_OVERHEAD
        CFI_RESTORE 15
        br      %r14
 
        /* CPUCLOCK_VIRT for this thread */
-       CFI_DEF_CFA_OFFSET 176
-       CFI_VAL_OFFSET 15, -160
+       CFI_DEF_CFA_OFFSET STACK_FRAME_OVERHEAD+16
+       CFI_VAL_OFFSET 15, -STACK_FRAME_OVERHEAD
 9:     lghi    %r4,0
        icm     %r0,15,__VDSO_ECTG_OK(%r5)
        jz      12f
@@ -142,17 +143,17 @@ __kernel_clock_gettime:
        stg     %r4,8(%r3)
        lghi    %r2,0
        aghi    %r15,16
-       CFI_DEF_CFA_OFFSET 160
+       CFI_DEF_CFA_OFFSET STACK_FRAME_OVERHEAD
        CFI_RESTORE 15
        br      %r14
 
        /* Fallback to system call */
-       CFI_DEF_CFA_OFFSET 176
-       CFI_VAL_OFFSET 15, -160
+       CFI_DEF_CFA_OFFSET STACK_FRAME_OVERHEAD+16
+       CFI_VAL_OFFSET 15, -STACK_FRAME_OVERHEAD
 12:    lghi    %r1,__NR_clock_gettime
        svc     0
        aghi    %r15,16
-       CFI_DEF_CFA_OFFSET 160
+       CFI_DEF_CFA_OFFSET STACK_FRAME_OVERHEAD
        CFI_RESTORE 15
        br      %r14
        CFI_ENDPROC
index 6e1f0b4..aebe10d 100644 (file)
@@ -10,6 +10,7 @@
 #include <asm/asm-offsets.h>
 #include <asm/unistd.h>
 #include <asm/dwarf.h>
+#include <asm/ptrace.h>
 
        .text
        .align 4
@@ -19,7 +20,7 @@ __kernel_gettimeofday:
        CFI_STARTPROC
        aghi    %r15,-16
        CFI_ADJUST_CFA_OFFSET 16
-       CFI_VAL_OFFSET 15, -160
+       CFI_VAL_OFFSET 15, -STACK_FRAME_OVERHEAD
        larl    %r5,_vdso_data
 0:     ltgr    %r3,%r3                         /* check if tz is NULL */
        je      1f