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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



>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

��.n��������+%������w��{.n������\�)���jg��������ݢj����G�������j:+v���w�m������w�������h�����٥




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux Kernel]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux SCSI]

  Powered by Linux