hc
2024-10-22 8ac6c7a54ed1b98d142dce24b11c6de6a1e239a5
kernel/arch/alpha/kernel/entry.S
....@@ -469,11 +469,13 @@
469469 #ifdef CONFIG_AUDITSYSCALL
470470 lda $6, _TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT
471471 and $3, $6, $3
472
-#endif
473472 bne $3, strace
473
+#else
474
+ blbs $3, strace /* check for SYSCALL_TRACE in disguise */
475
+#endif
474476 beq $4, 1f
475477 ldq $27, 0($5)
476
-1: jsr $26, ($27), alpha_ni_syscall
478
+1: jsr $26, ($27), sys_ni_syscall
477479 ldgp $gp, 0($26)
478480 blt $0, $syscall_error /* the call failed */
479481 stq $0, 0($sp)
....@@ -544,7 +546,7 @@
544546 .align 4
545547 .type work_pending, @function
546548 work_pending:
547
- and $17, _TIF_NOTIFY_RESUME | _TIF_SIGPENDING, $2
549
+ and $17, _TIF_NOTIFY_RESUME | _TIF_SIGPENDING | _TIF_NOTIFY_SIGNAL, $2
548550 bne $2, $work_notifysig
549551
550552 $work_resched:
....@@ -587,7 +589,7 @@
587589 /* get the system call pointer.. */
588590 lda $1, NR_SYSCALLS($31)
589591 lda $2, sys_call_table
590
- lda $27, alpha_ni_syscall
592
+ lda $27, sys_ni_syscall
591593 cmpult $0, $1, $1
592594 s8addq $0, $2, $2
593595 beq $1, 1f
....@@ -791,7 +793,7 @@
791793
792794 /*
793795 * 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.
795797 */
796798
797799 .macro fork_like name
....@@ -812,46 +814,41 @@
812814 fork_like vfork
813815 fork_like clone
814816
817
+.macro sigreturn_like name
815818 .align 4
816
- .globl sys_sigreturn
817
- .ent sys_sigreturn
818
-sys_sigreturn:
819
+ .globl sys_\name
820
+ .ent sys_\name
821
+sys_\name:
819822 .prologue 0
820823 lda $9, ret_from_straced
821824 cmpult $26, $9, $9
822825 lda $sp, -SWITCH_STACK_SIZE($sp)
823
- jsr $26, do_sigreturn
826
+ jsr $26, do_\name
824827 bne $9, 1f
825828 jsr $26, syscall_trace_leave
826829 1: br $1, undo_switch_stack
827830 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
829836
830837 .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:
834841 .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
+ */
853850 lda $0, -ENOSYS
854851 unop
855852 stq $0, 0($sp)
856853 ret
857
-.end alpha_ni_syscall
854
+.end alpha_syscall_zero