atomic_t: unify all arch definitions
[pandora-kernel.git] / arch / x86 / include / asm / linkage.h
index f61ee8f..5d98d0b 100644 (file)
 #define __ALIGN_STR ".align 16,0x90"
 #endif
 
+/*
+ * to check ENTRY_X86/END_X86 and
+ * KPROBE_ENTRY_X86/KPROBE_END_X86
+ * unbalanced-missed-mixed appearance
+ */
+#define __set_entry_x86                .set ENTRY_X86_IN, 0
+#define __unset_entry_x86      .set ENTRY_X86_IN, 1
+#define __set_kprobe_x86       .set KPROBE_X86_IN, 0
+#define __unset_kprobe_x86     .set KPROBE_X86_IN, 1
+
+#define __macro_err_x86 .error "ENTRY_X86/KPROBE_X86 unbalanced,missed,mixed"
+
+#define __check_entry_x86      \
+       .ifdef ENTRY_X86_IN;    \
+       .ifeq ENTRY_X86_IN;     \
+       __macro_err_x86;        \
+       .abort;                 \
+       .endif;                 \
+       .endif
+
+#define __check_kprobe_x86     \
+       .ifdef KPROBE_X86_IN;   \
+       .ifeq KPROBE_X86_IN;    \
+       __macro_err_x86;        \
+       .abort;                 \
+       .endif;                 \
+       .endif
+
+#define __check_entry_kprobe_x86       \
+       __check_entry_x86;              \
+       __check_kprobe_x86
+
+#define ENTRY_KPROBE_FINAL_X86 __check_entry_kprobe_x86
+
+#define ENTRY_X86(name)                        \
+       __check_entry_kprobe_x86;       \
+       __set_entry_x86;                \
+       .globl name;                    \
+       __ALIGN;                        \
+       name:
+
+#define END_X86(name)                  \
+       __unset_entry_x86;              \
+       __check_entry_kprobe_x86;       \
+       .size name, .-name
+
+#define KPROBE_ENTRY_X86(name)         \
+       __check_entry_kprobe_x86;       \
+       __set_kprobe_x86;               \
+       .pushsection .kprobes.text, "ax"; \
+       .globl name;                    \
+       __ALIGN;                        \
+       name:
+
+#define KPROBE_END_X86(name)           \
+       __unset_kprobe_x86;             \
+       __check_entry_kprobe_x86;       \
+       .size name, .-name;             \
+       .popsection
+
 #endif /* _ASM_X86_LINKAGE_H */