[PATCH v2 09/10] arm64/BUG: Use BRK instruction for generic BUG traps

Mark Rutland
2015-07-13T16:56:39Z

On Mon, Jul 13, 2015 at 05:51:51PM +0100, Dave P Martin wrote:
> On Mon, Jul 13, 2015 at 05:43:15PM +0100, Mark Rutland wrote:
> > Hi,
> >
> > On Mon, Jul 13, 2015 at 02:25:56PM +0100, Dave P Martin wrote:
> > > Currently, the minimal default BUG() implementation from asm-
> > > generic is used for arm64.
> > >
> > > This patch uses the BRK software breakpoint instruction to generate
> > > a trap instead, similarly to most other arches, with the generic
> > > BUG code generating the dmesg boilerplate.
>
> [...]
>
> > FWIW I've given this a spin and it seems to work, so:
> >
> > Tested-by: Mark Rutland <mark.rutland@arm.com>
>
> Thanks for testing.
>
> > I have one concern with this below.
> >
> > > +#ifndef _ARCH_ARM64_ASM_BUG_H
> > > +#define _ARCH_ARM64_ASM_BUG_H
> > > +
> > > +#include <asm/debug-monitors.h>
> > > +
> > > +#ifdef CONFIG_GENERIC_BUG
> > > +#define HAVE_ARCH_BUG
> > > +
> > > +#ifdef CONFIG_DEBUG_BUGVERBOSE
> > > +#define _BUGVERBOSE_LOCATION(file, line) __BUGVERBOSE_LOCATION(file, line)
> > > +#define __BUGVERBOSE_LOCATION(file, line) \
> > > + ".pushsection .rodata.str,\"aMS\", at progbits,1\n" \
> > > + "2: .string \"" file "\"\n\t" \
> > > + ".popsection\n\t" \
> > > + \
> > > + ".long 2b - 0b\n\t" \
> > > + ".short " #line "\n\t"
> > > +#else
> > > +#define _BUGVERBOSE_LOCATION(file, line)
> > > +#endif
> >
> > Given the reliance on the labels in the caller, I think it might make
>
> Not sure what you mean here, can you elaborate?

We're relying on label "0:" in the caller/user of the macro when we emit
".long 2b - 0b".

I think it would be clearer if folded into the caller (even with the
inline ifdef this necessitates).

Though I could be missing something here that renders that impossible.

Thanks,
Mark.