__  __    __   __  _____      _            _          _____ _          _ _ 
 |  \/  |   \ \ / / |  __ \    (_)          | |        / ____| |        | | |
 | \  / |_ __\ 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_S390_ALTERNATIVE_H
#define _ASM_S390_ALTERNATIVE_H

/*
 * Each alternative comes with a 32 bit feature field:
 *	union {
 *		u32 feature;
 *		struct {
 *			u32 ctx	 : 4;
 *			u32 type : 8;
 *			u32 data : 20;
 *		};
 *	}
 *
 * @ctx is a bitfield, where only one bit must be set. Each bit defines
 * in which context an alternative is supposed to be applied to the
 * kernel image:
 *
 * - from the decompressor before the kernel itself is executed
 * - from early kernel code from within the kernel
 *
 * @type is a number which defines the type and with that the type
 * specific alternative patching.
 *
 * @data is additional type specific information which defines if an
 * alternative should be applied.
 */

#define ALT_CTX_EARLY		1
#define ALT_CTX_LATE		2
#define ALT_CTX_ALL		(ALT_CTX_EARLY | ALT_CTX_LATE)

#define ALT_TYPE_FACILITY	0
#define ALT_TYPE_SPEC		1
#define ALT_TYPE_LOWCORE	2

#define ALT_DATA_SHIFT		0
#define ALT_TYPE_SHIFT		20
#define ALT_CTX_SHIFT		28

#define ALT_FACILITY(facility)		(ALT_CTX_EARLY << ALT_CTX_SHIFT		| \
					 ALT_TYPE_FACILITY << ALT_TYPE_SHIFT	| \
					 (facility) << ALT_DATA_SHIFT)

#define ALT_SPEC(facility)		(ALT_CTX_LATE << ALT_CTX_SHIFT		| \
					 ALT_TYPE_SPEC << ALT_TYPE_SHIFT	| \
					 (facility) << ALT_DATA_SHIFT)

#define ALT_LOWCORE			(ALT_CTX_EARLY << ALT_CTX_SHIFT		| \
					 ALT_TYPE_LOWCORE << ALT_TYPE_SHIFT)

#ifndef __ASSEMBLY__

#include <linux/types.h>
#include <linux/stddef.h>
#include <linux/stringify.h>

struct alt_instr {
	s32 instr_offset;	/* original instruction */
	s32 repl_offset;	/* offset to replacement instruction */
	union {
		u32 feature;	/* feature required for replacement */
		struct {
			u32 ctx	 : 4;  /* context */
			u32 type : 8;  /* type of alternative */
			u32 data : 20; /* patching information */
		};
	};
	u8  instrlen;		/* length of original instruction */
} __packed;

extern struct alt_instr __alt_instructions[], __alt_instructions_end[];

void __apply_alternatives(struct alt_instr *start, struct alt_instr *end, unsigned int ctx);

static inline void apply_alternative_instructions(void)
{
	__apply_alternatives(__alt_instructions, __alt_instructions_end, ALT_CTX_LATE);
}

static inline void apply_alternatives(struct alt_instr *start, struct alt_instr *end)
{
	__apply_alternatives(start, end, ALT_CTX_ALL);
}

/*
 * +---------------------------------+
 * |661:			     |662:
 * | oldinstr			     |
 * +---------------------------------+
 *
 * .altinstr_replacement section
 * +---------------------------------+
 * |6641:			     |6651:
 * | alternative instr 1	     |
 * +---------------------------------+
 * |6642:			     |6652:
 * | alternative instr 2	     |
 * +---------------------------------+
 *
 * .altinstructions section
 * +---------------------------------+
 * | alt_instr entries for each      |
 * | alternative instr		     |
 * +---------------------------------+
 */

#define b_altinstr(num)		"664"#num
#define e_altinstr(num)		"665"#num
#define oldinstr_len		"662b-661b"
#define altinstr_len(num)	e_altinstr(num)"b-"b_altinstr(num)"b"

#define OLDINSTR(oldinstr) \
	"661:\n\t" oldinstr "\n662:\n"

