From: dave.martin@linaro.org (Dave Martin)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] ARM: unwind: add unwind directives to bitops assembly macros
Date: Thu, 17 Nov 2011 18:48:01 +0000 [thread overview]
Message-ID: <20111117184801.GF3044@localhost.localdomain> (raw)
In-Reply-To: <1321553096-11859-1-git-send-email-will.deacon@arm.com>
On Thu, Nov 17, 2011 at 06:04:56PM +0000, Will Deacon wrote:
> The bitops functions (e.g. _test_and_set_bit) on ARM do not have unwind
> annotations and therefore the kernel cannot backtrace out of them on a
> fatal error (for example, NULL pointer dereference).
>
> This patch annotates the bitops assembly macros with UNWIND annotations
> so that we can produce a meaningful backtrace on error.
I take it these macros aren't likely ever to get used except in the
definition of complete functions (as in testsetbit.S etc.)?
One way to make the correct behaviour explicit would be to put the
function boilerplate into the macros instead:
#include <linux/linkage.h>
#include <asm/unwind.h>
.macro bitop name, instr
ENTRY(\name )
UNWIND( .fnstart )
@ stuff
@ bx lr / mov pc,lr
UNWIND( .fnend )
ENDPROC(\name )
.endm
That makes it harder to misuse the macros or to typo the ENDPROC()
directive, as well as allowing a few lines to be eliminated from the
other .S files.
Cheers
---Dave
>
> Signed-off-by: Will Deacon <will.deacon@arm.com>
> ---
> arch/arm/lib/bitops.h | 10 ++++++++++
> 1 files changed, 10 insertions(+), 0 deletions(-)
>
> diff --git a/arch/arm/lib/bitops.h b/arch/arm/lib/bitops.h
> index 10d868a..640ce58 100644
> --- a/arch/arm/lib/bitops.h
> +++ b/arch/arm/lib/bitops.h
> @@ -1,5 +1,8 @@
> +#include <asm/unwind.h>
> +
> #if __LINUX_ARM_ARCH__ >= 6
> .macro bitop, instr
> +UNWIND( .fnstart )
> ands ip, r1, #3
> strneb r1, [ip] @ assert word-aligned
> mov r2, #1
> @@ -13,9 +16,11 @@
> cmp r0, #0
> bne 1b
> bx lr
> +UNWIND( .fnend )
> .endm
>
> .macro testop, instr, store
> +UNWIND( .fnstart )
> ands ip, r1, #3
> strneb r1, [ip] @ assert word-aligned
> mov r2, #1
> @@ -34,9 +39,11 @@
> cmp r0, #0
> movne r0, #1
> 2: bx lr
> +UNWIND( .fnend )
> .endm
> #else
> .macro bitop, instr
> +UNWIND( .fnstart )
> ands ip, r1, #3
> strneb r1, [ip] @ assert word-aligned
> and r2, r0, #31
> @@ -49,6 +56,7 @@
> str r2, [r1, r0, lsl #2]
> restore_irqs ip
> mov pc, lr
> +UNWIND( .fnend )
> .endm
>
> /**
> @@ -60,6 +68,7 @@
> * to avoid dirtying the data cache.
> */
> .macro testop, instr, store
> +UNWIND( .fnstart )
> ands ip, r1, #3
> strneb r1, [ip] @ assert word-aligned
> and r3, r0, #31
> @@ -73,5 +82,6 @@
> moveq r0, #0
> restore_irqs ip
> mov pc, lr
> +UNWIND( .fnend )
> .endm
> #endif
> --
> 1.7.4.1
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2011-11-17 18:48 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-11-17 18:04 [PATCH] ARM: unwind: add unwind directives to bitops assembly macros Will Deacon
2011-11-17 18:48 ` Dave Martin [this message]
2011-11-18 17:40 ` Will Deacon
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20111117184801.GF3044@localhost.localdomain \
--to=dave.martin@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).