__  __    __   __  _____      _            _          _____ _          _ _ 
 |  \/  |   \ \ / / |  __ \    (_)          | |        / ____| |        | | |
 | \  / |_ __\ 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 */
#ifndef __ASM_ALTERNATIVE_MACROS_H
#define __ASM_ALTERNATIVE_MACROS_H

#include <linux/const.h>
#include <vdso/bits.h>

#include <asm/cpucaps.h>
#include <asm/insn-def.h>

/*
 * Binutils 2.27.0 can't handle a 'UL' suffix on constants, so for the assembly
 * macros below we must use we must use `(1 << ARM64_CB_SHIFT)`.
 */
#define ARM64_CB_SHIFT	15
#define ARM64_CB_BIT	BIT(ARM64_CB_SHIFT)

#if ARM64_NCAPS >= ARM64_CB_BIT
#error "cpucaps have overflown ARM64_CB_BIT"
#endif

#ifndef __ASSEMBLY__

#include <linux/stringify.h>

#define ALTINSTR_ENTRY(cpucap)					              \
	" .word 661b - .\n"				/* label           */ \
	" .word 663f - .\n"				/* new instruction */ \
	" .hword " __stringify(cpucap) "\n"		/* cpucap          */ \
	" .byte 662b-661b\n"				/* source len      */ \
	" .byte 664f-663f\n"				/* replacement len */

#define ALTINSTR_ENTRY_CB(cpucap, cb)					      \
	" .word 661b - .\n"				/* label           */ \
	" .word " __stringify(cb) "- .\n"		/* callback        */ \
	" .hword " __stringify(cpucap) "\n"		/* cpucap          */ \
	" .byte 662b-661b\n"				/* source len      */ \
	" .byte 664f-663f\n"				/* replacement len */

/*
 * alternative assembly primitive:
 *
 * If any of these .org directive fail, it means that insn1 and insn2
 * don't have the same length. This used to be written as
 *
 * .if ((664b-663b) != (662b-661b))
 * 	.error "Alternatives instruction length mismatch"
 * .endif
 *
 * but most assemblers die if insn1 or insn2 have a .inst. This should
 * be fixed in a binutils release posterior to 2.25.51.0.2 (anything
 * containing commit 4e4d08cf7399b606 or c1baaddf8861).
 *
 * Alternatives with callbacks do not generate replacement instructions.
 */
#define __ALTERNATIVE_CFG(oldinstr, newinstr, cpucap, cfg_enabled)	\
	".if "__stringify(cfg_enabled)" == 1\n"				\
	"661:\n\t"							\
	oldinstr "\n"							\
	"662:\n"							\
	".pushsection .altinstructions,\"a\"\n"				\
	ALTINSTR_ENTRY(cpucap)						\
	".popsection\n"							\
	".subsection 1\n"						\
	"663:\n\t"							\
	newinstr "\n"							\
	"664:\n\t"							\
	".org	. - (664b-663b) + (662b-661b)\n\t"			\
	".org	. - (662b-661b) + (664b-663b)\n\t"			\
	".previous\n"							\
	".endif\n"

#define __ALTERNATIVE_CFG_CB(oldinstr, cpucap, cfg_enabled, cb)	\
	".if "__stringify(cfg_enabled)" == 1\n"				\
	"661:\n\t"							\
	oldinstr "\n"							\
	"662:\n"							\
	".pushsection .altinstructions,\"a\"\n"				\
	ALTINSTR_ENTRY_CB(cpucap, cb)					\
	".popsection\n"							\
	"663:\n\t"							\
	"664:\n\t"							\
	".endif\n"

#define _ALTERNATIVE_CFG(oldinstr, newinstr, cpucap, cfg, ...)	\
	__ALTERNATIVE_CFG(oldinstr, newinstr, cpucap, IS_ENABLED(cfg))

#define ALTERNATIVE_CB(oldinstr, cpucap, cb) \
	__ALTERNATIVE_CFG_CB(oldinstr, (1 << ARM64_CB_SHIFT) | (cpucap), 1, cb)
#else

#include <asm/assembler.h>

.macro altinstruction_entry orig_offset alt_offset cpucap orig_len alt_len
	.word \orig_offset - .
	.word \alt_offset - .
	.hword (\cpucap)
	.byte \orig_len
	.byte \alt_len
.endm

.macro alternative_insn insn1, insn2, cap, enable = 1
	.if \enable
661:	\insn1
662:	.pushsection .altinstructions, "a"
	altinstruction_entry 661b, 663f, \cap, 662b-661b, 664f-663f
	.popsection
	.subsection 1
663:	\insn2
664:	.org	. - (664b-663b) + (662b-661b)
	.org	. - (662b-661b) + (664b-663b)
	.previous
	.endif
.endm

/*
 * Alternative sequences
 *
 * The code for the case where the capability is not present will be
 * assembled and linked as normal. There are no restrictions on this
 * code.
 *
 * The code for the case where the capability is present will be
 * assembled into a special section to be used for dynamic patching.
 * Code for that case must:
 *
 * 1. Be exactly the same length (in bytes) as the default code
 *    sequence.
 *
 * 2. Not contain a branch target that is used outside of the
 *    alternative sequence it is defined in (branches into an
 *    alternative sequence are not fixed up).
 */

/*
 * Begin an alternative code sequence.
 */
.macro alternative_if_not cap
	.set .Lasm_alt_mode, 0
	.pushsection .altinstructions, "a"
	altinstruction_entry 661f, 663f, \cap, 662f-661f, 664f-663f
	.popsection
661:
.endm

.macro alternative_if cap
	.set .Lasm_alt_mode, 1
	.pushsection .altinstructions, "a"
	altinstruction_entry 663f, 661f, \cap, 664f-663f, 662f-661f
	.popsection
	.subsection 1
	.align 2	/* So GAS knows label 661 is suitably aligned */
661:
.endm

.macro alternative_cb cap, cb
	.set .Lasm_alt_mode, 0
	.pushsection .altinstructions, "a"
	altinstruction_entry 661f, \cb, (1 << ARM64_CB_SHIFT) | \cap, 662f-661f, 0
	.popsection
661:
.endm

/*
 * Provide the other half of the alternative code sequence.
 */
.macro alternative_else
662:
	.if .Lasm_alt_mode==0
	.subsection 1
	.else
	.previous
	.endif
663:
.endm

/*
 * Complete an alternative code sequence.
 */
.macro alternative_endif
664:
	.org	. - (664b-663b) + (662b-661b)
	.org	. - (662b-661b) + (664b-663b)
	.if .Lasm_alt_mode==0
	.previous
	.endif
.endm

/*
 * Callback-based alternative epilogue
 */
.macro alternative_cb_end
662:
.endm

/*
 * Provides a trivial alternative or default sequence consisting solely
 * of NOPs. The number of NOPs is chosen automatically to match the
 * previous case.
 */
.macro alternative_else_nop_endif
alternative_else
	nops	(662b-661b) / AARCH64_INSN_SIZE
alternative_endif
.endm

#define _ALTERNATIVE_CFG(insn1, insn2, cap, cfg, ...)	\
	alternative_insn insn1, insn2, cap, IS_ENABLED(cfg)

#endif  /*  __ASSEMBLY__  */

/*
 * Usage: asm(ALTERNATIVE(oldinstr, newinstr, cpucap));
 *
 * Usage: asm(ALTERNATIVE(oldinstr, newinstr, cpucap, CONFIG_FOO));
 * N.B. If CONFIG_FOO is specified, but not selected, the whole block
 *      will be omitted, including oldinstr.
 */
#define ALTERNATIVE(oldinstr, newinstr, ...)   \
	_ALTERNATIVE_CFG(oldinstr, newinstr, __VA_ARGS__, 1)

#ifndef __ASSEMBLY__

#include <linux/types.h>

static __always_inline bool
alternative_has_cap_likely(const unsigned long cpucap)
{
	if (!cpucap_is_possible(cpucap))
		return false;

	asm goto(
#ifdef BUILD_VDSO
	ALTERNATIVE("b	%l[l_no]", "nop", %[cpucap])
#else
	ALTERNATIVE_CB("b	%l[l_no]", %[cpucap], alt_cb_patch_nops)
#endif
	:
	: [cpucap] "i" (cpucap)
	:
	: l_no);

	return true;
l_no:
	return false;
}

static __always_inline bool
alternative_has_cap_unlikely(const unsigned long cpucap)
{
	if (!cpucap_is_possible(cpucap))
		return false;

	asm goto(
	ALTERNATIVE("nop", "b	%l[l_yes]", %[cpucap])
	:
	: [cpucap] "i" (cpucap)
	:
	: l_yes);

	return false;
l_yes:
	return true;
}

