public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [RFC -tip] x86: introduce ENTRY(KPROBE)_X86  assembly helpers to catch unbalanced declaration
@ 2008-11-23 16:57 Cyrill Gorcunov
  2008-11-23 17:00 ` Cyrill Gorcunov
  2008-11-23 17:51 ` Sam Ravnborg
  0 siblings, 2 replies; 20+ messages in thread
From: Cyrill Gorcunov @ 2008-11-23 16:57 UTC (permalink / raw)
  To: Ingo Molnar; +Cc: Alexander van Heukelum, H. Peter Anvin, Thomas Gleixner, LKML

It's usefull to catch unbalanced, missed or mixed declarations of ENTRY and
KPROBES. These macros would help a bit (at least I hope so).

For example the following code would compile without problems

        ENTRY_X86(mcount)
                retq
        END_X86(mcount)

But if you forget and mix the following form

        ENTRY_X86(mcount)
                retq
        END(mcount)

        ENTRY_X86(ftrace_caller)

The assembler will issue the following message:
Error: ENTRY_X86/KPROBE_X86 unbalanced,missed,mixed

Actually the checking is performed at every _X86 macro
so maybe it's good idea to put ENTRY_KPROBE_FINAL_X86
at the end of .S file to be sure you didn't miss anything.

Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
---
 arch/x86/include/asm/linkage.h |   60 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 60 insertions(+)

Index: linux-2.6.git/arch/x86/include/asm/linkage.h
===================================================================
--- linux-2.6.git.orig/arch/x86/include/asm/linkage.h
+++ linux-2.6.git/arch/x86/include/asm/linkage.h
@@ -57,5 +57,65 @@
 #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;	\
+	__x86_macro_err;	\
+	.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 */
 

^ permalink raw reply	[flat|nested] 20+ messages in thread

end of thread, other threads:[~2008-11-24 18:05 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-11-23 16:57 [RFC -tip] x86: introduce ENTRY(KPROBE)_X86 assembly helpers to catch unbalanced declaration Cyrill Gorcunov
2008-11-23 17:00 ` Cyrill Gorcunov
2008-11-23 17:51 ` Sam Ravnborg
2008-11-23 17:58   ` Cyrill Gorcunov
2008-11-23 18:10     ` Cyrill Gorcunov
2008-11-23 18:12     ` Sam Ravnborg
2008-11-23 18:21       ` Cyrill Gorcunov
2008-11-23 18:43         ` Cyrill Gorcunov
2008-11-23 18:46         ` Alexander van Heukelum
2008-11-23 18:54         ` Ingo Molnar
2008-11-23 18:57           ` Cyrill Gorcunov
2008-11-23 19:00             ` Ingo Molnar
2008-11-23 19:04               ` Cyrill Gorcunov
2008-11-23 19:22               ` Cyrill Gorcunov
2008-11-23 19:31                 ` Ingo Molnar
2008-11-23 19:48                   ` Cyrill Gorcunov
2008-11-23 22:35                     ` Ingo Molnar
2008-11-24  9:10                     ` Alexander van Heukelum
2008-11-24 18:04                       ` H. Peter Anvin
2008-11-23 19:51           ` Sam Ravnborg

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox