diff options
Diffstat (limited to 'arch/alpha/kernel/entry.S')
| -rw-r--r-- | arch/alpha/kernel/entry.S | 61 |
1 files changed, 22 insertions, 39 deletions
diff --git a/arch/alpha/kernel/entry.S b/arch/alpha/kernel/entry.S index b45d913a51c3..ab1ee0ab082b 100644 --- a/arch/alpha/kernel/entry.S +++ b/arch/alpha/kernel/entry.S | |||
| @@ -317,14 +317,14 @@ ret_from_sys_call: | |||
| 317 | ldq $0, SP_OFF($sp) | 317 | ldq $0, SP_OFF($sp) |
| 318 | and $0, 8, $0 | 318 | and $0, 8, $0 |
| 319 | beq $0, restore_all | 319 | beq $0, restore_all |
| 320 | ret_from_reschedule: | 320 | ret_to_user: |
| 321 | /* Make sure need_resched and sigpending don't change between | 321 | /* Make sure need_resched and sigpending don't change between |
| 322 | sampling and the rti. */ | 322 | sampling and the rti. */ |
| 323 | lda $16, 7 | 323 | lda $16, 7 |
| 324 | call_pal PAL_swpipl | 324 | call_pal PAL_swpipl |
| 325 | ldl $5, TI_FLAGS($8) | 325 | ldl $5, TI_FLAGS($8) |
| 326 | and $5, _TIF_WORK_MASK, $2 | 326 | and $5, _TIF_WORK_MASK, $2 |
| 327 | bne $5, work_pending | 327 | bne $2, work_pending |
| 328 | restore_all: | 328 | restore_all: |
| 329 | RESTORE_ALL | 329 | RESTORE_ALL |
| 330 | call_pal PAL_rti | 330 | call_pal PAL_rti |
| @@ -363,7 +363,7 @@ $ret_success: | |||
| 363 | * $8: current. | 363 | * $8: current. |
| 364 | * $19: The old syscall number, or zero if this is not a return | 364 | * $19: The old syscall number, or zero if this is not a return |
| 365 | * from a syscall that errored and is possibly restartable. | 365 | * from a syscall that errored and is possibly restartable. |
| 366 | * $20: Error indication. | 366 | * $20: The old a3 value |
| 367 | */ | 367 | */ |
| 368 | 368 | ||
| 369 | .align 4 | 369 | .align 4 |
| @@ -392,12 +392,18 @@ $work_resched: | |||
| 392 | 392 | ||
| 393 | $work_notifysig: | 393 | $work_notifysig: |
| 394 | mov $sp, $16 | 394 | mov $sp, $16 |
| 395 | br $1, do_switch_stack | 395 | bsr $1, do_switch_stack |
| 396 | mov $sp, $17 | 396 | mov $sp, $17 |
| 397 | mov $5, $18 | 397 | mov $5, $18 |
| 398 | mov $19, $9 /* save old syscall number */ | ||
| 399 | mov $20, $10 /* save old a3 */ | ||
| 400 | and $5, _TIF_SIGPENDING, $2 | ||
| 401 | cmovne $2, 0, $9 /* we don't want double syscall restarts */ | ||
| 398 | jsr $26, do_notify_resume | 402 | jsr $26, do_notify_resume |
| 403 | mov $9, $19 | ||
| 404 | mov $10, $20 | ||
| 399 | bsr $1, undo_switch_stack | 405 | bsr $1, undo_switch_stack |
| 400 | br restore_all | 406 | br ret_to_user |
| 401 | .end work_pending | 407 | .end work_pending |
| 402 | 408 | ||
| 403 | /* | 409 | /* |
| @@ -430,6 +436,7 @@ strace: | |||
| 430 | beq $1, 1f | 436 | beq $1, 1f |
| 431 | ldq $27, 0($2) | 437 | ldq $27, 0($2) |
| 432 | 1: jsr $26, ($27), sys_gettimeofday | 438 | 1: jsr $26, ($27), sys_gettimeofday |
| 439 | ret_from_straced: | ||
| 433 | ldgp $gp, 0($26) | 440 | ldgp $gp, 0($26) |
| 434 | 441 | ||
| 435 | /* check return.. */ | 442 | /* check return.. */ |
| @@ -757,11 +764,15 @@ sys_vfork: | |||
| 757 | .ent sys_sigreturn | 764 | .ent sys_sigreturn |
| 758 | sys_sigreturn: | 765 | sys_sigreturn: |
| 759 | .prologue 0 | 766 | .prologue 0 |
| 767 | lda $9, ret_from_straced | ||
| 768 | cmpult $26, $9, $9 | ||
| 760 | mov $sp, $17 | 769 | mov $sp, $17 |
| 761 | lda $18, -SWITCH_STACK_SIZE($sp) | 770 | lda $18, -SWITCH_STACK_SIZE($sp) |
| 762 | lda $sp, -SWITCH_STACK_SIZE($sp) | 771 | lda $sp, -SWITCH_STACK_SIZE($sp) |
| 763 | jsr $26, do_sigreturn | 772 | jsr $26, do_sigreturn |
| 764 | br $1, undo_switch_stack | 773 | bne $9, 1f |
| 774 | jsr $26, syscall_trace | ||
| 775 | 1: br $1, undo_switch_stack | ||
| 765 | br ret_from_sys_call | 776 | br ret_from_sys_call |
| 766 | .end sys_sigreturn | 777 | .end sys_sigreturn |
| 767 | 778 | ||
| @@ -770,47 +781,19 @@ sys_sigreturn: | |||
| 770 | .ent sys_rt_sigreturn | 781 | .ent sys_rt_sigreturn |
| 771 | sys_rt_sigreturn: | 782 | sys_rt_sigreturn: |
| 772 | .prologue 0 | 783 | .prologue 0 |
| 784 | lda $9, ret_from_straced | ||
| 785 | cmpult $26, $9, $9 | ||
| 773 | mov $sp, $17 | 786 | mov $sp, $17 |
| 774 | lda $18, -SWITCH_STACK_SIZE($sp) | 787 | lda $18, -SWITCH_STACK_SIZE($sp) |
| 775 | lda $sp, -SWITCH_STACK_SIZE($sp) | 788 | lda $sp, -SWITCH_STACK_SIZE($sp) |
| 776 | jsr $26, do_rt_sigreturn | 789 | jsr $26, do_rt_sigreturn |
| 777 | br $1, undo_switch_stack | 790 | bne $9, 1f |
| 791 | jsr $26, syscall_trace | ||
| 792 | 1: br $1, undo_switch_stack | ||
| 778 | br ret_from_sys_call | 793 | br ret_from_sys_call |
| 779 | .end sys_rt_sigreturn | 794 | .end sys_rt_sigreturn |
| 780 | 795 | ||
| 781 | .align 4 | 796 | .align 4 |
| 782 | .globl sys_sigsuspend | ||
| 783 | .ent sys_sigsuspend | ||
| 784 | sys_sigsuspend: | ||
| 785 | .prologue 0 | ||
| 786 | mov $sp, $17 | ||
| 787 | br $1, do_switch_stack | ||
| 788 | mov $sp, $18 | ||
| 789 | subq $sp, 16, $sp | ||
| 790 | stq $26, 0($sp) | ||
| 791 | jsr $26, do_sigsuspend | ||
| 792 | ldq $26, 0($sp) | ||
| 793 | lda $sp, SWITCH_STACK_SIZE+16($sp) | ||
| 794 | ret | ||
| 795 | .end sys_sigsuspend | ||
| 796 | |||
| 797 | .align 4 | ||
| 798 | .globl sys_rt_sigsuspend | ||
| 799 | .ent sys_rt_sigsuspend | ||
| 800 | sys_rt_sigsuspend: | ||
| 801 | .prologue 0 | ||
| 802 | mov $sp, $18 | ||
| 803 | br $1, do_switch_stack | ||
| 804 | mov $sp, $19 | ||
| 805 | subq $sp, 16, $sp | ||
| 806 | stq $26, 0($sp) | ||
| 807 | jsr $26, do_rt_sigsuspend | ||
| 808 | ldq $26, 0($sp) | ||
| 809 | lda $sp, SWITCH_STACK_SIZE+16($sp) | ||
| 810 | ret | ||
| 811 | .end sys_rt_sigsuspend | ||
| 812 | |||
| 813 | .align 4 | ||
| 814 | .globl sys_sethae | 797 | .globl sys_sethae |
| 815 | .ent sys_sethae | 798 | .ent sys_sethae |
| 816 | sys_sethae: | 799 | sys_sethae: |