#define ALTINSTR_ENTRY(feature, num)					\
	"\t.long 661b - .\n"			/* old instruction */	\
	"\t.long " b_altinstr(num)"b - .\n"	/* alt instruction */	\
	"\t.long " __stringify(feature) "\n"	/* feature	   */	\
	"\t.byte " oldinstr_len "\n"		/* instruction len */	\
	"\t.org . - (" oldinstr_len ") & 1\n"				\
	"\t.org . - (" oldinstr_len ") + (" altinstr_len(num) ")\n"	\
	"\t.org . - (" altinstr_len(num) ") + (" oldinstr_len ")\n"

#define ALTINSTR_REPLACEMENT(altinstr, num)	/* replacement */	\
	b_altinstr(num)":\n\t" altinstr "\n" e_altinstr(num) ":\n"

/* alternative assembly primitive: */
#define ALTERNATIVE(oldinstr, altinstr, feature) \
	".pushsection .altinstr_replacement, \"ax\"\n"			\
	ALTINSTR_REPLACEMENT(altinstr, 1)				\
	".popsection\n"							\
	OLDINSTR(oldinstr)						\
	".pushsection .altinstructions,\"a\"\n"				\
	ALTINSTR_ENTRY(feature, 1)					\
	".popsection\n"

#define ALTERNATIVE_2(oldinstr, altinstr1, feature1, altinstr2, feature2)\
	".pushsection .altinstr_replacement, \"ax\"\n"			\
	ALTINSTR_REPLACEMENT(altinstr1, 1)				\
	ALTINSTR_REPLACEMENT(altinstr2, 2)				\
	".popsection\n"							\
	OLDINSTR(oldinstr)						\
	".pushsection .altinstructions,\"a\"\n"				\
	ALTINSTR_ENTRY(feature1, 1)					\
	ALTINSTR_ENTRY(feature2, 2)					\
	".popsection\n"

/*
 * Alternative instructions for different CPU types or capabilities.
 *
 * This allows to use optimized instructions even on generic binary
 * kernels.
 *
 * oldinstr is padded with jump and nops at compile time if altinstr is
 * longer. altinstr is padded with jump and nops at run-time during patching.
 *
 * For non barrier like inlines please define new variants
 * without volatile and memory clobber.
 */
#define alternative(oldinstr, altinstr, feature)			\
	asm_inline volatile(ALTERNATIVE(oldinstr, altinstr, feature) : : : "memory")

#define alternative_2(oldinstr, altinstr1, feature1, altinstr2, feature2) \
	asm_inline volatile(ALTERNATIVE_2(oldinstr, altinstr1, feature1,   \
				   altinstr2, feature2) ::: "memory")

/* Alternative inline assembly with input. */
#define alternative_input(oldinstr, newinstr, feature, input...)	\
	asm_inline volatile (ALTERNATIVE(oldinstr, newinstr, feature)	\
		: : input)

/* Like alternative_input, but with a single output argument */
#define alternative_io(oldinstr, altinstr, feature, output, input...)	\
	asm_inline volatile(ALTERNATIVE(oldinstr, altinstr, feature)	\
		: output : input)

/* Use this macro if more than one output parameter is needed. */
#define ASM_OUTPUT2(a...) a

/* Use this macro if clobbers are needed without inputs. */
#define ASM_NO_INPUT_CLOBBER(clobber...) : clobber

#else  /* __ASSEMBLY__ */

/*
 * Issue one struct alt_instr descriptor entry (need to put it into
 * the section .altinstructions, see below). This entry contains
 * enough information for the alternatives patching code to patch an
 * instruction. See apply_alternatives().
 */
.macro alt_entry orig_start, orig_end, alt_start, alt_end, feature
	.long	\orig_start - .
	.long	\alt_start - .
	.long	\feature
	.byte	\orig_end - \orig_start
	.org	. - ( \orig_end - \orig_start ) & 1
	.org	. - ( \orig_end - \orig_start ) + ( \alt_end - \alt_start )
	.org	. - ( \alt_end - \alt_start ) + ( \orig_end - \orig_start )
.endm

/*
 * Define an alternative between two instructions. If @feature is
 * present, early code in apply_alternatives() replaces @oldinstr with
 * @newinstr.
 */
.macro ALTERNATIVE oldinstr, newinstr, feature
	.pushsection .altinstr_replacement,"ax"
770:	\newinstr
771:	.popsection
772:	\oldinstr
773:	.pushsection .altinstructions,"a"
	alt_entry 772b, 773b, 770b, 771b, \feature
	.popsection
.endm

/*
 * Define an alternative between two instructions. If @feature is
 * present, early code in apply_alternatives() replaces @oldinstr with
 * @newinstr.
 */
.macro ALTERNATIVE_2 oldinstr, newinstr1, feature1, newinstr2, feature2
	.pushsection .altinstr_replacement,"ax"
770:	\newinstr1
771:	\newinstr2
772:	.popsection
773:	\oldinstr
774:	.pushsection .altinstructions,"a"
	alt_entry 773b, 774b, 770b, 771b,\feature1
	alt_entry 773b, 774b, 771b, 772b,\feature2
	.popsection
.endm

#endif /* __ASSEMBLY__ */

#endif /* _ASM_S390_ALTERNATIVE_H */

Filemanager

Name Type Size Permission Actions
trace Folder 0755
vdso Folder 0755
Kbuild File 253 B 0644
abs_lowcore.h File 703 B 0644
access-regs.h File 806 B 0644
airq.h File 3.29 KB 0644
alternative.h File 7.2 KB 0644
ap.h File 15.71 KB 0644
appldata.h File 1.57 KB 0644
arch_hweight.h File 1.66 KB 0644
archrandom.h File 947 B 0644
asm-const.h File 376 B 0644
asm-extable.h File 3.29 KB 0644
asm-prototypes.h File 384 B 0644
asm.h File 1.84 KB 0644
atomic.h File 6.61 KB 0644
atomic_ops.h File 7.12 KB 0644
barrier.h File 1.93 KB 0644
bitops.h File 6.69 KB 0644
boot_data.h File 1.62 KB 0644
bug.h File 1.5 KB 0644
cache.h File 389 B 0644
ccwdev.h File 8.33 KB 0644
ccwgroup.h File 2.25 KB 0644
checksum.h File 3.18 KB 0644
chpid.h File 979 B 0644
chsc.h File 1.7 KB 0644
cio.h File 9.01 KB 0644
clocksource.h File 184 B 0644
clp.h File 1.39 KB 0644
cmb.h File 425 B 0644
cmpxchg.h File 6.04 KB 0644
compat.h File 2.78 KB 0644
cpacf.h File 21.03 KB 0644
cpcmd.h File 1.11 KB 0644
cpu.h File 620 B 0644
cpu_mf-insn.h File 478 B 0644
cpu_mf.h File 8.49 KB 0644
cpufeature.h File 464 B 0644
cputime.h File 393 B 0644
crw.h File 1.81 KB 0644
css_chars.h File 904 B 0644
ctlreg.h File 7.82 KB 0644
current.h File 407 B 0644
dat-bits.h File 4.91 KB 0644
debug.h File 14.36 KB 0644
delay.h File 647 B 0644
diag.h File 7.72 KB 0644
dis.h File 636 B 0644
dma-types.h File 2.5 KB 0644
dma.h File 359 B 0644
dwarf.h File 952 B 0644
eadm.h File 2.07 KB 0644
ebcdic.h File 1.4 KB 0644
elf.h File 11.2 KB 0644
entry-common.h File 1.43 KB 0644
exec.h File 269 B 0644
extable.h File 1.88 KB 0644
extmem.h File 1.04 KB 0644
facility.h File 3.41 KB 0644
fault.h File 730 B 0644
fcx.h File 7.96 KB 0644
fprobe.h File 229 B 0644
fpu-insn-asm.h File 15.4 KB 0644
fpu-insn.h File 11.35 KB 0644
fpu-types.h File 1.06 KB 0644
fpu.h File 8.18 KB 0644
ftrace.h File 4.32 KB 0644
ftrace.lds.h File 720 B 0644
futex.h File 2.56 KB 0644
gmap.h File 6.31 KB 0644
hardirq.h File 783 B 0644
hiperdispatch.h File 295 B 0644
hugetlb.h File 2.81 KB 0644
hw_irq.h File 210 B 0644
idals.h File 6.1 KB 0644
idle.h File 614 B 0644
io.h File 2.49 KB 0644
ipl.h File 4.05 KB 0644
irq.h File 2.55 KB 0644
irq_work.h File 204 B 0644
irqflags.h File 2.07 KB 0644
isc.h File 1.01 KB 0644
itcw.h File 950 B 0644
jump_label.h File 1.32 KB 0644
kasan.h File 460 B 0644
kdebug.h File 397 B 0644
kexec.h File 3.17 KB 0644
kfence.h File 1.13 KB 0644
kmsan.h File 1.54 KB 0644
kprobes.h File 2.02 KB 0644
kvm_host.h File 27.71 KB 0644
kvm_para.h File 3.67 KB 0644
linkage.h File 223 B 0644
lowcore.h File 7.22 KB 0644
maccess.h File 564 B 0644
march.h File 722 B 0644
mem_encrypt.h File 304 B 0644
mmu.h File 1.38 KB 0644
mmu_context.h File 3.42 KB 0644
module.h File 1.54 KB 0644
msi.h File 527 B 0644
nmi.h File 3.51 KB 0644
nospec-branch.h File 1.18 KB 0644
nospec-insn.h File 2.43 KB 0644
numa.h File 386 B 0644
os_info.h File 1.67 KB 0644
page-states.h File 1.75 KB 0644
page.h File 6.76 KB 0644
pai.h File 2.03 KB 0644
pci.h File 8.64 KB 0644
pci_clp.h File 5.35 KB 0644
pci_debug.h File 722 B 0644
pci_dma.h File 2.89 KB 0644
pci_insn.h File 3.99 KB 0644
pci_io.h File 4.28 KB 0644
percpu.h File 6.33 KB 0644
perf_event.h File 1.93 KB 0644
pfault.h File 461 B 0644
pgalloc.h File 4.39 KB 0644
pgtable.h File 60.39 KB 0644
physmem_info.h File 4.92 KB 0644
pkey.h File 754 B 0644
pnet.h File 325 B 0644
preempt.h File 3.51 KB 0644
processor.h File 10.96 KB 0644
ptrace.h File 7.56 KB 0644
purgatory.h File 329 B 0644
qdio.h File 9.92 KB 0644
runtime-const.h File 1.92 KB 0644
runtime_instr.h File 634 B 0644
rwonce.h File 691 B 0644
schid.h File 525 B 0644
sclp.h File 4.97 KB 0644
scsw.h File 25.06 KB 0644
seccomp.h File 808 B 0644
sections.h File 1.03 KB 0644
set_memory.h File 2.12 KB 0644
setup.h File 4.8 KB 0644
signal.h File 644 B 0644
sigp.h File 1.87 KB 0644
smp.h File 2.06 KB 0644
softirq_stack.h File 372 B 0644
sparsemem.h File 506 B 0644
spinlock.h File 3.31 KB 0644
spinlock_types.h File 413 B 0644
stacktrace.h File 7.88 KB 0644
stp.h File 1.69 KB 0644
string.h File 5.49 KB 0644
syscall.h File 3.81 KB 0644
syscall_wrapper.h File 4.67 KB 0644
sysinfo.h File 4.33 KB 0644
text-patching.h File 301 B 0644
thread_info.h File 3.74 KB 0644
timex.h File 6.6 KB 0644
tlb.h File 4.68 KB 0644
tlbflush.h File 2.98 KB 0644
topology.h File 2.91 KB 0644
tpi.h File 736 B 0644
types.h File 318 B 0644
uaccess.h File 18.89 KB 0644
unistd.h File 1.01 KB 0644
unwind.h File 3.3 KB 0644
uprobes.h File 588 B 0644
user.h File 3.16 KB 0644
uv.h File 16.12 KB 0644
vdso-symbols.h File 499 B 0644
vdso.h File 326 B 0644
vmalloc.h File 90 B 0644
vmlinux.lds.h File 1.14 KB 0644
vtime.h File 612 B 0644
vtimer.h File 830 B 0644
word-at-a-time.h File 1.52 KB 0644
xor.h File 454 B 0644
Filemanager