/usr/src/linux-headers-5.15.0-181/arch/mips/include/asm
NameSizeModeActions
dec/-0755rm
fw/-0755rm
ip32/-0755rm
mach-ar7/-0755rm
mach-ath25/-0755rm
mach-ath79/-0755rm
mach-au1x00/-0755rm
mach-bcm47xx/-0755rm
mach-bcm63xx/-0755rm
mach-bmips/-0755rm
mach-cavium-octeon/-0755rm
mach-cobalt/-0755rm
mach-db1x00/-0755rm
mach-dec/-0755rm
mach-generic/-0755rm
mach-ingenic/-0755rm
mach-ip22/-0755rm
mach-ip27/-0755rm
mach-ip28/-0755rm
mach-ip30/-0755rm
mach-ip32/-0755rm
mach-jazz/-0755rm
mach-lantiq/-0755rm
mach-loongson2ef/-0755rm
mach-loongson32/-0755rm
mach-loongson64/-0755rm
mach-malta/-0755rm
mach-n64/-0755rm
mach-netlogic/-0755rm
mach-pic32/-0755rm
mach-ralink/-0755rm
mach-rc32434/-0755rm
mach-rm/-0755rm
mach-sibyte/-0755rm
mach-tx39xx/-0755rm
mach-tx49xx/-0755rm
mach-vr41xx/-0755rm
mips-boards/-0755rm
netlogic/-0755rm
octeon/-0755rm
pci/-0755rm
sgi/-0755rm
sibyte/-0755rm
sn/-0755rm
txx9/-0755rm
vdso/-0755rm
vr41xx/-0755rm
xtalk/-0755rm
abi.h8530644editdlrm
addrspace.h40390644editdlrm
amon.h4090644editdlrm
arch_hweight.h7920644editdlrm
asm-eva.h73430644editdlrm
asm-offsets.h350644editdlrm
asm-prototypes.h2280644editdlrm
asm.h66880644editdlrm
asmmacro-32.h25290644editdlrm
asmmacro-64.h12540644editdlrm
asmmacro.h146390644editdlrm
atomic.h82990644editdlrm
barrier.h35070644editdlrm
bcache.h20860644editdlrm
bitops.h109140644editdlrm
bitrev.h6080644editdlrm
bmips-spaces.h2680644editdlrm
bmips.h30970644editdlrm
bootinfo.h49280644editdlrm
branch.h25030644editdlrm
break.h7870644editdlrm
bug.h7590644editdlrm
bugs.h6400644editdlrm
cache.h5270644editdlrm
cacheflush.h48630644editdlrm
cacheops.h38010644editdlrm
cdmm.h37610644editdlrm
cevt-r4k.h8230644editdlrm
checksum.h57430644editdlrm
clocksource.h2730644editdlrm
cmp.h4920644editdlrm
cmpxchg.h88800644editdlrm
compat-signal.h6400644editdlrm
compat.h38660644editdlrm
compiler.h26690644editdlrm
cop2.h18120644editdlrm
cpu-features.h227520644editdlrm
cpu-info.h63030644editdlrm
cpu-type.h42560644editdlrm
cpu.h169550644editdlrm
cpufeature.h5100644editdlrm
debug.h4470644editdlrm
delay.h8410644editdlrm
div64.h22230644editdlrm
dma-direct.h2550644editdlrm
dma-mapping.h3650644editdlrm
dma.h101610644editdlrm
dmi.h5470644editdlrm
ds1287.h3330644editdlrm
dsemul.h35950644editdlrm
dsp.h17470644editdlrm
edac.h8390644editdlrm
elf.h155590644editdlrm
elfcore-compat.h8410644editdlrm
errno.h4290644editdlrm
eva.h7960644editdlrm
exec.h5790644editdlrm
extable.h2410644editdlrm
fb.h3720644editdlrm
fixmap.h22190644editdlrm
floppy.h16090644editdlrm
fpregdef.h27260644editdlrm
fpu.h73320644editdlrm
fpu_emulator.h48440644editdlrm
ftrace.h26590644editdlrm
futex.h52410644editdlrm
ginvt.h10560644editdlrm
gio_device.h14110644editdlrm
gt64120.h192180644editdlrm
hardirq.h5440644editdlrm
hazards.h86730644editdlrm
highmem.h17410644editdlrm
hpet.h19740644editdlrm
hugetlb.h21650644editdlrm
hw_irq.h4750644editdlrm
i8259.h24400644editdlrm
ide.h3300644editdlrm
idle.h7270644editdlrm
inst.h23980644editdlrm
io.h173340644editdlrm
irq.h24080644editdlrm
irqflags.h42060644editdlrm
irq_cpu.h4270644editdlrm
irq_gt641xx.h20740644editdlrm
irq_regs.h5400644editdlrm
isa-rev.h5560644editdlrm
isadep.h6030644editdlrm
jazz.h81920644editdlrm
jazzdma.h28260644editdlrm
jump_label.h15710644editdlrm
Kbuild4140644editdlrm
kdebug.h3030644editdlrm
kexec.h14900644editdlrm
kgdb.h12220644editdlrm
kprobes.h17270644editdlrm
kvm_host.h304880644editdlrm
kvm_types.h1840644editdlrm
linkage.h3060644editdlrm
llsc.h9230644editdlrm
local.h54730644editdlrm
maar.h42700644editdlrm
machine.h27950644editdlrm
mc146818-time.h37790644editdlrm
mc146818rtc.h4500644editdlrm
mips-cm.h168570644editdlrm
mips-cpc.h57660644editdlrm
mips-cps.h64940644editdlrm
mips-gic.h123870644editdlrm
mips-r2-to-r6-emul.h20950644editdlrm
mipsmtregs.h111710644editdlrm
mipsprom.h21460644editdlrm
mipsregs.h967920644editdlrm
mips_mt.h7070644editdlrm
mmiowb.h1970644editdlrm
mmu.h5550644editdlrm
mmu_context.h62050644editdlrm
mmzone.h4270644editdlrm
module.h23880644editdlrm
msa.h75250644editdlrm
msc01_ic.h67090644editdlrm
paccess.h31400644editdlrm
page.h76100644editdlrm
pci.h39020644editdlrm
perf_event.h3360644editdlrm
pgalloc.h25710644editdlrm
pgtable-32.h81490644editdlrm
pgtable-64.h97090644editdlrm
pgtable-bits.h78520644editdlrm
pgtable.h185290644editdlrm
pm-cps.h15150644editdlrm
pm.h38710644editdlrm
prefetch.h21480644editdlrm
processor.h113210644editdlrm
prom.h6960644editdlrm
ptrace.h55820644editdlrm
r4k-timer.h6040644editdlrm
r4kcache.h113730644editdlrm
reboot.h4400644editdlrm
reg.h260644editdlrm
regdef.h26930644editdlrm
rtlx.h21480644editdlrm
seccomp.h8100644editdlrm
setup.h9410644editdlrm
sgialib.h17430644editdlrm
sgiarcs.h140220644editdlrm
shmparam.h3520644editdlrm
sigcontext.h10600644editdlrm
signal.h10420644editdlrm
sim.h20700644editdlrm
smp-cps.h9980644editdlrm
smp-ops.h24760644editdlrm
smp.h36960644editdlrm
sni.h74950644editdlrm
socket.h13770644editdlrm
sparsemem.h4860644editdlrm
spinlock.h8220644editdlrm
spinlock_types.h1880644editdlrm
spram.h2610644editdlrm
stackframe.h111570644editdlrm
stackprotector.h11770644editdlrm
stacktrace.h21990644editdlrm
string.h6920644editdlrm
switch_to.h44550644editdlrm
sync.h78230644editdlrm
syscall.h37030644editdlrm
termios.h29330644editdlrm
thread_info.h66400644editdlrm
time.h16170644editdlrm
timex.h29370644editdlrm
tlb.h6130644editdlrm
tlbdebug.h4030644editdlrm
tlbex.h9770644editdlrm
tlbflush.h16830644editdlrm
tlbmisc.h3200644editdlrm
topology.h6190644editdlrm
traps.h12290644editdlrm
txx9irq.h7430644editdlrm
txx9pio.h5920644editdlrm
txx9tmr.h16250644editdlrm
types.h4590644editdlrm
uaccess.h164500644editdlrm
uasm.h95780644editdlrm
unaligned-emul.h268560644editdlrm
unistd.h18600644editdlrm
unroll.h28600644editdlrm
uprobes.h11410644editdlrm
vdso.h14690644editdlrm
vermagic.h23720644editdlrm
vga.h12910644editdlrm
vmalloc.h900644editdlrm
vpe.h28430644editdlrm
war.h22820644editdlrm
watch.h8270644editdlrm
wbflush.h6940644editdlrm
yamon-dt.h17170644editdlrm
Edit: /usr/src/linux-headers-5.15.0-181/arch/mips/include/asm/stackframe.h (11157B)
/* * This file is subject to the terms and conditions of the GNU General Public * License. See the file "COPYING" in the main directory of this archive * for more details. * * Copyright (C) 1994, 95, 96, 99, 2001 Ralf Baechle * Copyright (C) 1994, 1995, 1996 Paul M. Antoine. * Copyright (C) 1999 Silicon Graphics, Inc. * Copyright (C) 2007 Maciej W. Rozycki */ #ifndef _ASM_STACKFRAME_H #define _ASM_STACKFRAME_H #include #include #include #include #include #include /* Make the addition of cfi info a little easier. */ .macro cfi_rel_offset reg offset=0 docfi=0 .if \docfi .cfi_rel_offset \reg, \offset .endif .endm .macro cfi_st reg offset=0 docfi=0 LONG_S \reg, \offset(sp) cfi_rel_offset \reg, \offset, \docfi .endm .macro cfi_restore reg offset=0 docfi=0 .if \docfi .cfi_restore \reg .endif .endm .macro cfi_ld reg offset=0 docfi=0 LONG_L \reg, \offset(sp) cfi_restore \reg \offset \docfi .endm #if defined(CONFIG_CPU_R3000) || defined(CONFIG_CPU_TX39XX) #define STATMASK 0x3f #else #define STATMASK 0x1f #endif .macro SAVE_AT docfi=0 .set push .set noat cfi_st $1, PT_R1, \docfi .set pop .endm .macro SAVE_TEMP docfi=0 #ifdef CONFIG_CPU_HAS_SMARTMIPS mflhxu v1 LONG_S v1, PT_LO(sp) mflhxu v1 LONG_S v1, PT_HI(sp) mflhxu v1 LONG_S v1, PT_ACX(sp) #elif !defined(CONFIG_CPU_MIPSR6) mfhi v1 #endif #ifdef CONFIG_32BIT cfi_st $8, PT_R8, \docfi cfi_st $9, PT_R9, \docfi #endif cfi_st $10, PT_R10, \docfi cfi_st $11, PT_R11, \docfi cfi_st $12, PT_R12, \docfi #if !defined(CONFIG_CPU_HAS_SMARTMIPS) && !defined(CONFIG_CPU_MIPSR6) LONG_S v1, PT_HI(sp) mflo v1 #endif cfi_st $13, PT_R13, \docfi cfi_st $14, PT_R14, \docfi cfi_st $15, PT_R15, \docfi cfi_st $24, PT_R24, \docfi #if !defined(CONFIG_CPU_HAS_SMARTMIPS) && !defined(CONFIG_CPU_MIPSR6) LONG_S v1, PT_LO(sp) #endif #ifdef CONFIG_CPU_CAVIUM_OCTEON /* * The Octeon multiplier state is affected by general * multiply instructions. It must be saved before and * kernel code might corrupt it */ jal octeon_mult_save #endif .endm .macro SAVE_STATIC docfi=0 cfi_st $16, PT_R16, \docfi cfi_st $17, PT_R17, \docfi cfi_st $18, PT_R18, \docfi cfi_st $19, PT_R19, \docfi cfi_st $20, PT_R20, \docfi cfi_st $21, PT_R21, \docfi cfi_st $22, PT_R22, \docfi cfi_st $23, PT_R23, \docfi cfi_st $30, PT_R30, \docfi .endm /* * get_saved_sp returns the SP for the current CPU by looking in the * kernelsp array for it. If tosp is set, it stores the current sp in * k0 and loads the new value in sp. If not, it clobbers k0 and * stores the new value in k1, leaving sp unaffected. */ #ifdef CONFIG_SMP /* SMP variation */ .macro get_saved_sp docfi=0 tosp=0 ASM_CPUID_MFC0 k0, ASM_SMP_CPUID_REG #if defined(CONFIG_32BIT) || defined(KBUILD_64BIT_SYM32) lui k1, %hi(kernelsp) #else lui k1, %highest(kernelsp) daddiu k1, %higher(kernelsp) dsll k1, 16 daddiu k1, %hi(kernelsp) dsll k1, 16 #endif LONG_SRL k0, SMP_CPUID_PTRSHIFT LONG_ADDU k1, k0 .if \tosp move k0, sp .if \docfi .cfi_register sp, k0 .endif LONG_L sp, %lo(kernelsp)(k1) .else LONG_L k1, %lo(kernelsp)(k1) .endif .endm .macro set_saved_sp stackp temp temp2 ASM_CPUID_MFC0 \temp, ASM_SMP_CPUID_REG LONG_SRL \temp, SMP_CPUID_PTRSHIFT LONG_S \stackp, kernelsp(\temp) .endm #else /* !CONFIG_SMP */ /* Uniprocessor variation */ .macro get_saved_sp docfi=0 tosp=0 #ifdef CONFIG_CPU_JUMP_WORKAROUNDS /* * Clear BTB (branch target buffer), forbid RAS (return address * stack) to workaround the Out-of-order Issue in Loongson2F * via its diagnostic register. */ move k0, ra jal 1f nop 1: jal 1f nop 1: jal 1f nop 1: jal 1f nop 1: move ra, k0 li k0, 3 mtc0 k0, $22 #endif /* CONFIG_CPU_JUMP_WORKAROUNDS */ #if defined(CONFIG_32BIT) || defined(KBUILD_64BIT_SYM32) lui k1, %hi(kernelsp) #else lui k1, %highest(kernelsp) daddiu k1, %higher(kernelsp) dsll k1, k1, 16 daddiu k1, %hi(kernelsp) dsll k1, k1, 16 #endif .if \tosp move k0, sp .if \docfi .cfi_register sp, k0 .endif LONG_L sp, %lo(kernelsp)(k1) .else LONG_L k1, %lo(kernelsp)(k1) .endif .endm .macro set_saved_sp stackp temp temp2 LONG_S \stackp, kernelsp .endm #endif .macro SAVE_SOME docfi=0 .set push .set noat .set reorder mfc0 k0, CP0_STATUS sll k0, 3 /* extract cu0 bit */ .set noreorder bltz k0, 8f move k0, sp .if \docfi .cfi_register sp, k0 .endif #ifdef CONFIG_EVA /* * Flush interAptiv's Return Prediction Stack (RPS) by writing * EntryHi. Toggling Config7.RPS is slower and less portable. * * The RPS isn't automatically flushed when exceptions are * taken, which can result in kernel mode speculative accesses * to user addresses if the RPS mispredicts. That's harmless * when user and kernel share the same address space, but with * EVA the same user segments may be unmapped to kernel mode, * even containing sensitive MMIO regions or invalid memory. * * This can happen when the kernel sets the return address to * ret_from_* and jr's to the exception handler, which looks * more like a tail call than a function call. If nested calls * don't evict the last user address in the RPS, it will * mispredict the return and fetch from a user controlled * address into the icache. * * More recent EVA-capable cores with MAAR to restrict * speculative accesses aren't affected. */ MFC0 k0, CP0_ENTRYHI MTC0 k0, CP0_ENTRYHI #endif .set reorder /* Called from user mode, new stack. */ get_saved_sp docfi=\docfi tosp=1 8: #ifdef CONFIG_CPU_DADDI_WORKAROUNDS .set at=k1 #endif PTR_SUBU sp, PT_SIZE #ifdef CONFIG_CPU_DADDI_WORKAROUNDS .set noat #endif .if \docfi .cfi_def_cfa sp,0 .endif cfi_st k0, PT_R29, \docfi cfi_rel_offset sp, PT_R29, \docfi cfi_st v1, PT_R3, \docfi /* * You might think that you don't need to save $0, * but the FPU emulator and gdb remote debug stub * need it to operate correctly */ LONG_S $0, PT_R0(sp) mfc0 v1, CP0_STATUS cfi_st v0, PT_R2, \docfi LONG_S v1, PT_STATUS(sp) cfi_st $4, PT_R4, \docfi mfc0 v1, CP0_CAUSE cfi_st $5, PT_R5, \docfi LONG_S v1, PT_CAUSE(sp) cfi_st $6, PT_R6, \docfi cfi_st ra, PT_R31, \docfi MFC0 ra, CP0_EPC cfi_st $7, PT_R7, \docfi #ifdef CONFIG_64BIT cfi_st $8, PT_R8, \docfi cfi_st $9, PT_R9, \docfi #endif LONG_S ra, PT_EPC(sp) .if \docfi .cfi_rel_offset ra, PT_EPC .endif cfi_st $25, PT_R25, \docfi cfi_st $28, PT_R28, \docfi /* Set thread_info if we're coming from user mode */ mfc0 k0, CP0_STATUS sll k0, 3 /* extract cu0 bit */ bltz k0, 9f ori $28, sp, _THREAD_MASK xori $28, _THREAD_MASK #ifdef CONFIG_CPU_CAVIUM_OCTEON .set mips64 pref 0, 0($28) /* Prefetch the current pointer */ #endif 9: .set pop .endm .macro SAVE_ALL docfi=0 SAVE_SOME \docfi SAVE_AT \docfi SAVE_TEMP \docfi SAVE_STATIC \docfi .endm .macro RESTORE_AT docfi=0 .set push .set noat cfi_ld $1, PT_R1, \docfi .set pop .endm .macro RESTORE_TEMP docfi=0 #ifdef CONFIG_CPU_CAVIUM_OCTEON /* Restore the Octeon multiplier state */ jal octeon_mult_restore #endif #ifdef CONFIG_CPU_HAS_SMARTMIPS LONG_L $24, PT_ACX(sp) mtlhx $24 LONG_L $24, PT_HI(sp) mtlhx $24 LONG_L $24, PT_LO(sp) mtlhx $24 #elif !defined(CONFIG_CPU_MIPSR6) LONG_L $24, PT_LO(sp) mtlo $24 LONG_L $24, PT_HI(sp) mthi $24 #endif #ifdef CONFIG_32BIT cfi_ld $8, PT_R8, \docfi cfi_ld $9, PT_R9, \docfi #endif cfi_ld $10, PT_R10, \docfi cfi_ld $11, PT_R11, \docfi cfi_ld $12, PT_R12, \docfi cfi_ld $13, PT_R13, \docfi cfi_ld $14, PT_R14, \docfi cfi_ld $15, PT_R15, \docfi cfi_ld $24, PT_R24, \docfi .endm .macro RESTORE_STATIC docfi=0 cfi_ld $16, PT_R16, \docfi cfi_ld $17, PT_R17, \docfi cfi_ld $18, PT_R18, \docfi cfi_ld $19, PT_R19, \docfi cfi_ld $20, PT_R20, \docfi cfi_ld $21, PT_R21, \docfi cfi_ld $22, PT_R22, \docfi cfi_ld $23, PT_R23, \docfi cfi_ld $30, PT_R30, \docfi .endm .macro RESTORE_SP docfi=0 cfi_ld sp, PT_R29, \docfi .endm #if defined(CONFIG_CPU_R3000) || defined(CONFIG_CPU_TX39XX) .macro RESTORE_SOME docfi=0 .set push .set reorder .set noat mfc0 a0, CP0_STATUS li v1, ST0_CU1 | ST0_IM ori a0, STATMASK xori a0, STATMASK mtc0 a0, CP0_STATUS and a0, v1 LONG_L v0, PT_STATUS(sp) nor v1, $0, v1 and v0, v1 or v0, a0 mtc0 v0, CP0_STATUS cfi_ld $31, PT_R31, \docfi cfi_ld $28, PT_R28, \docfi cfi_ld $25, PT_R25, \docfi cfi_ld $7, PT_R7, \docfi cfi_ld $6, PT_R6, \docfi cfi_ld $5, PT_R5, \docfi cfi_ld $4, PT_R4, \docfi cfi_ld $3, PT_R3, \docfi cfi_ld $2, PT_R2, \docfi .set pop .endm .macro RESTORE_SP_AND_RET docfi=0 .set push .set noreorder LONG_L k0, PT_EPC(sp) RESTORE_SP \docfi jr k0 rfe .set pop .endm #else .macro RESTORE_SOME docfi=0 .set push .set reorder .set noat mfc0 a0, CP0_STATUS ori a0, STATMASK xori a0, STATMASK mtc0 a0, CP0_STATUS li v1, ST0_CU1 | ST0_FR | ST0_IM and a0, v1 LONG_L v0, PT_STATUS(sp) nor v1, $0, v1 and v0, v1 or v0, a0 mtc0 v0, CP0_STATUS LONG_L v1, PT_EPC(sp) MTC0 v1, CP0_EPC cfi_ld $31, PT_R31, \docfi cfi_ld $28, PT_R28, \docfi cfi_ld $25, PT_R25, \docfi #ifdef CONFIG_64BIT cfi_ld $8, PT_R8, \docfi cfi_ld $9, PT_R9, \docfi #endif cfi_ld $7, PT_R7, \docfi cfi_ld $6, PT_R6, \docfi cfi_ld $5, PT_R5, \docfi cfi_ld $4, PT_R4, \docfi cfi_ld $3, PT_R3, \docfi cfi_ld $2, PT_R2, \docfi .set pop .endm .macro RESTORE_SP_AND_RET docfi=0 RESTORE_SP \docfi #if defined(CONFIG_CPU_MIPSR5) || defined(CONFIG_CPU_MIPSR6) eretnc #else .set push .set arch=r4000 eret .set pop #endif .endm #endif .macro RESTORE_ALL docfi=0 RESTORE_TEMP \docfi RESTORE_STATIC \docfi RESTORE_AT \docfi RESTORE_SOME \docfi RESTORE_SP \docfi .endm /* * Move to kernel mode and disable interrupts. * Set cp0 enable bit as sign that we're running on the kernel stack */ .macro CLI mfc0 t0, CP0_STATUS li t1, ST0_KERNEL_CUMASK | STATMASK or t0, t1 xori t0, STATMASK mtc0 t0, CP0_STATUS irq_disable_hazard .endm /* * Move to kernel mode and enable interrupts. * Set cp0 enable bit as sign that we're running on the kernel stack */ .macro STI mfc0 t0, CP0_STATUS li t1, ST0_KERNEL_CUMASK | STATMASK or t0, t1 xori t0, STATMASK & ~1 mtc0 t0, CP0_STATUS irq_enable_hazard .endm /* * Just move to kernel mode and leave interrupts as they are. Note * for the R3000 this means copying the previous enable from IEp. * Set cp0 enable bit as sign that we're running on the kernel stack */ .macro KMODE mfc0 t0, CP0_STATUS li t1, ST0_KERNEL_CUMASK | (STATMASK & ~1) #if defined(CONFIG_CPU_R3000) || defined(CONFIG_CPU_TX39XX) andi t2, t0, ST0_IEP srl t2, 2 or t0, t2 #endif or t0, t1 xori t0, STATMASK & ~1 mtc0 t0, CP0_STATUS irq_disable_hazard .endm #endif /* _ASM_STACKFRAME_H */