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

linkage.h (2976B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2
      3#ifndef PERF_LINUX_LINKAGE_H_
      4#define PERF_LINUX_LINKAGE_H_
      5
      6/* linkage.h ... for including arch/x86/lib/memcpy_64.S */
      7
      8/* Some toolchains use other characters (e.g. '`') to mark new line in macro */
      9#ifndef ASM_NL
     10#define ASM_NL		 ;
     11#endif
     12
     13#ifndef __ALIGN
     14#define __ALIGN		.align 4,0x90
     15#define __ALIGN_STR	".align 4,0x90"
     16#endif
     17
     18/* SYM_T_FUNC -- type used by assembler to mark functions */
     19#ifndef SYM_T_FUNC
     20#define SYM_T_FUNC				STT_FUNC
     21#endif
     22
     23/* SYM_A_* -- align the symbol? */
     24#define SYM_A_ALIGN				ALIGN
     25
     26/* SYM_L_* -- linkage of symbols */
     27#define SYM_L_GLOBAL(name)			.globl name
     28#define SYM_L_WEAK(name)			.weak name
     29#define SYM_L_LOCAL(name)			/* nothing */
     30
     31#define ALIGN __ALIGN
     32
     33/* === generic annotations === */
     34
     35/* SYM_ENTRY -- use only if you have to for non-paired symbols */
     36#ifndef SYM_ENTRY
     37#define SYM_ENTRY(name, linkage, align...)		\
     38	linkage(name) ASM_NL				\
     39	align ASM_NL					\
     40	name:
     41#endif
     42
     43/* SYM_START -- use only if you have to */
     44#ifndef SYM_START
     45#define SYM_START(name, linkage, align...)		\
     46	SYM_ENTRY(name, linkage, align)
     47#endif
     48
     49/* SYM_END -- use only if you have to */
     50#ifndef SYM_END
     51#define SYM_END(name, sym_type)				\
     52	.type name sym_type ASM_NL			\
     53	.set .L__sym_size_##name, .-name ASM_NL		\
     54	.size name, .-name
     55#endif
     56
     57/* SYM_ALIAS -- use only if you have to */
     58#ifndef SYM_ALIAS
     59#define SYM_ALIAS(alias, name, sym_type, linkage)			\
     60	linkage(alias) ASM_NL						\
     61	.set alias, name ASM_NL						\
     62	.type alias sym_type ASM_NL					\
     63	.set .L__sym_size_##alias, .L__sym_size_##name ASM_NL		\
     64	.size alias, .L__sym_size_##alias
     65#endif
     66
     67/* SYM_FUNC_START -- use for global functions */
     68#ifndef SYM_FUNC_START
     69#define SYM_FUNC_START(name)				\
     70	SYM_START(name, SYM_L_GLOBAL, SYM_A_ALIGN)
     71#endif
     72
     73/* SYM_FUNC_START_LOCAL -- use for local functions */
     74#ifndef SYM_FUNC_START_LOCAL
     75#define SYM_FUNC_START_LOCAL(name)			\
     76	SYM_START(name, SYM_L_LOCAL, SYM_A_ALIGN)
     77#endif
     78
     79/* SYM_FUNC_START_WEAK -- use for weak functions */
     80#ifndef SYM_FUNC_START_WEAK
     81#define SYM_FUNC_START_WEAK(name)			\
     82	SYM_START(name, SYM_L_WEAK, SYM_A_ALIGN)
     83#endif
     84
     85/*
     86 * SYM_FUNC_END -- the end of SYM_FUNC_START_LOCAL, SYM_FUNC_START,
     87 * SYM_FUNC_START_WEAK, ...
     88 */
     89#ifndef SYM_FUNC_END
     90#define SYM_FUNC_END(name)				\
     91	SYM_END(name, SYM_T_FUNC)
     92#endif
     93
     94/*
     95 * SYM_FUNC_ALIAS -- define a global alias for an existing function
     96 */
     97#ifndef SYM_FUNC_ALIAS
     98#define SYM_FUNC_ALIAS(alias, name)					\
     99	SYM_ALIAS(alias, name, SYM_T_FUNC, SYM_L_GLOBAL)
    100#endif
    101
    102/*
    103 * SYM_FUNC_ALIAS_LOCAL -- define a local alias for an existing function
    104 */
    105#ifndef SYM_FUNC_ALIAS_LOCAL
    106#define SYM_FUNC_ALIAS_LOCAL(alias, name)				\
    107	SYM_ALIAS(alias, name, SYM_T_FUNC, SYM_L_LOCAL)
    108#endif
    109
    110/*
    111 * SYM_FUNC_ALIAS_WEAK -- define a weak global alias for an existing function
    112 */
    113#ifndef SYM_FUNC_ALIAS_WEAK
    114#define SYM_FUNC_ALIAS_WEAK(alias, name)				\
    115	SYM_ALIAS(alias, name, SYM_T_FUNC, SYM_L_WEAK)
    116#endif
    117
    118#endif	/* PERF_LINUX_LINKAGE_H_ */