RE: [PATCH 24/33] x86/kprobes: Get rid of kretprobe_trampoline_holder()

From: åæéå / HIRAMATUïMASAMI
Date: Thu Jan 21 2016 - 18:42:55 EST


>From: Josh Poimboeuf [mailto:jpoimboe@xxxxxxxxxx]
>
>The kretprobe_trampoline_holder() wrapper around kretprobe_trampoline()
>isn't used anywhere and adds some unnecessary frame pointer instructions
>which never execute. Instead, just make kretprobe_trampoline() a proper
>ELF function.
>

Looks good to me :)

Acked-by: Masami Hiramatsu <masami.hiramatsu.pt@xxxxxxxxxxx>

Thanks!

>Signed-off-by: Josh Poimboeuf <jpoimboe@xxxxxxxxxx>
>Cc: Ananth N Mavinakayanahalli <ananth@xxxxxxxxxx>
>Cc: Anil S Keshavamurthy <anil.s.keshavamurthy@xxxxxxxxx>
>Cc: "David S. Miller" <davem@xxxxxxxxxxxxx>
>Cc: Masami Hiramatsu <masami.hiramatsu.pt@xxxxxxxxxxx>
>---
> arch/x86/kernel/kprobes/core.c | 57 +++++++++++++++++++++---------------------
> 1 file changed, 28 insertions(+), 29 deletions(-)
>
>diff --git a/arch/x86/kernel/kprobes/core.c b/arch/x86/kernel/kprobes/core.c
>index 1deffe6..5b187df 100644
>--- a/arch/x86/kernel/kprobes/core.c
>+++ b/arch/x86/kernel/kprobes/core.c
>@@ -671,38 +671,37 @@ NOKPROBE_SYMBOL(kprobe_int3_handler);
> * When a retprobed function returns, this code saves registers and
> * calls trampoline_handler() runs, which calls the kretprobe's handler.
> */
>-static void __used kretprobe_trampoline_holder(void)
>-{
>- asm volatile (
>- ".global kretprobe_trampoline\n"
>- "kretprobe_trampoline: \n"
>+asm(
>+ ".global kretprobe_trampoline\n"
>+ ".type kretprobe_trampoline, @function\n"
>+ "kretprobe_trampoline:\n"
> #ifdef CONFIG_X86_64
>- /* We don't bother saving the ss register */
>- " pushq %rsp\n"
>- " pushfq\n"
>- SAVE_REGS_STRING
>- " movq %rsp, %rdi\n"
>- " call trampoline_handler\n"
>- /* Replace saved sp with true return address. */
>- " movq %rax, 152(%rsp)\n"
>- RESTORE_REGS_STRING
>- " popfq\n"
>+ /* We don't bother saving the ss register */
>+ " pushq %rsp\n"
>+ " pushfq\n"
>+ SAVE_REGS_STRING
>+ " movq %rsp, %rdi\n"
>+ " call trampoline_handler\n"
>+ /* Replace saved sp with true return address. */
>+ " movq %rax, 152(%rsp)\n"
>+ RESTORE_REGS_STRING
>+ " popfq\n"
> #else
>- " pushf\n"
>- SAVE_REGS_STRING
>- " movl %esp, %eax\n"
>- " call trampoline_handler\n"
>- /* Move flags to cs */
>- " movl 56(%esp), %edx\n"
>- " movl %edx, 52(%esp)\n"
>- /* Replace saved flags with true return address. */
>- " movl %eax, 56(%esp)\n"
>- RESTORE_REGS_STRING
>- " popf\n"
>+ " pushf\n"
>+ SAVE_REGS_STRING
>+ " movl %esp, %eax\n"
>+ " call trampoline_handler\n"
>+ /* Move flags to cs */
>+ " movl 56(%esp), %edx\n"
>+ " movl %edx, 52(%esp)\n"
>+ /* Replace saved flags with true return address. */
>+ " movl %eax, 56(%esp)\n"
>+ RESTORE_REGS_STRING
>+ " popf\n"
> #endif
>- " ret\n");
>-}
>-NOKPROBE_SYMBOL(kretprobe_trampoline_holder);
>+ " ret\n"
>+ ".size kretprobe_trampoline, .-kretprobe_trampoline\n"
>+);
> NOKPROBE_SYMBOL(kretprobe_trampoline);
>
> /*
>--
>2.4.3