From: Matthias Kaehlcke <mka@chromium.org> To: Thomas Gleixner <tglx@linutronix.de>, Ingo Molnar <mingo@redhat.com>, "H . Peter Anvin" <hpa@zytor.com>, Kees Cook <keescook@chromium.org> Cc: x86@kernel.org, linux-kernel@vger.kernel.org, Grant Grundler <grundler@chromium.org>, Greg Hackmann <ghackmann@google.com>, Michael Davidson <md@google.com>, Matthias Kaehlcke <mka@chromium.org> Subject: [PATCH v2] x86/mm/kaslr: Use _ASM_MUL macro for multiplication Date: Mon, 1 May 2017 15:47:41 -0700 Message-ID: <20170501224741.133938-1-mka@chromium.org> (raw) The constraint "rm" allows the compiler to put mix_const into memory. When the input operand is a memory location mul needs an operand size suffix, since it can't infer the multiplication width from the operand. Add and use the _ASM_MUL macro which determines the operand size and resolves to the 'mul' instruction with the corresponding suffix. This fixes the following error when building with clang: CC arch/x86/lib/kaslr.o /tmp/kaslr-dfe1ad.s: Assembler messages: /tmp/kaslr-dfe1ad.s:182: Error: no instruction mnemonic suffix given and no register operands; can't size instruction Signed-off-by: Matthias Kaehlcke <mka@chromium.org> --- Changes in v2: - updated commit message with additional details arch/x86/include/asm/asm.h | 1 + arch/x86/lib/kaslr.c | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/arch/x86/include/asm/asm.h b/arch/x86/include/asm/asm.h index 7acb51c49fec..7a9df3beb89b 100644 --- a/arch/x86/include/asm/asm.h +++ b/arch/x86/include/asm/asm.h @@ -32,6 +32,7 @@ #define _ASM_ADD __ASM_SIZE(add) #define _ASM_SUB __ASM_SIZE(sub) #define _ASM_XADD __ASM_SIZE(xadd) +#define _ASM_MUL __ASM_SIZE(mul) #define _ASM_AX __ASM_REG(ax) #define _ASM_BX __ASM_REG(bx) diff --git a/arch/x86/lib/kaslr.c b/arch/x86/lib/kaslr.c index 121f59c6ee54..0c7fe444dcdd 100644 --- a/arch/x86/lib/kaslr.c +++ b/arch/x86/lib/kaslr.c @@ -5,6 +5,7 @@ * kernel starts. This file is included in the compressed kernel and * normally linked in the regular. */ +#include <asm/asm.h> #include <asm/kaslr.h> #include <asm/msr.h> #include <asm/archrandom.h> @@ -79,7 +80,7 @@ unsigned long kaslr_get_random_long(const char *purpose) } /* Circular multiply for better bit diffusion */ - asm("mul %3" + asm(_ASM_MUL "%3" : "=a" (random), "=d" (raw) : "a" (random), "rm" (mix_const)); random += raw; -- 2.13.0.rc1.294.g07d810a77f-goog
next reply index Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top 2017-05-01 22:47 Matthias Kaehlcke [this message] 2017-05-02 2:08 ` Kees Cook 2017-05-05 8:11 ` [tip:x86/urgent] x86/mm/kaslr: Use the _ASM_MUL macro for multiplication to work around Clang incompatibility tip-bot for Matthias Kaehlcke 2017-05-05 10:25 ` Peter Zijlstra 2017-05-05 17:50 ` Ingo Molnar 2017-05-05 18:22 ` Peter Zijlstra 2017-05-05 18:44 ` Matthias Kaehlcke 2017-05-05 19:30 ` Linus Torvalds 2017-05-05 20:36 ` Michael Davidson 2017-05-06 8:16 ` Peter Zijlstra 2017-05-07 15:42 ` hpa 2017-05-05 20:52 ` Matthias Kaehlcke 2017-05-06 9:57 ` Ingo Molnar 2017-05-05 19:37 ` hpa 2017-05-05 21:24 ` Matthias Kaehlcke -- strict thread matches above, loose matches on Subject: below -- 2017-04-26 20:55 [PATCH v2] x86/mm/kaslr: Use _ASM_MUL macro for multiplication Matthias Kaehlcke 2017-04-26 21:00 ` hpa 2017-04-26 21:21 ` Kees Cook 2017-04-26 21:24 ` hpa 2017-04-26 21:29 ` Greg Hackmann 2017-04-29 21:23 ` H. Peter Anvin 2017-04-26 22:06 ` Kees Cook
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=20170501224741.133938-1-mka@chromium.org \ --to=mka@chromium.org \ --cc=ghackmann@google.com \ --cc=grundler@chromium.org \ --cc=hpa@zytor.com \ --cc=keescook@chromium.org \ --cc=linux-kernel@vger.kernel.org \ --cc=md@google.com \ --cc=mingo@redhat.com \ --cc=tglx@linutronix.de \ --cc=x86@kernel.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
LKML Archive on lore.kernel.org Archives are clonable: git clone --mirror https://lore.kernel.org/lkml/0 lkml/git/0.git git clone --mirror https://lore.kernel.org/lkml/1 lkml/git/1.git git clone --mirror https://lore.kernel.org/lkml/2 lkml/git/2.git git clone --mirror https://lore.kernel.org/lkml/3 lkml/git/3.git git clone --mirror https://lore.kernel.org/lkml/4 lkml/git/4.git git clone --mirror https://lore.kernel.org/lkml/5 lkml/git/5.git git clone --mirror https://lore.kernel.org/lkml/6 lkml/git/6.git git clone --mirror https://lore.kernel.org/lkml/7 lkml/git/7.git git clone --mirror https://lore.kernel.org/lkml/8 lkml/git/8.git git clone --mirror https://lore.kernel.org/lkml/9 lkml/git/9.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 lkml lkml/ https://lore.kernel.org/lkml \ linux-kernel@vger.kernel.org public-inbox-index lkml Example config snippet for mirrors Newsgroup available over NNTP: nntp://nntp.lore.kernel.org/org.kernel.vger.linux-kernel AGPL code for this site: git clone https://public-inbox.org/public-inbox.git