[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <1389180083-23249-4-git-send-email-David.Woodhouse@intel.com>
Date: Wed, 8 Jan 2014 11:21:23 +0000
From: David Woodhouse <David.Woodhouse@...el.com>
To: x86@...nel.org
Cc: linux-kernel@...r.kernel.org, llvmlinux@...ts.linuxfoundation.org
Subject: [PATCH 4/4] x86, boot: Work around clang PR18415.
Clang's intrinsics ignore -mregparm=3 when they fall back to calling the
out-of-line implementations. Putting the args on the stack when memcpy()
expects them in registers is not a recipe for a happy kernel.
This bites with -m32 too, so clang is presumably catastrophically
broken for the i386 kernel until this is fixed, unless I'm missing
something.
For information/testing only; do not apply. With this, I can use
'clang -m16' to build all the kernel's 16-bit code and get a successful
boot.
Not-signed-off-by: David Woodhouse <David.Woodhouse@...el.com>
---
arch/x86/boot/boot.h | 2 ++
arch/x86/boot/memory.c | 7 ++++++-
2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/arch/x86/boot/boot.h b/arch/x86/boot/boot.h
index ef72bae..1182dc9 100644
--- a/arch/x86/boot/boot.h
+++ b/arch/x86/boot/boot.h
@@ -232,8 +232,10 @@ void *copy_from_gs(void *dst, addr_t src, size_t len);
void *memcpy(void *dst, void *src, size_t len);
void *memset(void *dst, int c, size_t len);
+#ifndef __clang__ /* PR18415 */
#define memcpy(d,s,l) __builtin_memcpy(d,s,l)
#define memset(d,c,l) __builtin_memset(d,c,l)
+#endif
/* a20.c */
int enable_a20(void);
diff --git a/arch/x86/boot/memory.c b/arch/x86/boot/memory.c
index db75d07..7af6504 100644
--- a/arch/x86/boot/memory.c
+++ b/arch/x86/boot/memory.c
@@ -63,8 +63,13 @@ static int detect_memory_e820(void)
count = 0;
break;
}
-
+#ifdef __clang__
+ /* PR18415 */
+ memcpy(desc, &buf, sizeof(*desc));
+ desc++;
+#else
*desc++ = buf;
+#endif
count++;
} while (ireg.ebx && count < ARRAY_SIZE(boot_params.e820_map));
--
1.8.4.2
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists