cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

alternative-asm.h (1630B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#ifndef _ASM_S390_ALTERNATIVE_ASM_H
      3#define _ASM_S390_ALTERNATIVE_ASM_H
      4
      5#ifdef __ASSEMBLY__
      6
      7/*
      8 * Issue one struct alt_instr descriptor entry (need to put it into
      9 * the section .altinstructions, see below). This entry contains
     10 * enough information for the alternatives patching code to patch an
     11 * instruction. See apply_alternatives().
     12 */
     13.macro alt_entry orig_start, orig_end, alt_start, alt_end, feature
     14	.long	\orig_start - .
     15	.long	\alt_start - .
     16	.word	\feature
     17	.byte	\orig_end - \orig_start
     18	.org	. - ( \orig_end - \orig_start ) + ( \alt_end - \alt_start )
     19	.org	. - ( \alt_end - \alt_start ) + ( \orig_end - \orig_start )
     20.endm
     21
     22/*
     23 * Define an alternative between two instructions. If @feature is
     24 * present, early code in apply_alternatives() replaces @oldinstr with
     25 * @newinstr.
     26 */
     27.macro ALTERNATIVE oldinstr, newinstr, feature
     28	.pushsection .altinstr_replacement,"ax"
     29770:	\newinstr
     30771:	.popsection
     31772:	\oldinstr
     32773:	.pushsection .altinstructions,"a"
     33	alt_entry 772b, 773b, 770b, 771b, \feature
     34	.popsection
     35.endm
     36
     37/*
     38 * Define an alternative between two instructions. If @feature is
     39 * present, early code in apply_alternatives() replaces @oldinstr with
     40 * @newinstr.
     41 */
     42.macro ALTERNATIVE_2 oldinstr, newinstr1, feature1, newinstr2, feature2
     43	.pushsection .altinstr_replacement,"ax"
     44770:	\newinstr1
     45771:	\newinstr2
     46772:	.popsection
     47773:	\oldinstr
     48774:	.pushsection .altinstructions,"a"
     49	alt_entry 773b, 774b, 770b, 771b,\feature1
     50	alt_entry 773b, 774b, 771b, 772b,\feature2
     51	.popsection
     52.endm
     53
     54#endif	/*  __ASSEMBLY__  */
     55
     56#endif /* _ASM_S390_ALTERNATIVE_ASM_H */