55 #ifdef CONFIG_X86_ALIGNMENT_16 |
55 #ifdef CONFIG_X86_ALIGNMENT_16 |
56 #define __ALIGN .align 16,0x90 |
56 #define __ALIGN .align 16,0x90 |
57 #define __ALIGN_STR ".align 16,0x90" |
57 #define __ALIGN_STR ".align 16,0x90" |
58 #endif |
58 #endif |
59 |
59 |
|
60 /* |
|
61 * to check ENTRY_X86/END_X86 and |
|
62 * KPROBE_ENTRY_X86/KPROBE_END_X86 |
|
63 * unbalanced-missed-mixed appearance |
|
64 */ |
|
65 #define __set_entry_x86 .set ENTRY_X86_IN, 0 |
|
66 #define __unset_entry_x86 .set ENTRY_X86_IN, 1 |
|
67 #define __set_kprobe_x86 .set KPROBE_X86_IN, 0 |
|
68 #define __unset_kprobe_x86 .set KPROBE_X86_IN, 1 |
|
69 |
|
70 #define __macro_err_x86 .error "ENTRY_X86/KPROBE_X86 unbalanced,missed,mixed" |
|
71 |
|
72 #define __check_entry_x86 \ |
|
73 .ifdef ENTRY_X86_IN; \ |
|
74 .ifeq ENTRY_X86_IN; \ |
|
75 __macro_err_x86; \ |
|
76 .abort; \ |
|
77 .endif; \ |
|
78 .endif |
|
79 |
|
80 #define __check_kprobe_x86 \ |
|
81 .ifdef KPROBE_X86_IN; \ |
|
82 .ifeq KPROBE_X86_IN; \ |
|
83 __macro_err_x86; \ |
|
84 .abort; \ |
|
85 .endif; \ |
|
86 .endif |
|
87 |
|
88 #define __check_entry_kprobe_x86 \ |
|
89 __check_entry_x86; \ |
|
90 __check_kprobe_x86 |
|
91 |
|
92 #define ENTRY_KPROBE_FINAL_X86 __check_entry_kprobe_x86 |
|
93 |
|
94 #define ENTRY_X86(name) \ |
|
95 __check_entry_kprobe_x86; \ |
|
96 __set_entry_x86; \ |
|
97 .globl name; \ |
|
98 __ALIGN; \ |
|
99 name: |
|
100 |
|
101 #define END_X86(name) \ |
|
102 __unset_entry_x86; \ |
|
103 __check_entry_kprobe_x86; \ |
|
104 .size name, .-name |
|
105 |
|
106 #define KPROBE_ENTRY_X86(name) \ |
|
107 __check_entry_kprobe_x86; \ |
|
108 __set_kprobe_x86; \ |
|
109 .pushsection .kprobes.text, "ax"; \ |
|
110 .globl name; \ |
|
111 __ALIGN; \ |
|
112 name: |
|
113 |
|
114 #define KPROBE_END_X86(name) \ |
|
115 __unset_kprobe_x86; \ |
|
116 __check_entry_kprobe_x86; \ |
|
117 .size name, .-name; \ |
|
118 .popsection |
|
119 |
60 #endif /* _ASM_X86_LINKAGE_H */ |
120 #endif /* _ASM_X86_LINKAGE_H */ |
61 |
121 |