X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=arch%2Fs390%2Fkernel%2Fentry64.S;h=1874b072897076a8cd152dfbe695d5a30e6477c6;hb=70790a4b5cd6c0291e5b1a2836e2832d46036ac6;hp=533fa85ce3e7643fddfb6a2a41a8d51af54c9a7d;hpb=413ba3004a4036bb5d6e52d2faa2b19cb13561dc;p=linux-2.6.git diff --git a/arch/s390/kernel/entry64.S b/arch/s390/kernel/entry64.S index 533fa85ce..1874b0728 100644 --- a/arch/s390/kernel/entry64.S +++ b/arch/s390/kernel/entry64.S @@ -282,6 +282,7 @@ sysc_reschedule: # _TIF_SIGPENDING is set, call do_signal # sysc_sigpending: + ni __TI_flags+7(%r9),255-_TIF_SINGLE_STEP # clear TIF_SINGLE_STEP la %r2,SP_PTREGS(%r15) # load pt_regs sgr %r3,%r3 # clear *oldset brasl %r14,do_signal # call do_signal @@ -301,14 +302,15 @@ sysc_restart: j sysc_do_restart # restart svc # -# _TIF_SINGLE_STEP is set, call do_debugger_trap +# _TIF_SINGLE_STEP is set, call do_single_step # sysc_singlestep: ni __TI_flags+7(%r9),255-_TIF_SINGLE_STEP # clear TIF_SINGLE_STEP - mvi SP_TRAP+1(%r15),0x28 # set trap indication to pgm check + lhi %r0,__LC_PGM_OLD_PSW + sth %r0,SP_TRAP(%r15) # set trap indication to pgm check la %r2,SP_PTREGS(%r15) # address of register-save area larl %r14,sysc_return # load adr. of system return - jg do_debugger_trap # branch to do_debugger_trap + jg do_single_step # branch to do_sigtrap __critical_end: @@ -496,6 +498,7 @@ pgm_check_handler: lgf %r3,__LC_PGM_ILC # load program interruption code lghi %r8,0x7f ngr %r8,%r3 +pgm_do_call: sll %r8,3 GET_THREAD_INFO larl %r1,pgm_check_table @@ -526,19 +529,12 @@ pgm_per_std: mvc __THREAD_per+__PER_atmid(2,%r1),__LC_PER_ATMID mvc __THREAD_per+__PER_address(8,%r1),__LC_PER_ADDRESS mvc __THREAD_per+__PER_access_id(1,%r1),__LC_PER_ACCESS_ID - lghi %r4,0x7f + oi __TI_flags+7(%r9),_TIF_SINGLE_STEP # set TIF_SINGLE_STEP lgf %r3,__LC_PGM_ILC # load program interruption code - nr %r4,%r3 # clear per-event-bit and ilc - je pgm_per_only # only per of per+check ? - sll %r4,3 - larl %r1,pgm_check_table - lg %r1,0(%r4,%r1) # load address of handler routine - la %r2,SP_PTREGS(%r15) # address of register-save area - basr %r14,%r1 # branch to interrupt-handler -pgm_per_only: - la %r2,SP_PTREGS(15) # address of register-save area - larl %r14,sysc_return # load adr. of system return - jg do_debugger_trap + lghi %r8,0x7f + ngr %r8,%r3 # clear per-event-bit and ilc + je sysc_return + j pgm_do_call # # it was a single stepped SVC that is causing all the trouble