>From: Josh Poimboeuf [mailto:jpoim...@redhat.com]
>
>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...@hitachi.com>

Thanks!

>Signed-off-by: Josh Poimboeuf <jpoim...@redhat.com>
>Cc: Ananth N Mavinakayanahalli <ana...@in.ibm.com>
>Cc: Anil S Keshavamurthy <anil.s.keshavamur...@intel.com>
>Cc: "David S. Miller" <da...@davemloft.net>
>Cc: Masami Hiramatsu <masami.hiramatsu...@hitachi.com>
>---
> 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

Reply via email to