In difference to gas clang doesn't seem to infer the size from the
operands. Adding the suffix 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 <m...@chromium.org>
---
 arch/x86/lib/kaslr.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/arch/x86/lib/kaslr.c b/arch/x86/lib/kaslr.c
index 121f59c6ee54..947d4aa92ff7 100644
--- a/arch/x86/lib/kaslr.c
+++ b/arch/x86/lib/kaslr.c
@@ -79,7 +79,11 @@ unsigned long kaslr_get_random_long(const char *purpose)
        }
 
        /* Circular multiply for better bit diffusion */
-       asm("mul %3"
+#ifdef CONFIG_X86_64
+       asm("mulq %3"
+#else
+       asm("mull %3"
+#endif
            : "=a" (random), "=d" (raw)
            : "a" (random), "rm" (mix_const));
        random += raw;
-- 
2.13.0.rc0.306.g87b477812d-goog

Reply via email to