Re: [GIT PULL] objtool fixes and updates

Josh Poimboeuf
2025-03-31T22:19:25Z

On Sun, Mar 30, 2025 at 06:39:51PM -0700, Josh Poimboeuf wrote:
> On Mon, Mar 31, 2025 at 01:13:55AM +0200, Borislav Petkov wrote:
> > On Sun, Mar 30, 2025 at 03:19:40PM -0700, Linus Torvalds wrote:
> > > On Sat, 29 Mar 2025 at 08:33, Borislav Petkov <bp@alien8.de> wrote:
> > > >
> > > > Btw, test bot complains:
> > > >
> > > > https://lore.kernel.org/r/202503292202.Sge7ZEUc-lkp@intel.com
> > >
> > > That's not a very helpful error message
> >
> > I found this:
> >
> > https://lore.kernel.org/r/202503280703.OARM8SrY-lkp@intel.com
> >
> > which looks like the original report.
> >
> > Looks unsolved yet...
>
> The "new" warning is just the "skipping duplicate warning", which was
> already merged with commit 0a7fb6f07e3a ("objtool: Increase per-function
> WARN_FUNC() rate limit"). So none of the warnings are specific to this
> pull request.
>
> Tiezhu, can you please look at this warning?
>
> arch/loongarch/kernel/traps.o: warning: objtool: show_stack+0xe0: stack state mismatch: reg1[22]=-1+0 reg2[22]=-2-160
> arch/loongarch/kernel/traps.o: warning: objtool: show_stack+0xe0: stack state mismatch: reg1[23]=-1+0 reg2[23]=-2-152

Here's a fix. Will post a real fix soon, along with another pile of
fixes.

diff --git a/arch/loongarch/include/asm/stacktrace.h b/arch/loongarch/include/asm/stacktrace.h
index f23adb15f418..fc8b64773794 100644
--- a/arch/loongarch/include/asm/stacktrace.h
+++ b/arch/loongarch/include/asm/stacktrace.h
@@ -8,6 +8,7 @@
#include <asm/asm.h>
#include <asm/ptrace.h>
#include <asm/loongarch.h>
+#include <asm/unwind_hints.h>
#include <linux/stringify.h>

enum stack_type {
@@ -43,6 +44,7 @@ int get_stack_info(unsigned long stack, struct task_struct *task, struct stack_i
static __always_inline void prepare_frametrace(struct pt_regs *regs)
{
__asm__ __volatile__(
+ UNWIND_HINT_SAVE
/* Save $ra */
STORE_ONE_REG(1)
/* Use $ra to save PC */
@@ -80,6 +82,7 @@ static __always_inline void prepare_frametrace(struct pt_regs *regs)
STORE_ONE_REG(29)
STORE_ONE_REG(30)
STORE_ONE_REG(31)
+ UNWIND_HINT_RESTORE
: "=m" (regs->csr_era)
: "r" (regs->regs)
: "memory");
diff --git a/arch/loongarch/include/asm/unwind_hints.h b/arch/loongarch/include/asm/unwind_hints.h
index a01086ad9dde..2c68bc72736c 100644
--- a/arch/loongarch/include/asm/unwind_hints.h
+++ b/arch/loongarch/include/asm/unwind_hints.h
@@ -23,6 +23,14 @@
UNWIND_HINT sp_reg=ORC_REG_SP type=UNWIND_HINT_TYPE_CALL
.endm

-#endif /* __ASSEMBLY__ */
+#else /* !__ASSEMBLY__ */
+
+#define UNWIND_HINT_SAVE \
+ UNWIND_HINT(UNWIND_HINT_TYPE_SAVE, 0, 0, 0)
+
+#define UNWIND_HINT_RESTORE \
+ UNWIND_HINT(UNWIND_HINT_TYPE_RESTORE, 0, 0, 0)
+
+#endif /* !__ASSEMBLY__ */

#endif /* _ASM_LOONGARCH_UNWIND_HINTS_H */