0001
0002
0003 #ifndef PERF_LINUX_LINKAGE_H_
0004 #define PERF_LINUX_LINKAGE_H_
0005
0006
0007
0008
0009 #ifndef ASM_NL
0010 #define ASM_NL ;
0011 #endif
0012
0013 #ifndef __ALIGN
0014 #define __ALIGN .align 4,0x90
0015 #define __ALIGN_STR ".align 4,0x90"
0016 #endif
0017
0018
0019 #ifndef SYM_T_FUNC
0020 #define SYM_T_FUNC STT_FUNC
0021 #endif
0022
0023
0024 #define SYM_A_ALIGN ALIGN
0025
0026
0027 #define SYM_L_GLOBAL(name) .globl name
0028 #define SYM_L_WEAK(name) .weak name
0029 #define SYM_L_LOCAL(name)
0030
0031 #define ALIGN __ALIGN
0032
0033
0034
0035
0036 #ifndef SYM_ENTRY
0037 #define SYM_ENTRY(name, linkage, align...) \
0038 linkage(name) ASM_NL \
0039 align ASM_NL \
0040 name:
0041 #endif
0042
0043
0044 #ifndef SYM_START
0045 #define SYM_START(name, linkage, align...) \
0046 SYM_ENTRY(name, linkage, align)
0047 #endif
0048
0049
0050 #ifndef SYM_END
0051 #define SYM_END(name, sym_type) \
0052 .type name sym_type ASM_NL \
0053 .set .L__sym_size_##name, .-name ASM_NL \
0054 .size name, .-name
0055 #endif
0056
0057
0058 #ifndef SYM_ALIAS
0059 #define SYM_ALIAS(alias, name, sym_type, linkage) \
0060 linkage(alias) ASM_NL \
0061 .set alias, name ASM_NL \
0062 .type alias sym_type ASM_NL \
0063 .set .L__sym_size_##alias, .L__sym_size_##name ASM_NL \
0064 .size alias, .L__sym_size_##alias
0065 #endif
0066
0067
0068 #ifndef SYM_FUNC_START
0069 #define SYM_FUNC_START(name) \
0070 SYM_START(name, SYM_L_GLOBAL, SYM_A_ALIGN)
0071 #endif
0072
0073
0074 #ifndef SYM_FUNC_START_LOCAL
0075 #define SYM_FUNC_START_LOCAL(name) \
0076 SYM_START(name, SYM_L_LOCAL, SYM_A_ALIGN)
0077 #endif
0078
0079
0080 #ifndef SYM_FUNC_START_WEAK
0081 #define SYM_FUNC_START_WEAK(name) \
0082 SYM_START(name, SYM_L_WEAK, SYM_A_ALIGN)
0083 #endif
0084
0085
0086
0087
0088
0089 #ifndef SYM_FUNC_END
0090 #define SYM_FUNC_END(name) \
0091 SYM_END(name, SYM_T_FUNC)
0092 #endif
0093
0094
0095
0096
0097 #ifndef SYM_FUNC_ALIAS
0098 #define SYM_FUNC_ALIAS(alias, name) \
0099 SYM_ALIAS(alias, name, SYM_T_FUNC, SYM_L_GLOBAL)
0100 #endif
0101
0102
0103
0104
0105 #ifndef SYM_FUNC_ALIAS_LOCAL
0106 #define SYM_FUNC_ALIAS_LOCAL(alias, name) \
0107 SYM_ALIAS(alias, name, SYM_T_FUNC, SYM_L_LOCAL)
0108 #endif
0109
0110
0111
0112
0113 #ifndef SYM_FUNC_ALIAS_WEAK
0114 #define SYM_FUNC_ALIAS_WEAK(alias, name) \
0115 SYM_ALIAS(alias, name, SYM_T_FUNC, SYM_L_WEAK)
0116 #endif
0117
0118 #endif