|
@@ -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);
|
|
|
|
|
|
/*
|