| .. | .. |
|---|
| 469 | 469 | #ifdef CONFIG_AUDITSYSCALL |
|---|
| 470 | 470 | lda $6, _TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT |
|---|
| 471 | 471 | and $3, $6, $3 |
|---|
| 472 | | -#endif |
|---|
| 473 | 472 | bne $3, strace |
|---|
| 473 | +#else |
|---|
| 474 | + blbs $3, strace /* check for SYSCALL_TRACE in disguise */ |
|---|
| 475 | +#endif |
|---|
| 474 | 476 | beq $4, 1f |
|---|
| 475 | 477 | ldq $27, 0($5) |
|---|
| 476 | | -1: jsr $26, ($27), alpha_ni_syscall |
|---|
| 478 | +1: jsr $26, ($27), sys_ni_syscall |
|---|
| 477 | 479 | ldgp $gp, 0($26) |
|---|
| 478 | 480 | blt $0, $syscall_error /* the call failed */ |
|---|
| 479 | 481 | stq $0, 0($sp) |
|---|
| .. | .. |
|---|
| 544 | 546 | .align 4 |
|---|
| 545 | 547 | .type work_pending, @function |
|---|
| 546 | 548 | work_pending: |
|---|
| 547 | | - and $17, _TIF_NOTIFY_RESUME | _TIF_SIGPENDING, $2 |
|---|
| 549 | + and $17, _TIF_NOTIFY_RESUME | _TIF_SIGPENDING | _TIF_NOTIFY_SIGNAL, $2 |
|---|
| 548 | 550 | bne $2, $work_notifysig |
|---|
| 549 | 551 | |
|---|
| 550 | 552 | $work_resched: |
|---|
| .. | .. |
|---|
| 587 | 589 | /* get the system call pointer.. */ |
|---|
| 588 | 590 | lda $1, NR_SYSCALLS($31) |
|---|
| 589 | 591 | lda $2, sys_call_table |
|---|
| 590 | | - lda $27, alpha_ni_syscall |
|---|
| 592 | + lda $27, sys_ni_syscall |
|---|
| 591 | 593 | cmpult $0, $1, $1 |
|---|
| 592 | 594 | s8addq $0, $2, $2 |
|---|
| 593 | 595 | beq $1, 1f |
|---|
| .. | .. |
|---|
| 791 | 793 | |
|---|
| 792 | 794 | /* |
|---|
| 793 | 795 | * Special system calls. Most of these are special in that they either |
|---|
| 794 | | - * have to play switch_stack games or in some way use the pt_regs struct. |
|---|
| 796 | + * have to play switch_stack games. |
|---|
| 795 | 797 | */ |
|---|
| 796 | 798 | |
|---|
| 797 | 799 | .macro fork_like name |
|---|
| .. | .. |
|---|
| 812 | 814 | fork_like vfork |
|---|
| 813 | 815 | fork_like clone |
|---|
| 814 | 816 | |
|---|
| 817 | +.macro sigreturn_like name |
|---|
| 815 | 818 | .align 4 |
|---|
| 816 | | - .globl sys_sigreturn |
|---|
| 817 | | - .ent sys_sigreturn |
|---|
| 818 | | -sys_sigreturn: |
|---|
| 819 | + .globl sys_\name |
|---|
| 820 | + .ent sys_\name |
|---|
| 821 | +sys_\name: |
|---|
| 819 | 822 | .prologue 0 |
|---|
| 820 | 823 | lda $9, ret_from_straced |
|---|
| 821 | 824 | cmpult $26, $9, $9 |
|---|
| 822 | 825 | lda $sp, -SWITCH_STACK_SIZE($sp) |
|---|
| 823 | | - jsr $26, do_sigreturn |
|---|
| 826 | + jsr $26, do_\name |
|---|
| 824 | 827 | bne $9, 1f |
|---|
| 825 | 828 | jsr $26, syscall_trace_leave |
|---|
| 826 | 829 | 1: br $1, undo_switch_stack |
|---|
| 827 | 830 | br ret_from_sys_call |
|---|
| 828 | | -.end sys_sigreturn |
|---|
| 831 | +.end sys_\name |
|---|
| 832 | +.endm |
|---|
| 833 | + |
|---|
| 834 | +sigreturn_like sigreturn |
|---|
| 835 | +sigreturn_like rt_sigreturn |
|---|
| 829 | 836 | |
|---|
| 830 | 837 | .align 4 |
|---|
| 831 | | - .globl sys_rt_sigreturn |
|---|
| 832 | | - .ent sys_rt_sigreturn |
|---|
| 833 | | -sys_rt_sigreturn: |
|---|
| 838 | + .globl alpha_syscall_zero |
|---|
| 839 | + .ent alpha_syscall_zero |
|---|
| 840 | +alpha_syscall_zero: |
|---|
| 834 | 841 | .prologue 0 |
|---|
| 835 | | - lda $9, ret_from_straced |
|---|
| 836 | | - cmpult $26, $9, $9 |
|---|
| 837 | | - lda $sp, -SWITCH_STACK_SIZE($sp) |
|---|
| 838 | | - jsr $26, do_rt_sigreturn |
|---|
| 839 | | - bne $9, 1f |
|---|
| 840 | | - jsr $26, syscall_trace_leave |
|---|
| 841 | | -1: br $1, undo_switch_stack |
|---|
| 842 | | - br ret_from_sys_call |
|---|
| 843 | | -.end sys_rt_sigreturn |
|---|
| 844 | | - |
|---|
| 845 | | - .align 4 |
|---|
| 846 | | - .globl alpha_ni_syscall |
|---|
| 847 | | - .ent alpha_ni_syscall |
|---|
| 848 | | -alpha_ni_syscall: |
|---|
| 849 | | - .prologue 0 |
|---|
| 850 | | - /* Special because it also implements overflow handling via |
|---|
| 851 | | - syscall number 0. And if you recall, zero is a special |
|---|
| 852 | | - trigger for "not an error". Store large non-zero there. */ |
|---|
| 842 | + /* Special because it needs to do something opposite to |
|---|
| 843 | + force_successful_syscall_return(). We use the saved |
|---|
| 844 | + syscall number for that, zero meaning "not an error". |
|---|
| 845 | + That works nicely, but for real syscall 0 we need to |
|---|
| 846 | + make sure that this logics doesn't get confused. |
|---|
| 847 | + Store a non-zero there - -ENOSYS we need in register |
|---|
| 848 | + for our return value will do just fine. |
|---|
| 849 | + */ |
|---|
| 853 | 850 | lda $0, -ENOSYS |
|---|
| 854 | 851 | unop |
|---|
| 855 | 852 | stq $0, 0($sp) |
|---|
| 856 | 853 | ret |
|---|
| 857 | | -.end alpha_ni_syscall |
|---|
| 854 | +.end alpha_syscall_zero |
|---|