hc
2023-12-11 d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d
kernel/tools/perf/util/include/linux/linkage.h
....@@ -5,10 +5,100 @@
55
66 /* linkage.h ... for including arch/x86/lib/memcpy_64.S */
77
8
-#define ENTRY(name) \
9
- .globl name; \
10
- name:
8
+/* Some toolchains use other characters (e.g. '`') to mark new line in macro */
9
+#ifndef ASM_NL
10
+#define ASM_NL ;
11
+#endif
1112
12
-#define ENDPROC(name)
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
+ .size name, .-name
54
+#endif
55
+
56
+/*
57
+ * SYM_FUNC_START_ALIAS -- use where there are two global names for one
58
+ * function
59
+ */
60
+#ifndef SYM_FUNC_START_ALIAS
61
+#define SYM_FUNC_START_ALIAS(name) \
62
+ SYM_START(name, SYM_L_GLOBAL, SYM_A_ALIGN)
63
+#endif
64
+
65
+/* SYM_FUNC_START -- use for global functions */
66
+#ifndef SYM_FUNC_START
67
+/*
68
+ * The same as SYM_FUNC_START_ALIAS, but we will need to distinguish these two
69
+ * later.
70
+ */
71
+#define SYM_FUNC_START(name) \
72
+ SYM_START(name, SYM_L_GLOBAL, SYM_A_ALIGN)
73
+#endif
74
+
75
+/* SYM_FUNC_START_LOCAL -- use for local functions */
76
+#ifndef SYM_FUNC_START_LOCAL
77
+/* the same as SYM_FUNC_START_LOCAL_ALIAS, see comment near SYM_FUNC_START */
78
+#define SYM_FUNC_START_LOCAL(name) \
79
+ SYM_START(name, SYM_L_LOCAL, SYM_A_ALIGN)
80
+#endif
81
+
82
+/* SYM_FUNC_END_ALIAS -- the end of LOCAL_ALIASed or ALIASed function */
83
+#ifndef SYM_FUNC_END_ALIAS
84
+#define SYM_FUNC_END_ALIAS(name) \
85
+ SYM_END(name, SYM_T_FUNC)
86
+#endif
87
+
88
+/* SYM_FUNC_START_WEAK -- use for weak functions */
89
+#ifndef SYM_FUNC_START_WEAK
90
+#define SYM_FUNC_START_WEAK(name) \
91
+ SYM_START(name, SYM_L_WEAK, SYM_A_ALIGN)
92
+#endif
93
+
94
+/*
95
+ * SYM_FUNC_END -- the end of SYM_FUNC_START_LOCAL, SYM_FUNC_START,
96
+ * SYM_FUNC_START_WEAK, ...
97
+ */
98
+#ifndef SYM_FUNC_END
99
+/* the same as SYM_FUNC_END_ALIAS, see comment near SYM_FUNC_START */
100
+#define SYM_FUNC_END(name) \
101
+ SYM_END(name, SYM_T_FUNC)
102
+#endif
13103
14104 #endif /* PERF_LINUX_LINKAGE_H_ */