#endif /* __ASSEMBLY__ */

#endif /* __ASM_ALTERNATIVE_MACROS_H */

Filemanager

Name Type Size Permission Actions
stacktrace Folder 0755
vdso Folder 0755
xen Folder 0755
Kbuild File 528 B 0644
acenv.h File 395 B 0644
acpi.h File 5.48 KB 0644
alternative-macros.h File 6.45 KB 0644
alternative.h File 1.08 KB 0644
apple_m1_pmu.h File 2.23 KB 0644
arch_gicv3.h File 4.44 KB 0644
arch_timer.h File 4.84 KB 0644
archrandom.h File 2.99 KB 0644
arm-cci.h File 254 B 0644
arm_dsu_pmu.h File 2.94 KB 0644
arm_pmuv3.h File 3.4 KB 0644
asm-bug.h File 952 B 0644
asm-extable.h File 3.59 KB 0644
asm-offsets.h File 35 B 0644
asm-prototypes.h File 958 B 0644
asm-uaccess.h File 2.38 KB 0644
asm_pointer_auth.h File 2.49 KB 0644
assembler.h File 21.19 KB 0644
atomic.h File 7.23 KB 0644
atomic_ll_sc.h File 10.75 KB 0644
atomic_lse.h File 8.2 KB 0644
barrier.h File 5.85 KB 0644
bitops.h File 813 B 0644
bitrev.h File 452 B 0644
boot.h File 369 B 0644
brk-imm.h File 1.27 KB 0644
bug.h File 572 B 0644
cache.h File 3.28 KB 0644
cacheflush.h File 4.61 KB 0644
checksum.h File 1.06 KB 0644
clocksource.h File 136 B 0644
cmpxchg.h File 7.15 KB 0644
compat.h File 2.13 KB 0644
compiler.h File 979 B 0644
cpu.h File 1.57 KB 0644
cpu_ops.h File 1.92 KB 0644
cpucaps.h File 2.28 KB 0644
cpufeature.h File 32.74 KB 0644
cpuidle.h File 1.03 KB 0644
cputype.h File 13.99 KB 0644
crash_reserve.h File 335 B 0644
current.h File 517 B 0644
daifflags.h File 3.45 KB 0644
dcc.h File 981 B 0644
debug-monitors.h File 3.26 KB 0644
device.h File 189 B 0644
dmi.h File 850 B 0644
efi.h File 5.05 KB 0644
el2_setup.h File 11.6 KB 0644
elf.h File 8 KB 0644
esr.h File 17.16 KB 0644
exception.h File 3.29 KB 0644
exec.h File 278 B 0644
extable.h File 1.36 KB 0644
fixmap.h File 3.11 KB 0644
fpsimd.h File 11.63 KB 0644
fpsimdmacros.h File 7.7 KB 0644
fpu.h File 309 B 0644
ftrace.h File 5.93 KB 0644
futex.h File 2.71 KB 0644
gcs.h File 2.1 KB 0644
gpr-num.h File 708 B 0644
hardirq.h File 2.28 KB 0644
hugetlb.h File 3.07 KB 0644
hw_breakpoint.h File 4.16 KB 0644
hwcap.h File 8.77 KB 0644
hyp_image.h File 1.87 KB 0644
hypervisor.h File 444 B 0644
image.h File 1.48 KB 0644
insn-def.h File 571 B 0644
insn.h File 23.8 KB 0644
io.h File 8.9 KB 0644
irq.h File 571 B 0644
irq_work.h File 192 B 0644
irqflags.h File 4.31 KB 0644
jump_label.h File 1.32 KB 0644
kasan.h File 578 B 0644
kernel-pgtable.h File 3.3 KB 0644
kexec.h File 3.37 KB 0644
kfence.h File 680 B 0644
kgdb.h File 3.27 KB 0644
kprobes.h File 965 B 0644
kvm_arm.h File 14.34 KB 0644
kvm_asm.h File 12.18 KB 0644
kvm_emulate.h File 16.59 KB 0644
kvm_host.h File 47.41 KB 0644
kvm_hyp.h File 5.14 KB 0644
kvm_mmu.h File 11.14 KB 0644
kvm_mte.h File 1.35 KB 0644
kvm_nested.h File 6.23 KB 0644
kvm_pgtable.h File 28.64 KB 0644
kvm_pkvm.h File 5.35 KB 0644
kvm_ptrauth.h File 4.04 KB 0644
kvm_ras.h File 594 B 0644
kvm_types.h File 185 B 0644
linkage.h File 1.19 KB 0644
lse.h File 933 B 0644
mem_encrypt.h File 999 B 0644
memory.h File 14.24 KB 0644
mman.h File 2.36 KB 0644
mmu.h File 3.47 KB 0644
mmu_context.h File 8.5 KB 0644
module.h File 1.73 KB 0644
module.lds.h File 795 B 0644
mshyperv.h File 1.34 KB 0644
mte-def.h File 577 B 0644
mte-kasan.h File 5.58 KB 0644
mte.h File 6.99 KB 0644
neon-intrinsics.h File 959 B 0644
neon.h File 385 B 0644
numa.h File 165 B 0644
page-def.h File 296 B 0644
page.h File 1.34 KB 0644
paravirt.h File 580 B 0644
paravirt_api_clock.h File 26 B 0644
pci.h File 469 B 0644
percpu.h File 8.31 KB 0644
perf_event.h File 515 B 0644
pgalloc.h File 3.04 KB 0644
pgtable-hwdef.h File 11.47 KB 0644
pgtable-prot.h File 8.19 KB 0644
pgtable-types.h File 1.41 KB 0644
pgtable.h File 52.72 KB 0644
pkeys.h File 2.36 KB 0644
pointer_auth.h File 4.68 KB 0644
por.h File 635 B 0644
preempt.h File 2.71 KB 0644
probes.h File 549 B 0644
proc-fns.h File 562 B 0644
processor.h File 12.19 KB 0644
ptdump.h File 1.78 KB 0644
ptrace.h File 9.35 KB 0644
pvclock-abi.h File 374 B 0644
rsi.h File 1.64 KB 0644
rsi_cmds.h File 3.85 KB 0644
rsi_smc.h File 5.23 KB 0644
runtime-const.h File 2.3 KB 0644
rwonce.h File 1.96 KB 0644
scs.h File 1.09 KB 0644
sdei.h File 1.53 KB 0644
seccomp.h File 891 B 0644
sections.h File 1.14 KB 0644
semihost.h File 537 B 0644
set_memory.h File 715 B 0644
setup.h File 789 B 0644
shmparam.h File 425 B 0644
signal.h File 650 B 0644
signal32.h File 1.93 KB 0644
simd.h File 1.04 KB 0644
smp.h File 3.44 KB 0644
smp_plat.h File 824 B 0644
sparsemem.h File 747 B 0644
spectre.h File 3.75 KB 0644
spinlock.h File 601 B 0644
spinlock_types.h File 366 B 0644
stack_pointer.h File 247 B 0644
stackprotector.h File 1.15 KB 0644
stacktrace.h File 2.96 KB 0644
stage2_pgtable.h File 1.03 KB 0644
stat.h File 947 B 0644
string.h File 1.89 KB 0644
suspend.h File 1.65 KB 0644
sync_bitops.h File 1.06 KB 0644
syscall.h File 1.97 KB 0644
syscall_wrapper.h File 3.09 KB 0644
sysreg.h File 46.33 KB 0644
system_misc.h File 880 B 0644
text-patching.h File 544 B 0644
thread_info.h File 3.96 KB 0644
timex.h File 343 B 0644
tlb.h File 2.65 KB 0644
tlbbatch.h File 281 B 0644
tlbflush.h File 17.05 KB 0644
topology.h File 1.22 KB 0644
trans_pgd.h File 1.02 KB 0644
traps.h File 4.37 KB 0644
uaccess.h File 14.43 KB 0644
unistd.h File 898 B 0644
unistd32.h File 240 B 0644
uprobes.h File 579 B 0644
vdso.h File 468 B 0644
vectors.h File 1.74 KB 0644
vermagic.h File 200 B 0644
virt.h File 4.26 KB 0644
vmalloc.h File 805 B 0644
vmap_stack.h File 739 B 0644
vncr_mapping.h File 3.56 KB 0644
word-at-a-time.h File 1.5 KB 0644
xor.h File 1.88 KB 0644
Filemanager