From b7d7e202a984610b87596000cf03832ca2370681 Mon Sep 17 00:00:00 2001 From: Lionel Sambuc Date: Thu, 11 Jun 2015 14:35:12 +0200 Subject: [PATCH] SMP: allow compilation with clang Change-Id: Iec57820d150f2436cb3b7c543f662d3313197a4c --- minix/drivers/bus/pci/pci.c | 2 +- minix/include/minix/bitmap.h | 4 ++++ minix/kernel/arch/i386/Makefile.inc | 2 ++ minix/kernel/spinlock.h | 4 ++-- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/minix/drivers/bus/pci/pci.c b/minix/drivers/bus/pci/pci.c index d72fc4736..c48bb40df 100644 --- a/minix/drivers/bus/pci/pci.c +++ b/minix/drivers/bus/pci/pci.c @@ -1959,7 +1959,7 @@ do_pcibridge(int busind) * pci_intel_init * *===========================================================================*/ static void -pci_intel_init() +pci_intel_init(void) { /* Try to detect a know PCI controller. Read the Vendor ID and * the Device ID for function 0 of device 0. diff --git a/minix/include/minix/bitmap.h b/minix/include/minix/bitmap.h index 2c675e3d5..4a55c7f35 100644 --- a/minix/include/minix/bitmap.h +++ b/minix/include/minix/bitmap.h @@ -19,6 +19,10 @@ #if defined(CONFIG_SMP) && defined(__GNUC__) #ifndef __ASSEMBLY__ + +#include +#include + static inline void bits_fill(bitchunk_t * chunks, unsigned bits) { unsigned c, cnt; diff --git a/minix/kernel/arch/i386/Makefile.inc b/minix/kernel/arch/i386/Makefile.inc index a32a4c9a5..be94e72c7 100644 --- a/minix/kernel/arch/i386/Makefile.inc +++ b/minix/kernel/arch/i386/Makefile.inc @@ -84,6 +84,8 @@ OBJS.kernel+= ${UNPAGED_OBJS} .ifdef CONFIG_SMP SRCS += arch_smp.c trampoline.S +# trampoline.S uses .code16, which is unsupported by clang. +AFLAGS.trampoline.S= ${${ACTIVE_CC} == "clang":?-no-integrated-as:} .endif .if ${USE_ACPI} != "no" diff --git a/minix/kernel/spinlock.h b/minix/kernel/spinlock.h index 7cfee2d9e..f6f80f012 100644 --- a/minix/kernel/spinlock.h +++ b/minix/kernel/spinlock.h @@ -19,9 +19,9 @@ typedef struct spinlock { #else /* SMP */ -#define SPINLOCK_DEFINE(name) spinlock_t name; +#define SPINLOCK_DEFINE(name) spinlock_t name = { .val = 0 }; #define PRIVATE_SPINLOCK_DEFINE(name) PRIVATE SPINLOCK_DEFINE(name) -#define SPINLOCK_DECLARE(name) extern SPINLOCK_DEFINE(name) +#define SPINLOCK_DECLARE(name) extern spinlock_t name; #define spinlock_init(sl) do { (sl)->val = 0; } while (0) #if CONFIG_MAX_CPUS == 1