__  __    __   __  _____      _            _          _____ _          _ _ 
 |  \/  |   \ \ / / |  __ \    (_)          | |        / ____| |        | | |
 | \  / |_ __\ V /  | |__) | __ ___   ____ _| |_ ___  | (___ | |__   ___| | |
 | |\/| | '__|> <   |  ___/ '__| \ \ / / _` | __/ _ \  \___ \| '_ \ / _ \ | |
 | |  | | |_ / . \  | |   | |  | |\ V / (_| | ||  __/  ____) | | | |  __/ | |
 |_|  |_|_(_)_/ \_\ |_|   |_|  |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1
 if you need WebShell for Seo everyday contact me on Telegram
 Telegram Address : @jackleet
        
        
For_More_Tools: Telegram: @jackleet | Bulk Smtp support mail sender | Business Mail Collector | Mail Bouncer All Mail | Bulk Office Mail Validator | Html Letter private



Upload:

Command:

[email protected]: ~ $
/* SPDX-License-Identifier: GPL-2.0 */
/*
 * Copyright (C) 2020-2022 Loongson Technology Corporation Limited
 */
#ifndef _ASM_STACKFRAME_H
#define _ASM_STACKFRAME_H

#include <linux/threads.h>

#include <asm/addrspace.h>
#include <asm/asm.h>
#include <asm/asmmacro.h>
#include <asm/asm-offsets.h>
#include <asm/loongarch.h>
#include <asm/thread_info.h>
#include <asm/unwind_hints.h>

/* 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
	cfi_rel_offset \reg, \offset, \docfi
	LONG_S	\reg, sp, \offset
	.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, sp, \offset
	cfi_restore \reg \offset \docfi
	.endm

	.macro SETUP_DMWINS temp
	li.d	\temp, CSR_DMW0_INIT	# WUC, PLV0, 0x8000 xxxx xxxx xxxx
	csrwr	\temp, LOONGARCH_CSR_DMWIN0
	li.d	\temp, CSR_DMW1_INIT	# CAC, PLV0, 0x9000 xxxx xxxx xxxx
	csrwr	\temp, LOONGARCH_CSR_DMWIN1
	li.d	\temp, CSR_DMW2_INIT	# WUC, PLV0, 0xa000 xxxx xxxx xxxx
	csrwr	\temp, LOONGARCH_CSR_DMWIN2
	li.d	\temp, CSR_DMW3_INIT	# 0x0, unused
	csrwr	\temp, LOONGARCH_CSR_DMWIN3
	.endm

/* Jump to the runtime virtual address. */
	.macro JUMP_VIRT_ADDR temp1 temp2
	li.d	\temp1, CACHE_BASE
	pcaddi	\temp2, 0
	bstrins.d  \temp1, \temp2, (DMW_PABITS - 1), 0
	jirl	zero, \temp1, 0xc
	.endm

	.macro BACKUP_T0T1
	csrwr	t0, EXCEPTION_KS0
	csrwr	t1, EXCEPTION_KS1
	.endm

	.macro RELOAD_T0T1
	csrrd   t0, EXCEPTION_KS0
	csrrd   t1, EXCEPTION_KS1
	.endm

	.macro	SAVE_TEMP docfi=0
	RELOAD_T0T1
	cfi_st	t0, PT_R12, \docfi
	cfi_st	t1, PT_R13, \docfi
	cfi_st	t2, PT_R14, \docfi
	cfi_st	t3, PT_R15, \docfi
	cfi_st	t4, PT_R16, \docfi
	cfi_st	t5, PT_R17, \docfi
	cfi_st	t6, PT_R18, \docfi
	cfi_st	t7, PT_R19, \docfi
	cfi_st	t8, PT_R20, \docfi
	.endm

	.macro	SAVE_STATIC docfi=0
	cfi_st	s0, PT_R23, \docfi
	cfi_st	s1, PT_R24, \docfi
	cfi_st	s2, PT_R25, \docfi
	cfi_st	s3, PT_R26, \docfi
	cfi_st	s4, PT_R27, \docfi
	cfi_st	s5, PT_R28, \docfi
	cfi_st	s6, PT_R29, \docfi
	cfi_st	s7, PT_R30, \docfi
	cfi_st	s8, PT_R31, \docfi
	.endm

/*
 * get_saved_sp returns the SP for the current CPU by looking in the
 * kernelsp array for it. It stores the current sp in t0 and loads the
 * new value in sp.
 */
	.macro	get_saved_sp docfi=0
	la_abs	  t1, kernelsp
#ifdef CONFIG_SMP
	csrrd	  t0, PERCPU_BASE_KS
	LONG_ADD  t1, t1, t0
#endif
	move	  t0, sp
	.if \docfi
	.cfi_register sp, t0
	.endif
	LONG_L	  sp, t1, 0
	.endm

	.macro	set_saved_sp stackp temp temp2
	la.pcrel  \temp, kernelsp
#ifdef CONFIG_SMP
	LONG_ADD  \temp, \temp, u0
#endif
	LONG_S	  \stackp, \temp, 0
	.endm

	.macro	SAVE_SOME docfi=0
	csrrd	t1, LOONGARCH_CSR_PRMD
	andi	t1, t1, 0x3	/* extract pplv bit */
	move	t0, sp
	beqz	t1, 8f
	/* Called from user mode, new stack. */
	get_saved_sp docfi=\docfi
8:
	PTR_ADDI sp, sp, -PT_SIZE
	.if \docfi
	.cfi_def_cfa sp, 0
	.endif
	cfi_st	t0, PT_R3, \docfi
	cfi_rel_offset  sp, PT_R3, \docfi
	LONG_S	zero, sp, PT_R0
	csrrd	t0, LOONGARCH_CSR_PRMD
	LONG_S	t0, sp, PT_PRMD
	csrrd	t0, LOONGARCH_CSR_CRMD
	LONG_S	t0, sp, PT_CRMD
	csrrd	t0, LOONGARCH_CSR_EUEN
	LONG_S  t0, sp, PT_EUEN
	csrrd	t0, LOONGARCH_CSR_ECFG
	LONG_S	t0, sp, PT_ECFG
	csrrd	t0, LOONGARCH_CSR_ESTAT
	PTR_S	t0, sp, PT_ESTAT
	cfi_st	ra, PT_R1, \docfi
	cfi_st	a0, PT_R4, \docfi
	cfi_st	a1, PT_R5, \docfi
	cfi_st	a2, PT_R6, \docfi
	cfi_st	a3, PT_R7, \docfi
	cfi_st	a4, PT_R8, \docfi
	cfi_st	a5, PT_R9, \docfi
	cfi_st	a6, PT_R10, \docfi
	cfi_st	a7, PT_R11, \docfi
	csrrd	ra, LOONGARCH_CSR_ERA
	LONG_S	ra, sp, PT_ERA
	.if \docfi
	.cfi_rel_offset ra, PT_ERA
	.endif
	cfi_st	tp, PT_R2, \docfi
	cfi_st	fp, PT_R22, \docfi

	/* Set thread_info if we're coming from user mode */
	csrrd	t0, LOONGARCH_CSR_PRMD
	andi	t0, t0, 0x3	/* extract pplv bit */
	beqz	t0, 9f

	li.d	tp, ~_THREAD_MASK
	and	tp, tp, sp
	cfi_st  u0, PT_R21, \docfi
	csrrd	u0, PERCPU_BASE_KS
9:
#ifdef CONFIG_KGDB
	li.w	t0, CSR_CRMD_WE
	csrxchg	t0, t0, LOONGARCH_CSR_CRMD
#endif
	UNWIND_HINT_REGS
	.endm

	.macro	SAVE_ALL docfi=0
	SAVE_SOME \docfi
	SAVE_TEMP \docfi
	SAVE_STATIC \docfi
	.endm

	.macro	RESTORE_TEMP docfi=0
	cfi_ld	t0, PT_R12, \docfi
	cfi_ld	t1, PT_R13, \docfi
	cfi_ld	t2, PT_R14, \docfi
	cfi_ld	t3, PT_R15, \docfi
	cfi_ld	t4, PT_R16, \docfi
	cfi_ld	t5, PT_R17, \docfi
	cfi_ld	t6, PT_R18, \docfi
	cfi_ld	t7, PT_R19, \docfi
	cfi_ld	t8, PT_R20, \docfi
	.endm

	.macro	RESTORE_STATIC docfi=0
	cfi_ld	s0, PT_R23, \docfi
	cfi_ld	s1, PT_R24, \docfi
	cfi_ld	s2, PT_R25, \docfi
	cfi_ld	s3, PT_R26, \docfi
	cfi_ld	s4, PT_R27, \docfi
	cfi_ld	s5, PT_R28, \docfi
	cfi_ld	s6, PT_R29, \docfi
	cfi_ld	s7, PT_R30, \docfi
	cfi_ld	s8, PT_R31, \docfi
	.endm

	.macro	RESTORE_SOME docfi=0
	LONG_L	a0, sp, PT_PRMD
	andi    a0, a0, 0x3	/* extract pplv bit */
	beqz    a0, 8f
	cfi_ld  u0, PT_R21, \docfi
8:
	LONG_L	a0, sp, PT_ERA
	csrwr	a0, LOONGARCH_CSR_ERA
	LONG_L	a0, sp, PT_PRMD
	csrwr	a0, LOONGARCH_CSR_PRMD
	cfi_ld	ra, PT_R1, \docfi
	cfi_ld	a0, PT_R4, \docfi
	cfi_ld	a1, PT_R5, \docfi
	cfi_ld	a2, PT_R6, \docfi
	cfi_ld	a3, PT_R7, \docfi
	cfi_ld	a4, PT_R8, \docfi
	cfi_ld	a5, PT_R9, \docfi
	cfi_ld	a6, PT_R10, \docfi
	cfi_ld	a7, PT_R11, \docfi
	cfi_ld	tp, PT_R2, \docfi
	cfi_ld	fp, PT_R22, \docfi
	.endm

	.macro	RESTORE_SP_AND_RET docfi=0
	cfi_ld	sp, PT_R3, \docfi
	UNWIND_HINT_FUNC
	ertn
	.endm

	.macro	RESTORE_ALL_AND_RET docfi=0
	RESTORE_STATIC \docfi
	RESTORE_TEMP \docfi
	RESTORE_SOME \docfi
	RESTORE_SP_AND_RET \docfi
	.endm

#endif /* _ASM_STACKFRAME_H */

Filemanager

Name Type Size Permission Actions
vdso Folder 0755
Kbuild File 332 B 0644
acenv.h File 500 B 0644
acpi.h File 1.38 KB 0644
addrspace.h File 2.94 KB 0644
alternative-asm.h File 2.04 KB 0644
alternative.h File 3.77 KB 0644
asm-extable.h File 1.67 KB 0644
asm-offsets.h File 148 B 0644
asm-prototypes.h File 395 B 0644
asm.h File 3.86 KB 0644
asmmacro.h File 22.33 KB 0644
atomic.h File 10.5 KB 0644
barrier.h File 3.27 KB 0644
bitops.h File 860 B 0644
bitrev.h File 703 B 0644
bootinfo.h File 1.28 KB 0644
branch.h File 388 B 0644
bug.h File 1.4 KB 0644
cache.h File 362 B 0644
cacheflush.h File 2.24 KB 0644
cacheops.h File 1.54 KB 0644
checksum.h File 1.61 KB 0644
clocksource.h File 287 B 0644
cmpxchg.h File 4.94 KB 0644
cpu-features.h File 2.79 KB 0644
cpu-info.h File 2.89 KB 0644
cpu.h File 5.37 KB 0644
cpufeature.h File 576 B 0644
crash_reserve.h File 286 B 0644
delay.h File 582 B 0644
dma.h File 247 B 0644
dmi.h File 523 B 0644
efi.h File 867 B 0644
elf.h File 9.06 KB 0644
entry-common.h File 315 B 0644
exception.h File 1.73 KB 0644
exec.h File 237 B 0644
extable.h File 1.34 KB 0644
fixmap.h File 612 B 0644
fpregdef.h File 1.19 KB 0644
fprobe.h File 422 B 0644
fpu.h File 7.21 KB 0644
ftrace.h File 2.23 KB 0644
futex.h File 2.09 KB 0644
gpr-num.h File 1.39 KB 0644
hardirq.h File 706 B 0644
hugetlb.h File 2.12 KB 0644
hw_breakpoint.h File 3.82 KB 0644
hw_irq.h File 396 B 0644
idle.h File 184 B 0644
inst.h File 19.67 KB 0644
io.h File 2.5 KB 0644
irq.h File 3.71 KB 0644
irq_regs.h File 538 B 0644
irq_work.h File 237 B 0644
irqflags.h File 1.82 KB 0644
jump_label.h File 1.19 KB 0644
kasan.h File 3.33 KB 0644
kdebug.h File 318 B 0644
kexec.h File 1.46 KB 0644
kfence.h File 1.63 KB 0644
kgdb.h File 2.24 KB 0644
kprobes.h File 1.45 KB 0644
kvm_csr.h File 9.3 KB 0644
kvm_eiointc.h File 3.61 KB 0644
kvm_host.h File 9.2 KB 0644
kvm_ipi.h File 876 B 0644
kvm_mmu.h File 3.34 KB 0644
kvm_para.h File 4.29 KB 0644
kvm_pch_pic.h File 2.04 KB 0644
kvm_types.h File 271 B 0644
kvm_vcpu.h File 4.37 KB 0644
lbt.h File 2.39 KB 0644
linkage.h File 1.02 KB 0644
local.h File 3.67 KB 0644
loongarch.h File 59.34 KB 0644
loongson.h File 5.86 KB 0644
mmu.h File 301 B 0644
mmu_context.h File 4.03 KB 0644
module.h File 2.68 KB 0644
module.lds.h File 243 B 0644
numa.h File 1.54 KB 0644
orc_header.h File 426 B 0644
orc_lookup.h File 999 B 0644
orc_types.h File 1.73 KB 0644
page.h File 3.03 KB 0644
paravirt.h File 773 B 0644
paravirt_api_clock.h File 26 B 0644
pci.h File 543 B 0644
percpu.h File 5.16 KB 0644
perf_event.h File 517 B 0644
pgalloc.h File 2.3 KB 0644
pgtable-bits.h File 4.38 KB 0644
pgtable.h File 15.83 KB 0644
prefetch.h File 473 B 0644
processor.h File 5.35 KB 0644
ptrace.h File 5.38 KB 0644
qspinlock.h File 834 B 0644
regdef.h File 871 B 0644
seccomp.h File 500 B 0644
serial.h File 274 B 0644
set_memory.h File 723 B 0644
setup.h File 1.13 KB 0644
smp.h File 3.09 KB 0644
sparsemem.h File 866 B 0644
spinlock.h File 271 B 0644
spinlock_types.h File 262 B 0644
stackframe.h File 5.39 KB 0644
stackprotector.h File 1 KB 0644
stacktrace.h File 2.53 KB 0644
string.h File 1.09 KB 0644
suspend.h File 240 B 0644
switch_to.h File 1.42 KB 0644
syscall.h File 1.66 KB 0644
thread_info.h File 4.06 KB 0644
time.h File 1.09 KB 0644
timex.h File 436 B 0644
tlb.h File 3.93 KB 0644
tlbflush.h File 1.82 KB 0644
topology.h File 1.03 KB 0644
types.h File 371 B 0644
uaccess.h File 7.53 KB 0644
unistd.h File 334 B 0644
unwind.h File 2.61 KB 0644
unwind_hints.h File 788 B 0644
uprobes.h File 927 B 0644
vdso.h File 1.14 KB 0644
vermagic.h File 430 B 0644
video.h File 769 B 0644
vmalloc.h File 105 B 0644
xor.h File 1.64 KB 0644
xor_simd.h File 1.68 KB 0644
Filemanager