| .. | .. |
|---|
| 1 | +/* SPDX-License-Identifier: GPL-2.0-only */ |
|---|
| 1 | 2 | /* |
|---|
| 2 | 3 | * linux/arch/arm/kernel/entry-common.S |
|---|
| 3 | 4 | * |
|---|
| 4 | 5 | * Copyright (C) 2000 Russell King |
|---|
| 5 | | - * |
|---|
| 6 | | - * This program is free software; you can redistribute it and/or modify |
|---|
| 7 | | - * it under the terms of the GNU General Public License version 2 as |
|---|
| 8 | | - * published by the Free Software Foundation. |
|---|
| 9 | 6 | */ |
|---|
| 10 | 7 | |
|---|
| 11 | 8 | #include <asm/assembler.h> |
|---|
| .. | .. |
|---|
| 56 | 53 | cmp r2, #TASK_SIZE |
|---|
| 57 | 54 | blne addr_limit_check_failed |
|---|
| 58 | 55 | ldr r1, [tsk, #TI_FLAGS] @ re-check for syscall tracing |
|---|
| 59 | | - tst r1, #((_TIF_SYSCALL_WORK | _TIF_WORK_MASK) & ~_TIF_SECCOMP) |
|---|
| 60 | | - bne fast_work_pending |
|---|
| 61 | | - tst r1, #_TIF_SECCOMP |
|---|
| 56 | + movs r1, r1, lsl #16 |
|---|
| 62 | 57 | bne fast_work_pending |
|---|
| 63 | 58 | |
|---|
| 64 | 59 | |
|---|
| .. | .. |
|---|
| 95 | 90 | cmp r2, #TASK_SIZE |
|---|
| 96 | 91 | blne addr_limit_check_failed |
|---|
| 97 | 92 | ldr r1, [tsk, #TI_FLAGS] @ re-check for syscall tracing |
|---|
| 98 | | - tst r1, #((_TIF_SYSCALL_WORK | _TIF_WORK_MASK) & ~_TIF_SECCOMP) |
|---|
| 99 | | - bne do_slower_path |
|---|
| 100 | | - tst r1, #_TIF_SECCOMP |
|---|
| 93 | + movs r1, r1, lsl #16 |
|---|
| 101 | 94 | beq no_work_pending |
|---|
| 102 | | -do_slower_path: |
|---|
| 103 | 95 | UNWIND(.fnend ) |
|---|
| 104 | 96 | ENDPROC(ret_fast_syscall) |
|---|
| 105 | 97 | |
|---|
| .. | .. |
|---|
| 139 | 131 | cmp r2, #TASK_SIZE |
|---|
| 140 | 132 | blne addr_limit_check_failed |
|---|
| 141 | 133 | ldr r1, [tsk, #TI_FLAGS] |
|---|
| 142 | | - tst r1, #_TIF_WORK_MASK |
|---|
| 134 | + movs r1, r1, lsl #16 |
|---|
| 143 | 135 | bne slow_work_pending |
|---|
| 144 | 136 | no_work_pending: |
|---|
| 145 | 137 | asm_trace_hardirqs_on save = 0 |
|---|
| .. | .. |
|---|
| 171 | 163 | */ |
|---|
| 172 | 164 | |
|---|
| 173 | 165 | .align 5 |
|---|
| 166 | +#ifdef CONFIG_HARDEN_BRANCH_HISTORY |
|---|
| 167 | +ENTRY(vector_bhb_loop8_swi) |
|---|
| 168 | + sub sp, sp, #PT_REGS_SIZE |
|---|
| 169 | + stmia sp, {r0 - r12} |
|---|
| 170 | + mov r8, #8 |
|---|
| 171 | +1: b 2f |
|---|
| 172 | +2: subs r8, r8, #1 |
|---|
| 173 | + bne 1b |
|---|
| 174 | + dsb |
|---|
| 175 | + isb |
|---|
| 176 | + b 3f |
|---|
| 177 | +ENDPROC(vector_bhb_loop8_swi) |
|---|
| 178 | + |
|---|
| 179 | + .align 5 |
|---|
| 180 | +ENTRY(vector_bhb_bpiall_swi) |
|---|
| 181 | + sub sp, sp, #PT_REGS_SIZE |
|---|
| 182 | + stmia sp, {r0 - r12} |
|---|
| 183 | + mcr p15, 0, r8, c7, c5, 6 @ BPIALL |
|---|
| 184 | + isb |
|---|
| 185 | + b 3f |
|---|
| 186 | +ENDPROC(vector_bhb_bpiall_swi) |
|---|
| 187 | +#endif |
|---|
| 188 | + .align 5 |
|---|
| 174 | 189 | ENTRY(vector_swi) |
|---|
| 175 | 190 | #ifdef CONFIG_CPU_V7M |
|---|
| 176 | 191 | v7m_exception_entry |
|---|
| 177 | 192 | #else |
|---|
| 178 | 193 | sub sp, sp, #PT_REGS_SIZE |
|---|
| 179 | 194 | stmia sp, {r0 - r12} @ Calling r0 - r12 |
|---|
| 195 | +3: |
|---|
| 180 | 196 | ARM( add r8, sp, #S_PC ) |
|---|
| 181 | 197 | ARM( stmdb r8, {sp, lr}^ ) @ Calling sp, lr |
|---|
| 182 | 198 | THUMB( mov r8, sp ) |
|---|
| .. | .. |
|---|
| 378 | 394 | movhs scno, #0 |
|---|
| 379 | 395 | csdb |
|---|
| 380 | 396 | #endif |
|---|
| 381 | | - stmloia sp, {r5, r6} @ shuffle args |
|---|
| 397 | + stmialo sp, {r5, r6} @ shuffle args |
|---|
| 382 | 398 | movlo r0, r1 |
|---|
| 383 | 399 | movlo r1, r2 |
|---|
| 384 | 400 | movlo r2, r3 |
|---|