[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAKwvOdnQ4tb7auWqUoF_Mm-F9hiJotaQnP75ZDd6oPJ_1Z4qXg@mail.gmail.com>
Date: Mon, 26 Sep 2022 11:42:27 -0700
From: Nick Desaulniers <ndesaulniers@...gle.com>
To: Russell King <rmk+kernel@...linux.org.uk>,
Masami Hiramatsu <mhiramat@...nel.org>
Cc: "Naveen N . Rao" <naveen.n.rao@...ux.ibm.com>,
Anil S Keshavamurthy <anil.s.keshavamurthy@...el.com>,
"David S . Miller" <davem@...emloft.net>,
Arnd Bergmann <arnd@...db.de>,
Nathan Chancellor <nathan@...nel.org>,
Tom Rix <trix@...hat.com>,
sparkhuang <huangshaobo6@...wei.com>,
Ard Biesheuvel <ardb@...nel.org>,
Steven Rostedt <rostedt@...dmis.org>,
Linus Walleij <linus.walleij@...aro.org>,
Chen Zhongjin <chenzhongjin@...wei.com>,
linux-arm-kernel@...ts.infradead.org, linux-kernel@...r.kernel.org,
linux-arch@...r.kernel.org, llvm@...ts.linux.dev,
Naresh Kamboju <naresh.kamboju@...aro.org>,
regressions@...ts.linux.dev, lkft-triage@...ts.linaro.org,
Linux Kernel Functional Testing <lkft@...aro.org>,
Logan Chien <loganchien@...gle.com>
Subject: Re: [PATCH] ARM: kprobes: move __kretprobe_trampoline to out of line assembler
On Mon, Sep 26, 2022 at 11:37 AM Nick Desaulniers
<ndesaulniers@...gle.com> wrote:
>
> diff --git a/arch/arm/probes/kprobes/core.c b/arch/arm/probes/kprobes/core.c
> index 1435b508aa36..17d7e0259e63 100644
> --- a/arch/arm/probes/kprobes/core.c
> +++ b/arch/arm/probes/kprobes/core.c
> @@ -375,58 +375,10 @@ int __kprobes kprobe_exceptions_notify(struct notifier_block *self,
> return NOTIFY_DONE;
> }
>
> -/*
> - * When a retprobed function returns, trampoline_handler() is called,
> - * calling the kretprobe's handler. We construct a struct pt_regs to
> - * give a view of registers r0-r11, sp, lr, and pc to the user
> - * return-handler. This is not a complete pt_regs structure, but that
> - * should be enough for stacktrace from the return handler with or
> - * without pt_regs.
> - */
> -void __naked __kprobes __kretprobe_trampoline(void)
> -{
> - __asm__ __volatile__ (
> - "ldr lr, =__kretprobe_trampoline \n\t"
> -#ifdef CONFIG_FRAME_POINTER
> - /* __kretprobe_trampoline makes a framepointer on pt_regs. */
> -#ifdef CONFIG_CC_IS_CLANG
> - "stmdb sp, {sp, lr, pc} \n\t"
> - "sub sp, sp, #12 \n\t"
> - /* In clang case, pt_regs->ip = lr. */
> - "stmdb sp!, {r0 - r11, lr} \n\t"
> - /* fp points regs->r11 (fp) */
> - "add fp, sp, #44 \n\t"
> -#else /* !CONFIG_CC_IS_CLANG */
> - /* In gcc case, pt_regs->ip = fp. */
> - "stmdb sp, {fp, sp, lr, pc} \n\t"
> - "sub sp, sp, #16 \n\t"
> - "stmdb sp!, {r0 - r11} \n\t"
> - /* fp points regs->r15 (pc) */
> - "add fp, sp, #60 \n\t"
> -#endif /* CONFIG_CC_IS_CLANG */
> -#else /* !CONFIG_FRAME_POINTER */
> - /* store SP, LR on stack and add EABI unwind hint */
> - "stmdb sp, {sp, lr, pc} \n\t"
> - ".save {sp, lr, pc} \n\t"
> - "sub sp, sp, #16 \n\t"
> - "stmdb sp!, {r0 - r11} \n\t"
> - ".pad #52 \n\t"
> -#endif /* CONFIG_FRAME_POINTER */
> - "mov r0, sp \n\t"
> - "bl trampoline_handler \n\t"
> - "mov lr, r0 \n\t"
> - "ldmia sp!, {r0 - r11} \n\t"
> - "add sp, sp, #16 \n\t"
> -#ifdef CONFIG_THUMB2_KERNEL
> - "bx lr \n\t"
> -#else
> - "mov pc, lr \n\t"
> -#endif
> - : : : "memory");
> -}
> +/*void __kretprobe_trampoline(void);*/
^ d'oh, that commented out declaration should have been removed. Will
wait for feedback wrt. usage of UNWIND and Fixes tag to see if a v2 is
necessary, vs what can be modified if/when applied by maintainers.
--
Thanks,
~Nick Desaulniers
Powered by blists - more mailing lists