.. | .. |
---|
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 |
---|