x86: introduce ENTRY(KPROBE_ENTRY)_X86 assembly helpers to catch unbalanced declaration v3
RFC 1/1 x86: introduce ENTRY(KPROBE_ENTRY)_X86 assembly helpers to catch unbalanced declaration v3
Impact: improvements
It's usefull to catch unbalanced or messed or mixed declarations of ENTRY and KPROBES. These macros would help a bit.
For example the following code would compile without problems
ENTRY_X86(mcount)
retq
END_X86(mcount)But if you forget and mess 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.
--- arch/x86/include/asm/linkage.h | 60 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+)
arch/x86/include/asm/linkage.h +60 -0
@@ -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; \ + __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 */
[Cyrill Gorcunov - Sun, Nov 23, 2008 at 08:21:39PM +0300]
| Impact: improvements | | It's usefull to catch unbalanced or messed or mixed declarations of ENTRY and | KPROBES. These macros would help a bit. |
...
Forgot to CC LKML, so I bounce the message to LKML and add this reply with LKML CC'ed. Sorry.
- Cyrill -
Ingo Molnar
AppliedQuoted 4 lines · Cyrill Gorcunov
| Impact: improvements | | It's usefull to catch unbalanced or messed or mixed declarations of ENTRY and | KPROBES. These macros would help a bit.
applied to tip/x86/irq, thanks Cyrill.
Now lets try a patch that makes use of it in the entry*.S files, and see the fallout?
Ingo
[Ingo Molnar - Sun, Nov 23, 2008 at 07:57:26PM +0100]
| | * Cyrill Gorcunov <[email protected]> wrote: | | > | Impact: improvements | > | | > | It's usefull to catch unbalanced or messed or mixed declarations of ENTRY and | > | KPROBES. These macros would help a bit. | | applied to tip/x86/irq, thanks Cyrill. | | Now lets try a patch that makes use of it in the entry*.S files, and | see the fallout? | | Ingo |
OK, let me fetch your branch first :)
- Cyrill -