All of lore.kernel.org
 help / color / mirror / Atom feed
From: ard.biesheuvel@linaro.org (Ard Biesheuvel)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] ARM: teach __asmeq that r12 and ip are the same register
Date: Wed, 28 Jan 2015 21:30:18 +0000	[thread overview]
Message-ID: <1422480618-25371-1-git-send-email-ard.biesheuvel@linaro.org> (raw)

The __asmeq macro is used inside inline asm statements to ensure that
register asm variables that explicitly specify a register are mapped
correctly onto those registers when used in inline asm input and output
constraints. However, the string based matching fails to take into account
that 'ip' may also be referred to as 'r12', (e.g., by clang), causing false
negatives.

Fix this by making __asmeq consider the ("ip","r12") and ("r12","ip")
cases specifically.

Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
---
Even though clang shouldn't be susceptible to the same bug, there is still
value in retaining these assertions there, so instead of just turning
__asmeq into a nop if __clang__ is defined, let's make it work correctly.

 arch/arm/include/asm/compiler.h | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/arch/arm/include/asm/compiler.h b/arch/arm/include/asm/compiler.h
index 8155db2f7fa1..c3a316a59710 100644
--- a/arch/arm/include/asm/compiler.h
+++ b/arch/arm/include/asm/compiler.h
@@ -8,8 +8,11 @@
  * This string is meant to be concatenated with the inline asm string and
  * will cause compilation to stop on mismatch.
  * (for details, see gcc PR 15089)
+ * For compatibility with clang, we have to explicitly take the equivalence
+ * of 'r12' and 'ip into account as well.
  */
-#define __asmeq(x, y)  ".ifnc " x "," y " ; .err ; .endif\n\t"
+#define __asmeq(x, y)  ".ifnc " x "," y " ; .ifnc " x y ",ipr12 ; " \
+	".ifnc " x y ",r12ip ; .err ; .endif ; .endif ; .endif\n\t"
 
 
 #endif /* __ASM_ARM_COMPILER_H */
-- 
1.8.3.2

             reply	other threads:[~2015-01-28 21:30 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-01-28 21:30 Ard Biesheuvel [this message]
2015-01-28 21:46 ` [PATCH] ARM: teach __asmeq that r12 and ip are the same register Nicolas Pitre
2015-01-28 22:00   ` Ard Biesheuvel
2015-01-28 22:47     ` Behan Webster

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=1422480618-25371-1-git-send-email-ard.biesheuvel@linaro.org \
    --to=ard.biesheuvel@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.