]> git.hungrycats.org Git - linux/commitdiff
[PATCH] s390: ptrace.
authorMartin Schwidefsky <schwidefsky@de.ibm.com>
Tue, 1 Jul 2003 09:16:46 +0000 (02:16 -0700)
committerLinus Torvalds <torvalds@home.osdl.org>
Tue, 1 Jul 2003 09:16:46 +0000 (02:16 -0700)
Fix ptrace system call number replacement code.

arch/s390/kernel/entry.S
arch/s390/kernel/entry64.S

index 89de80ee4a48578edc6fb8de817af9e93d2a194d..6192dfd1271b74bc9d23e5506962d8a2b0038c68 100644 (file)
@@ -267,7 +267,7 @@ sysc_tracesys:
        st      %r7,SP_R2(%r15)
        basr    %r14,%r1
        clc     SP_R2(4,%r15),BASED(.Lnr_syscalls)
-       bl      BASED(sysc_tracego)
+       bnl     BASED(sysc_tracenogo)
        l       %r7,SP_R2(%r15)        # strace might have changed the 
        sll     %r7,2                  #  system call
        l       %r8,sys_call_table-entry_base(%r7,%r13)
@@ -276,6 +276,7 @@ sysc_tracego:
        l       %r2,SP_ORIG_R2(%r15)
        basr    %r14,%r8          # call sys_xxx
        st      %r2,SP_R2(%r15)   # store return value
+sysc_tracenogo:
        tm      __TI_flags+3(%r9),_TIF_SYSCALL_TRACE
         bno     BASED(sysc_return)
        l       %r1,BASED(.Ltrace)
@@ -486,7 +487,7 @@ pgm_tracesys:
        st      %r7,SP_R2(%r15)
         basr    %r14,%r1
        clc     SP_R2(4,%r15),BASED(.Lnr_syscalls)
-       bl      BASED(pgm_svc_go)
+       bnl     BASED(pgm_svc_nogo)
        l       %r7,SP_R2(%r15)   # strace changed the syscall
        sll     %r7,2
        l       %r8,sys_call_table-entry_base(%r7,%r13)
@@ -495,6 +496,7 @@ pgm_svc_go:
        l       %r2,SP_ORIG_R2(%r15)
         basr    %r14,%r8          # call sys_xxx
         st      %r2,SP_R2(%r15)   # store return value
+pgm_svc_nogo:
        tm      __TI_flags+3(%r9),_TIF_SYSCALL_TRACE
         bno     BASED(pgm_svcret)
         l       %r1,BASED(.Ltrace)
index 6ce5f4cef1d95db990cf99ed594c41633b18049b..40efb385eda9e802fe9b12cbb2d195d365b7fc7d 100644 (file)
@@ -254,7 +254,7 @@ sysc_tracesys:
         brasl   %r14,syscall_trace
        larl    %r1,.Lnr_syscalls
        clc     SP_R2(8,%r15),0(%r1)
-       jl      sysc_tracego
+       jnl     sysc_tracenogo
        lg      %r7,SP_R2(%r15)   # strace might have changed the
        sll     %r7,2             #  system call
        lgf     %r8,0(%r7,%r10)
@@ -263,6 +263,7 @@ sysc_tracego:
        lg      %r2,SP_ORIG_R2(%r15)
         basr    %r14,%r8            # call sys_xxx
         stg     %r2,SP_R2(%r15)     # store return value
+sysc_tracenogo:
        tm      __TI_flags+7(%r9),_TIF_SYSCALL_TRACE
         jno     sysc_return
        larl    %r14,sysc_return    # return point is sysc_return
@@ -481,7 +482,7 @@ pgm_per_only:
 #
 pgm_svcper:
        SAVE_ALL __LC_SVC_OLD_PSW,1
-       llgh    %r8,__LC_SVC_INT_CODE # get svc number from lowcore
+       llgh    %r7,__LC_SVC_INT_CODE # get svc number from lowcore
        stosm   48(%r15),0x03     # reenable interrupts
         GET_THREAD_INFO           # load pointer to task_struct to R9
        slag    %r7,%r7,2         # *4 and test for svc 0
@@ -490,15 +491,15 @@ pgm_svcper:
        clg     %r1,.Lnr_syscalls-.Lconst(%r14)
        slag    %r7,%r1,2
 pgm_svcstd:
-       larl    %r7,sys_call_table
+       larl    %r10,sys_call_table
 #ifdef CONFIG_S390_SUPPORT
         tm      SP_PSW+3(%r15),0x01  # are we running in 31 bit mode ?
         jo      pgm_svcper_noemu
-       larl    %r7,sys_call_table_emu # use 31 bit emulation system calls
+       larl    %r10,sys_call_table_emu # use 31 bit emulation system calls
 pgm_svcper_noemu:
 #endif
        tm      __TI_flags+3(%r9),_TIF_SYSCALL_TRACE
-        lgf     %r8,0(%r8,%r7)    # load address of system call routine
+        lgf     %r8,0(%r7,%r10)   # load address of system call routine
         jo      pgm_tracesys
         basr    %r14,%r8          # call sys_xxxx
         stg     %r2,SP_R2(%r15)   # store return value (change R2 on stack)
@@ -522,19 +523,20 @@ pgm_svcper_nosig:
 # call trace before and after sys_call
 #
 pgm_tracesys:
-       lgfr    %r7,%r7
+       srlg    %r7,%r7,2
        stg     %r7,SP_R2(%r15)
         brasl   %r14,syscall_trace
        clc     SP_R2(8,%r15),.Lnr_syscalls
-       jnl     pgm_svc_go
-       lg      %r2,SP_R2(%r15)
-       sllg    %r2,%r2,3           # strace wants to change the syscall
-       lgf     %r8,0(%r2,%r7)
+       jnl     pgm_svc_nogo
+       lg      %r7,SP_R2(%r15)
+       sllg    %r7,%r7,2           # strace wants to change the syscall
+       lgf     %r8,0(%r7,%r10)
 pgm_svc_go:
        lmg     %r3,%r6,SP_R3(%r15)
        lg      %r2,SP_ORIG_R2(%r15)
         basr    %r14,%r8            # call sys_xxx
         stg     %r2,SP_R2(%r15)     # store return value
+pgm_svc_nogo:
        tm      __TI_flags+7(%r9),_TIF_SYSCALL_TRACE
         jno     pgm_svcret
        larl    %r14,pgm_svcret     # return point is sysc_return