Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3)  * arch/alpha/kernel/entry.S
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5)  * Kernel entry-points.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) #include <asm/asm-offsets.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) #include <asm/thread_info.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) #include <asm/pal.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) #include <asm/errno.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) #include <asm/unistd.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) 	.text
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) 	.set noat
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) 	.cfi_sections	.debug_frame
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) /* Stack offsets.  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) #define SP_OFF			184
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) #define SWITCH_STACK_SIZE	320
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) .macro	CFI_START_OSF_FRAME	func
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) 	.align	4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) 	.globl	\func
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) 	.type	\func,@function
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) \func:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) 	.cfi_startproc simple
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) 	.cfi_return_column 64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) 	.cfi_def_cfa	$sp, 48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) 	.cfi_rel_offset	64, 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) 	.cfi_rel_offset	$gp, 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) 	.cfi_rel_offset	$16, 24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) 	.cfi_rel_offset	$17, 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) 	.cfi_rel_offset	$18, 40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) .endm
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) .macro	CFI_END_OSF_FRAME	func
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) 	.cfi_endproc
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) 	.size	\func, . - \func
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) .endm
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43)  * This defines the normal kernel pt-regs layout.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45)  * regs 9-15 preserved by C code
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46)  * regs 16-18 saved by PAL-code
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47)  * regs 29-30 saved and set up by PAL-code
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48)  * JRP - Save regs 16-18 in a special area of the stack, so that
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49)  * the palcode-provided values are available to the signal handler.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) .macro	SAVE_ALL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) 	subq	$sp, SP_OFF, $sp
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) 	.cfi_adjust_cfa_offset	SP_OFF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) 	stq	$0, 0($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) 	stq	$1, 8($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) 	stq	$2, 16($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) 	stq	$3, 24($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) 	stq	$4, 32($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) 	stq	$28, 144($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) 	.cfi_rel_offset	$0, 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) 	.cfi_rel_offset $1, 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) 	.cfi_rel_offset	$2, 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) 	.cfi_rel_offset	$3, 24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) 	.cfi_rel_offset	$4, 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) 	.cfi_rel_offset	$28, 144
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 	lda	$2, alpha_mv
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) 	stq	$5, 40($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) 	stq	$6, 48($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) 	stq	$7, 56($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) 	stq	$8, 64($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) 	stq	$19, 72($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) 	stq	$20, 80($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) 	stq	$21, 88($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) 	ldq	$2, HAE_CACHE($2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) 	stq	$22, 96($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) 	stq	$23, 104($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) 	stq	$24, 112($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) 	stq	$25, 120($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) 	stq	$26, 128($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 	stq	$27, 136($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) 	stq	$2, 152($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 	stq	$16, 160($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) 	stq	$17, 168($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) 	stq	$18, 176($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 	.cfi_rel_offset	$5, 40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) 	.cfi_rel_offset	$6, 48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) 	.cfi_rel_offset	$7, 56
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) 	.cfi_rel_offset	$8, 64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) 	.cfi_rel_offset $19, 72
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) 	.cfi_rel_offset	$20, 80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) 	.cfi_rel_offset	$21, 88
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) 	.cfi_rel_offset $22, 96
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) 	.cfi_rel_offset	$23, 104
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) 	.cfi_rel_offset	$24, 112
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) 	.cfi_rel_offset	$25, 120
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) 	.cfi_rel_offset	$26, 128
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) 	.cfi_rel_offset	$27, 136
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) .endm
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) .macro	RESTORE_ALL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 	lda	$19, alpha_mv
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) 	ldq	$0, 0($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 	ldq	$1, 8($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) 	ldq	$2, 16($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) 	ldq	$3, 24($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 	ldq	$21, 152($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) 	ldq	$20, HAE_CACHE($19)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) 	ldq	$4, 32($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) 	ldq	$5, 40($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) 	ldq	$6, 48($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 	ldq	$7, 56($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) 	subq	$20, $21, $20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) 	ldq	$8, 64($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) 	beq	$20, 99f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 	ldq	$20, HAE_REG($19)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) 	stq	$21, HAE_CACHE($19)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) 	stq	$21, 0($20)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) 99:	ldq	$19, 72($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) 	ldq	$20, 80($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) 	ldq	$21, 88($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) 	ldq	$22, 96($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) 	ldq	$23, 104($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) 	ldq	$24, 112($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) 	ldq	$25, 120($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) 	ldq	$26, 128($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) 	ldq	$27, 136($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) 	ldq	$28, 144($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) 	addq	$sp, SP_OFF, $sp
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) 	.cfi_restore	$0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) 	.cfi_restore	$1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) 	.cfi_restore	$2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) 	.cfi_restore	$3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) 	.cfi_restore	$4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) 	.cfi_restore	$5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) 	.cfi_restore	$6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) 	.cfi_restore	$7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) 	.cfi_restore	$8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) 	.cfi_restore	$19
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) 	.cfi_restore	$20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) 	.cfi_restore	$21
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) 	.cfi_restore	$22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) 	.cfi_restore	$23
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) 	.cfi_restore	$24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) 	.cfi_restore	$25
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) 	.cfi_restore	$26
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) 	.cfi_restore	$27
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) 	.cfi_restore	$28
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) 	.cfi_adjust_cfa_offset	-SP_OFF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) .endm
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) .macro	DO_SWITCH_STACK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) 	bsr	$1, do_switch_stack
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) 	.cfi_adjust_cfa_offset	SWITCH_STACK_SIZE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) 	.cfi_rel_offset	$9, 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) 	.cfi_rel_offset	$10, 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) 	.cfi_rel_offset	$11, 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) 	.cfi_rel_offset	$12, 24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) 	.cfi_rel_offset	$13, 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) 	.cfi_rel_offset	$14, 40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) 	.cfi_rel_offset	$15, 48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) 	/* We don't really care about the FP registers for debugging.  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) .endm
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) .macro	UNDO_SWITCH_STACK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) 	bsr	$1, undo_switch_stack
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) 	.cfi_restore	$9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) 	.cfi_restore	$10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) 	.cfi_restore	$11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) 	.cfi_restore	$12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) 	.cfi_restore	$13
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) 	.cfi_restore	$14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) 	.cfi_restore	$15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) 	.cfi_adjust_cfa_offset	-SWITCH_STACK_SIZE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) .endm
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178)  * Non-syscall kernel entry points.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) CFI_START_OSF_FRAME entInt
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) 	SAVE_ALL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) 	lda	$8, 0x3fff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) 	lda	$26, ret_from_sys_call
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) 	bic	$sp, $8, $8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) 	mov	$sp, $19
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) 	jsr	$31, do_entInt
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) CFI_END_OSF_FRAME entInt
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) CFI_START_OSF_FRAME entArith
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) 	SAVE_ALL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) 	lda	$8, 0x3fff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) 	lda	$26, ret_from_sys_call
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) 	bic	$sp, $8, $8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) 	mov	$sp, $18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) 	jsr	$31, do_entArith
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) CFI_END_OSF_FRAME entArith
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) CFI_START_OSF_FRAME entMM
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) 	SAVE_ALL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) /* save $9 - $15 so the inline exception code can manipulate them.  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) 	subq	$sp, 56, $sp
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) 	.cfi_adjust_cfa_offset	56
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) 	stq	$9, 0($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) 	stq	$10, 8($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) 	stq	$11, 16($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) 	stq	$12, 24($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) 	stq	$13, 32($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) 	stq	$14, 40($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) 	stq	$15, 48($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) 	.cfi_rel_offset	$9, 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) 	.cfi_rel_offset	$10, 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) 	.cfi_rel_offset	$11, 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) 	.cfi_rel_offset	$12, 24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) 	.cfi_rel_offset	$13, 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) 	.cfi_rel_offset	$14, 40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) 	.cfi_rel_offset	$15, 48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) 	addq	$sp, 56, $19
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) /* handle the fault */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) 	lda	$8, 0x3fff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) 	bic	$sp, $8, $8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) 	jsr	$26, do_page_fault
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) /* reload the registers after the exception code played.  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) 	ldq	$9, 0($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) 	ldq	$10, 8($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) 	ldq	$11, 16($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) 	ldq	$12, 24($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) 	ldq	$13, 32($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) 	ldq	$14, 40($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) 	ldq	$15, 48($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) 	addq	$sp, 56, $sp
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) 	.cfi_restore	$9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) 	.cfi_restore	$10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) 	.cfi_restore	$11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) 	.cfi_restore	$12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) 	.cfi_restore	$13
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) 	.cfi_restore	$14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) 	.cfi_restore	$15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) 	.cfi_adjust_cfa_offset	-56
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) /* finish up the syscall as normal.  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) 	br	ret_from_sys_call
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) CFI_END_OSF_FRAME entMM
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) CFI_START_OSF_FRAME entIF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) 	SAVE_ALL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) 	lda	$8, 0x3fff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) 	lda	$26, ret_from_sys_call
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) 	bic	$sp, $8, $8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) 	mov	$sp, $17
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) 	jsr	$31, do_entIF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) CFI_END_OSF_FRAME entIF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) CFI_START_OSF_FRAME entUna
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) 	lda	$sp, -256($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) 	.cfi_adjust_cfa_offset	256
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) 	stq	$0, 0($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) 	.cfi_rel_offset	$0, 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) 	.cfi_remember_state
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) 	ldq	$0, 256($sp)	/* get PS */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) 	stq	$1, 8($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) 	stq	$2, 16($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) 	stq	$3, 24($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) 	and	$0, 8, $0		/* user mode? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) 	stq	$4, 32($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) 	bne	$0, entUnaUser	/* yup -> do user-level unaligned fault */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) 	stq	$5, 40($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) 	stq	$6, 48($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) 	stq	$7, 56($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) 	stq	$8, 64($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) 	stq	$9, 72($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) 	stq	$10, 80($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) 	stq	$11, 88($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) 	stq	$12, 96($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) 	stq	$13, 104($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) 	stq	$14, 112($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) 	stq	$15, 120($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) 	/* 16-18 PAL-saved */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) 	stq	$19, 152($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) 	stq	$20, 160($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) 	stq	$21, 168($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) 	stq	$22, 176($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) 	stq	$23, 184($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) 	stq	$24, 192($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) 	stq	$25, 200($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) 	stq	$26, 208($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) 	stq	$27, 216($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) 	stq	$28, 224($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) 	mov	$sp, $19
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) 	stq	$gp, 232($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) 	.cfi_rel_offset	$1, 1*8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) 	.cfi_rel_offset	$2, 2*8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) 	.cfi_rel_offset	$3, 3*8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) 	.cfi_rel_offset	$4, 4*8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) 	.cfi_rel_offset	$5, 5*8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) 	.cfi_rel_offset	$6, 6*8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) 	.cfi_rel_offset	$7, 7*8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) 	.cfi_rel_offset	$8, 8*8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) 	.cfi_rel_offset	$9, 9*8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) 	.cfi_rel_offset	$10, 10*8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) 	.cfi_rel_offset	$11, 11*8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) 	.cfi_rel_offset	$12, 12*8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) 	.cfi_rel_offset	$13, 13*8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) 	.cfi_rel_offset	$14, 14*8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) 	.cfi_rel_offset	$15, 15*8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) 	.cfi_rel_offset	$19, 19*8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) 	.cfi_rel_offset	$20, 20*8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) 	.cfi_rel_offset	$21, 21*8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) 	.cfi_rel_offset	$22, 22*8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) 	.cfi_rel_offset	$23, 23*8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) 	.cfi_rel_offset	$24, 24*8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) 	.cfi_rel_offset	$25, 25*8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) 	.cfi_rel_offset	$26, 26*8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) 	.cfi_rel_offset	$27, 27*8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) 	.cfi_rel_offset	$28, 28*8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) 	.cfi_rel_offset	$29, 29*8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) 	lda	$8, 0x3fff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) 	stq	$31, 248($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) 	bic	$sp, $8, $8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) 	jsr	$26, do_entUna
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) 	ldq	$0, 0($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) 	ldq	$1, 8($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) 	ldq	$2, 16($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) 	ldq	$3, 24($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) 	ldq	$4, 32($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) 	ldq	$5, 40($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) 	ldq	$6, 48($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) 	ldq	$7, 56($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) 	ldq	$8, 64($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) 	ldq	$9, 72($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) 	ldq	$10, 80($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) 	ldq	$11, 88($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) 	ldq	$12, 96($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) 	ldq	$13, 104($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) 	ldq	$14, 112($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) 	ldq	$15, 120($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) 	/* 16-18 PAL-saved */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) 	ldq	$19, 152($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) 	ldq	$20, 160($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) 	ldq	$21, 168($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) 	ldq	$22, 176($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) 	ldq	$23, 184($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) 	ldq	$24, 192($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) 	ldq	$25, 200($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) 	ldq	$26, 208($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) 	ldq	$27, 216($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) 	ldq	$28, 224($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) 	ldq	$gp, 232($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) 	lda	$sp, 256($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) 	.cfi_restore	$1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) 	.cfi_restore	$2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) 	.cfi_restore	$3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) 	.cfi_restore	$4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) 	.cfi_restore	$5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) 	.cfi_restore	$6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) 	.cfi_restore	$7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) 	.cfi_restore	$8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) 	.cfi_restore	$9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) 	.cfi_restore	$10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) 	.cfi_restore	$11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) 	.cfi_restore	$12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) 	.cfi_restore	$13
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) 	.cfi_restore	$14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) 	.cfi_restore	$15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) 	.cfi_restore	$19
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) 	.cfi_restore	$20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) 	.cfi_restore	$21
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) 	.cfi_restore	$22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) 	.cfi_restore	$23
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) 	.cfi_restore	$24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) 	.cfi_restore	$25
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) 	.cfi_restore	$26
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372) 	.cfi_restore	$27
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) 	.cfi_restore	$28
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) 	.cfi_restore	$29
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) 	.cfi_adjust_cfa_offset	-256
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) 	call_pal PAL_rti
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) 	.align	4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) entUnaUser:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) 	.cfi_restore_state
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) 	ldq	$0, 0($sp)	/* restore original $0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) 	lda	$sp, 256($sp)	/* pop entUna's stack frame */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) 	.cfi_restore	$0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384) 	.cfi_adjust_cfa_offset	-256
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) 	SAVE_ALL		/* setup normal kernel stack */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) 	lda	$sp, -56($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387) 	.cfi_adjust_cfa_offset	56
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) 	stq	$9, 0($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) 	stq	$10, 8($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) 	stq	$11, 16($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391) 	stq	$12, 24($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) 	stq	$13, 32($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) 	stq	$14, 40($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394) 	stq	$15, 48($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) 	.cfi_rel_offset	$9, 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) 	.cfi_rel_offset	$10, 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) 	.cfi_rel_offset	$11, 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) 	.cfi_rel_offset	$12, 24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) 	.cfi_rel_offset	$13, 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) 	.cfi_rel_offset	$14, 40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) 	.cfi_rel_offset	$15, 48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) 	lda	$8, 0x3fff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403) 	addq	$sp, 56, $19
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) 	bic	$sp, $8, $8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) 	jsr	$26, do_entUnaUser
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) 	ldq	$9, 0($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) 	ldq	$10, 8($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408) 	ldq	$11, 16($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409) 	ldq	$12, 24($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) 	ldq	$13, 32($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411) 	ldq	$14, 40($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) 	ldq	$15, 48($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) 	lda	$sp, 56($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414) 	.cfi_restore	$9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) 	.cfi_restore	$10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) 	.cfi_restore	$11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417) 	.cfi_restore	$12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) 	.cfi_restore	$13
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419) 	.cfi_restore	$14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420) 	.cfi_restore	$15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) 	.cfi_adjust_cfa_offset	-56
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) 	br	ret_from_sys_call
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) CFI_END_OSF_FRAME entUna
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425) CFI_START_OSF_FRAME entDbg
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426) 	SAVE_ALL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) 	lda	$8, 0x3fff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) 	lda	$26, ret_from_sys_call
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429) 	bic	$sp, $8, $8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) 	mov	$sp, $16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) 	jsr	$31, do_entDbg
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432) CFI_END_OSF_FRAME entDbg
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435)  * The system call entry point is special.  Most importantly, it looks
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436)  * like a function call to userspace as far as clobbered registers.  We
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437)  * do preserve the argument registers (for syscall restarts) and $26
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438)  * (for leaf syscall functions).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440)  * So much for theory.  We don't take advantage of this yet.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442)  * Note that a0-a2 are not saved by PALcode as with the other entry points.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445) 	.align	4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446) 	.globl	entSys
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447) 	.type	entSys, @function
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448) 	.cfi_startproc simple
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449) 	.cfi_return_column 64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450) 	.cfi_def_cfa	$sp, 48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451) 	.cfi_rel_offset	64, 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452) 	.cfi_rel_offset	$gp, 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453) entSys:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454) 	SAVE_ALL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455) 	lda	$8, 0x3fff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456) 	bic	$sp, $8, $8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457) 	lda	$4, NR_SYSCALLS($31)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458) 	stq	$16, SP_OFF+24($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459) 	lda	$5, sys_call_table
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460) 	lda	$27, sys_ni_syscall
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461) 	cmpult	$0, $4, $4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462) 	ldl	$3, TI_FLAGS($8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463) 	stq	$17, SP_OFF+32($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464) 	s8addq	$0, $5, $5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465) 	stq	$18, SP_OFF+40($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 466) 	.cfi_rel_offset	$16, SP_OFF+24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 467) 	.cfi_rel_offset	$17, SP_OFF+32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 468) 	.cfi_rel_offset	$18, SP_OFF+40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 469) #ifdef CONFIG_AUDITSYSCALL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 470) 	lda     $6, _TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 471) 	and     $3, $6, $3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 472) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 473) 	bne     $3, strace
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 474) 	beq	$4, 1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 475) 	ldq	$27, 0($5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 476) 1:	jsr	$26, ($27), sys_ni_syscall
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 477) 	ldgp	$gp, 0($26)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 478) 	blt	$0, $syscall_error	/* the call failed */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 479) 	stq	$0, 0($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 480) 	stq	$31, 72($sp)		/* a3=0 => no error */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 481) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 482) 	.align	4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 483) 	.globl	ret_from_sys_call
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 484) ret_from_sys_call:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 485) 	cmovne	$26, 0, $18		/* $18 = 0 => non-restartable */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 486) 	ldq	$0, SP_OFF($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 487) 	and	$0, 8, $0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 488) 	beq	$0, ret_to_kernel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 489) ret_to_user:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 490) 	/* Make sure need_resched and sigpending don't change between
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 491) 		sampling and the rti.  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 492) 	lda	$16, 7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 493) 	call_pal PAL_swpipl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 494) 	ldl	$17, TI_FLAGS($8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 495) 	and	$17, _TIF_WORK_MASK, $2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 496) 	bne	$2, work_pending
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 497) restore_all:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 498) 	.cfi_remember_state
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 499) 	RESTORE_ALL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 500) 	call_pal PAL_rti
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 501) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 502) ret_to_kernel:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 503) 	.cfi_restore_state
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 504) 	lda	$16, 7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 505) 	call_pal PAL_swpipl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 506) 	br restore_all
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 507) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 508) 	.align 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 509) $syscall_error:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 510) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 511) 	 * Some system calls (e.g., ptrace) can return arbitrary
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 512) 	 * values which might normally be mistaken as error numbers.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 513) 	 * Those functions must zero $0 (v0) directly in the stack
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 514) 	 * frame to indicate that a negative return value wasn't an
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 515) 	 * error number..
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 516) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 517) 	ldq	$18, 0($sp)	/* old syscall nr (zero if success) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 518) 	beq	$18, $ret_success
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 519) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 520) 	ldq	$19, 72($sp)	/* .. and this a3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 521) 	subq	$31, $0, $0	/* with error in v0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 522) 	addq	$31, 1, $1	/* set a3 for errno return */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 523) 	stq	$0, 0($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 524) 	mov	$31, $26	/* tell "ret_from_sys_call" we can restart */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 525) 	stq	$1, 72($sp)	/* a3 for return */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 526) 	br	ret_from_sys_call
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 527) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 528) $ret_success:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 529) 	stq	$0, 0($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 530) 	stq	$31, 72($sp)	/* a3=0 => no error */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 531) 	br	ret_from_sys_call
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 532) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 533) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 534)  * Do all cleanup when returning from all interrupts and system calls.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 535)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 536)  * Arguments:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 537)  *       $8: current.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 538)  *      $17: TI_FLAGS.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 539)  *      $18: The old syscall number, or zero if this is not a return
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 540)  *           from a syscall that errored and is possibly restartable.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 541)  *      $19: The old a3 value
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 542)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 543) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 544) 	.align	4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 545) 	.type	work_pending, @function
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 546) work_pending:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 547) 	and	$17, _TIF_NOTIFY_RESUME | _TIF_SIGPENDING, $2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 548) 	bne	$2, $work_notifysig
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 549) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 550) $work_resched:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 551) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 552) 	 * We can get here only if we returned from syscall without SIGPENDING
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 553) 	 * or got through work_notifysig already.  Either case means no syscall
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 554) 	 * restarts for us, so let $18 and $19 burn.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 555) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 556) 	jsr	$26, schedule
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 557) 	mov	0, $18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 558) 	br	ret_to_user
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 559) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 560) $work_notifysig:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 561) 	mov	$sp, $16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 562) 	DO_SWITCH_STACK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 563) 	jsr	$26, do_work_pending
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 564) 	UNDO_SWITCH_STACK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 565) 	br	restore_all
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 566) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 567) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 568)  * PTRACE syscall handler
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 569)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 570) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 571) 	.align	4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 572) 	.type	strace, @function
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 573) strace:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 574) 	/* set up signal stack, call syscall_trace */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 575) 	DO_SWITCH_STACK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 576) 	jsr	$26, syscall_trace_enter /* returns the syscall number */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 577) 	UNDO_SWITCH_STACK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 578) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 579) 	/* get the arguments back.. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 580) 	ldq	$16, SP_OFF+24($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 581) 	ldq	$17, SP_OFF+32($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 582) 	ldq	$18, SP_OFF+40($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 583) 	ldq	$19, 72($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 584) 	ldq	$20, 80($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 585) 	ldq	$21, 88($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 586) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 587) 	/* get the system call pointer.. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 588) 	lda	$1, NR_SYSCALLS($31)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 589) 	lda	$2, sys_call_table
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 590) 	lda	$27, sys_ni_syscall
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 591) 	cmpult	$0, $1, $1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 592) 	s8addq	$0, $2, $2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 593) 	beq	$1, 1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 594) 	ldq	$27, 0($2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 595) 1:	jsr	$26, ($27), sys_gettimeofday
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 596) ret_from_straced:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 597) 	ldgp	$gp, 0($26)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 598) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 599) 	/* check return.. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 600) 	blt	$0, $strace_error	/* the call failed */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 601) 	stq	$31, 72($sp)		/* a3=0 => no error */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 602) $strace_success:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 603) 	stq	$0, 0($sp)		/* save return value */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 604) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 605) 	DO_SWITCH_STACK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 606) 	jsr	$26, syscall_trace_leave
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 607) 	UNDO_SWITCH_STACK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 608) 	br	$31, ret_from_sys_call
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 609) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 610) 	.align	3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 611) $strace_error:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 612) 	ldq	$18, 0($sp)	/* old syscall nr (zero if success) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 613) 	beq	$18, $strace_success
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 614) 	ldq	$19, 72($sp)	/* .. and this a3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 615) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 616) 	subq	$31, $0, $0	/* with error in v0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 617) 	addq	$31, 1, $1	/* set a3 for errno return */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 618) 	stq	$0, 0($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 619) 	stq	$1, 72($sp)	/* a3 for return */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 620) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 621) 	DO_SWITCH_STACK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 622) 	mov	$18, $9		/* save old syscall number */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 623) 	mov	$19, $10	/* save old a3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 624) 	jsr	$26, syscall_trace_leave
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 625) 	mov	$9, $18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 626) 	mov	$10, $19
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 627) 	UNDO_SWITCH_STACK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 628) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 629) 	mov	$31, $26	/* tell "ret_from_sys_call" we can restart */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 630) 	br	ret_from_sys_call
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 631) CFI_END_OSF_FRAME entSys
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 632) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 633) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 634)  * Save and restore the switch stack -- aka the balance of the user context.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 635)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 636) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 637) 	.align	4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 638) 	.type	do_switch_stack, @function
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 639) 	.cfi_startproc simple
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 640) 	.cfi_return_column 64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 641) 	.cfi_def_cfa $sp, 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 642) 	.cfi_register 64, $1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 643) do_switch_stack:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 644) 	lda	$sp, -SWITCH_STACK_SIZE($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 645) 	.cfi_adjust_cfa_offset	SWITCH_STACK_SIZE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 646) 	stq	$9, 0($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 647) 	stq	$10, 8($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 648) 	stq	$11, 16($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 649) 	stq	$12, 24($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 650) 	stq	$13, 32($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 651) 	stq	$14, 40($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 652) 	stq	$15, 48($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 653) 	stq	$26, 56($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 654) 	stt	$f0, 64($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 655) 	stt	$f1, 72($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 656) 	stt	$f2, 80($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 657) 	stt	$f3, 88($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 658) 	stt	$f4, 96($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 659) 	stt	$f5, 104($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 660) 	stt	$f6, 112($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 661) 	stt	$f7, 120($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 662) 	stt	$f8, 128($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 663) 	stt	$f9, 136($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 664) 	stt	$f10, 144($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 665) 	stt	$f11, 152($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 666) 	stt	$f12, 160($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 667) 	stt	$f13, 168($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 668) 	stt	$f14, 176($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 669) 	stt	$f15, 184($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 670) 	stt	$f16, 192($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 671) 	stt	$f17, 200($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 672) 	stt	$f18, 208($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 673) 	stt	$f19, 216($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 674) 	stt	$f20, 224($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 675) 	stt	$f21, 232($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 676) 	stt	$f22, 240($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 677) 	stt	$f23, 248($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 678) 	stt	$f24, 256($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 679) 	stt	$f25, 264($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 680) 	stt	$f26, 272($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 681) 	stt	$f27, 280($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 682) 	mf_fpcr	$f0		# get fpcr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 683) 	stt	$f28, 288($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 684) 	stt	$f29, 296($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 685) 	stt	$f30, 304($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 686) 	stt	$f0, 312($sp)	# save fpcr in slot of $f31
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 687) 	ldt	$f0, 64($sp)	# dont let "do_switch_stack" change fp state.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 688) 	ret	$31, ($1), 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 689) 	.cfi_endproc
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 690) 	.size	do_switch_stack, .-do_switch_stack
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 691) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 692) 	.align	4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 693) 	.type	undo_switch_stack, @function
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 694) 	.cfi_startproc simple
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 695) 	.cfi_def_cfa $sp, 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 696) 	.cfi_register 64, $1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 697) undo_switch_stack:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 698) 	ldq	$9, 0($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 699) 	ldq	$10, 8($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 700) 	ldq	$11, 16($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 701) 	ldq	$12, 24($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 702) 	ldq	$13, 32($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 703) 	ldq	$14, 40($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 704) 	ldq	$15, 48($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 705) 	ldq	$26, 56($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 706) 	ldt	$f30, 312($sp)	# get saved fpcr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 707) 	ldt	$f0, 64($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 708) 	ldt	$f1, 72($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 709) 	ldt	$f2, 80($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 710) 	ldt	$f3, 88($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 711) 	mt_fpcr	$f30		# install saved fpcr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 712) 	ldt	$f4, 96($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 713) 	ldt	$f5, 104($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 714) 	ldt	$f6, 112($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 715) 	ldt	$f7, 120($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 716) 	ldt	$f8, 128($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 717) 	ldt	$f9, 136($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 718) 	ldt	$f10, 144($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 719) 	ldt	$f11, 152($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 720) 	ldt	$f12, 160($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 721) 	ldt	$f13, 168($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 722) 	ldt	$f14, 176($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 723) 	ldt	$f15, 184($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 724) 	ldt	$f16, 192($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 725) 	ldt	$f17, 200($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 726) 	ldt	$f18, 208($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 727) 	ldt	$f19, 216($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 728) 	ldt	$f20, 224($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 729) 	ldt	$f21, 232($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 730) 	ldt	$f22, 240($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 731) 	ldt	$f23, 248($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 732) 	ldt	$f24, 256($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 733) 	ldt	$f25, 264($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 734) 	ldt	$f26, 272($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 735) 	ldt	$f27, 280($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 736) 	ldt	$f28, 288($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 737) 	ldt	$f29, 296($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 738) 	ldt	$f30, 304($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 739) 	lda	$sp, SWITCH_STACK_SIZE($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 740) 	ret	$31, ($1), 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 741) 	.cfi_endproc
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 742) 	.size	undo_switch_stack, .-undo_switch_stack
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 743) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 744) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 745)  * The meat of the context switch code.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 746)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 747) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 748) 	.align	4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 749) 	.globl	alpha_switch_to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 750) 	.type	alpha_switch_to, @function
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 751) 	.cfi_startproc
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 752) alpha_switch_to:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 753) 	DO_SWITCH_STACK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 754) 	call_pal PAL_swpctx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 755) 	lda	$8, 0x3fff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 756) 	UNDO_SWITCH_STACK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 757) 	bic	$sp, $8, $8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 758) 	mov	$17, $0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 759) 	ret
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 760) 	.cfi_endproc
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 761) 	.size	alpha_switch_to, .-alpha_switch_to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 762) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 763) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 764)  * New processes begin life here.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 765)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 766) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 767) 	.globl	ret_from_fork
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 768) 	.align	4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 769) 	.ent	ret_from_fork
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 770) ret_from_fork:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 771) 	lda	$26, ret_from_sys_call
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 772) 	mov	$17, $16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 773) 	jmp	$31, schedule_tail
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 774) .end ret_from_fork
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 775) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 776) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 777)  * ... and new kernel threads - here
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 778)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 779) 	.align 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 780) 	.globl	ret_from_kernel_thread
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 781) 	.ent	ret_from_kernel_thread
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 782) ret_from_kernel_thread:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 783) 	mov	$17, $16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 784) 	jsr	$26, schedule_tail
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 785) 	mov	$9, $27
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 786) 	mov	$10, $16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 787) 	jsr	$26, ($9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 788) 	br	$31, ret_to_user
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 789) .end ret_from_kernel_thread
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 790) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 791) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 792) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 793)  * Special system calls.  Most of these are special in that they either
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 794)  * have to play switch_stack games.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 795)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 796) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 797) .macro	fork_like name
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 798) 	.align	4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 799) 	.globl	alpha_\name
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 800) 	.ent	alpha_\name
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 801) alpha_\name:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 802) 	.prologue 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 803) 	bsr	$1, do_switch_stack
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 804) 	jsr	$26, sys_\name
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 805) 	ldq	$26, 56($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 806) 	lda	$sp, SWITCH_STACK_SIZE($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 807) 	ret
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 808) .end	alpha_\name
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 809) .endm
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 810) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 811) fork_like fork
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 812) fork_like vfork
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 813) fork_like clone
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 814) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 815) .macro	sigreturn_like name
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 816) 	.align	4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 817) 	.globl	sys_\name
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 818) 	.ent	sys_\name
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 819) sys_\name:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 820) 	.prologue 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 821) 	lda	$9, ret_from_straced
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 822) 	cmpult	$26, $9, $9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 823) 	lda	$sp, -SWITCH_STACK_SIZE($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 824) 	jsr	$26, do_\name
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 825) 	bne	$9, 1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 826) 	jsr	$26, syscall_trace_leave
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 827) 1:	br	$1, undo_switch_stack
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 828) 	br	ret_from_sys_call
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 829) .end sys_\name
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 830) .endm
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 831) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 832) sigreturn_like sigreturn
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 833) sigreturn_like rt_sigreturn
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 834) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 835) 	.align	4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 836) 	.globl	alpha_syscall_zero
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 837) 	.ent	alpha_syscall_zero
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 838) alpha_syscall_zero:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 839) 	.prologue 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 840) 	/* Special because it needs to do something opposite to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 841) 	   force_successful_syscall_return().  We use the saved
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 842) 	   syscall number for that, zero meaning "not an error".
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 843) 	   That works nicely, but for real syscall 0 we need to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 844) 	   make sure that this logics doesn't get confused.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 845) 	   Store a non-zero there - -ENOSYS we need in register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 846) 	   for our return value will do just fine.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 847) 	  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 848) 	lda	$0, -ENOSYS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 849) 	unop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 850) 	stq	$0, 0($sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 851) 	ret
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 852) .end alpha_syscall_zero