Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 3 Jun 2009 13:19:12 +0000 (UTC)
From:      Ed Schouten <ed@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r193376 - in projects/clangbsd: . cddl/lib/libzpool contrib/gcc gnu/lib/csu gnu/lib/libgcc lib/csu/amd64 lib/csu/i386-elf lib/librt libexec/rtld-elf secure/lib/libcrypto sys/boot/i386/b...
Message-ID:  <200906031319.n53DJCOQ055400@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: ed
Date: Wed Jun  3 13:19:12 2009
New Revision: 193376
URL: http://svn.freebsd.org/changeset/base/193376

Log:
  Add all local hacks to make apps build with Clang instead of GCC.
  
  - libcrypto: Disable inline assembly, because of LLVM PR3678.
  - libgcc: Build with GCC. Too many GCCisms.
  - csu: Clang somehow overoptimizes the out of bound array indexing.
  - gcc: Proper use of the inline keyword.
  - libzpool: Uses #pragma weak. LLVM PR3679.
  - librt:
  - rtld-elf: Places data in different sections than GCC, which triggers
    an assertion in rtld sources. Also uses #pragma weak. LLVM PR3679.
  - Several bootloaders: No support for -fno-unit-at-a-time.
  - loader: Issue with Clang's default library directories. To be
    investigated.

Modified:
  projects/clangbsd/Makefile.inc1
  projects/clangbsd/cddl/lib/libzpool/Makefile
  projects/clangbsd/contrib/gcc/bitmap.c
  projects/clangbsd/contrib/gcc/cfg.c
  projects/clangbsd/contrib/gcc/dominance.c
  projects/clangbsd/contrib/gcc/haifa-sched.c
  projects/clangbsd/contrib/gcc/longlong.h
  projects/clangbsd/contrib/gcc/toplev.h
  projects/clangbsd/gnu/lib/csu/Makefile
  projects/clangbsd/gnu/lib/libgcc/Makefile
  projects/clangbsd/lib/csu/amd64/Makefile
  projects/clangbsd/lib/csu/i386-elf/Makefile
  projects/clangbsd/lib/librt/Makefile
  projects/clangbsd/libexec/rtld-elf/Makefile
  projects/clangbsd/secure/lib/libcrypto/Makefile
  projects/clangbsd/sys/boot/i386/boot2/Makefile
  projects/clangbsd/sys/boot/i386/gptboot/Makefile
  projects/clangbsd/sys/boot/i386/gptzfsboot/Makefile
  projects/clangbsd/sys/boot/i386/loader/Makefile
  projects/clangbsd/sys/boot/i386/zfsboot/Makefile

Modified: projects/clangbsd/Makefile.inc1
==============================================================================
--- projects/clangbsd/Makefile.inc1	Wed Jun  3 09:44:22 2009	(r193375)
+++ projects/clangbsd/Makefile.inc1	Wed Jun  3 13:19:12 2009	(r193376)
@@ -282,9 +282,9 @@ LIB32WMAKEENV=	MAKEOBJDIRPREFIX=${OBJTRE
 		MACHINE_ARCH=i386 \
 		INSTALL="sh ${.CURDIR}/tools/install.sh" \
 		PATH=${TMPPATH} \
-		CC="${CC} ${LIB32FLAGS}" \
+		CC="gcc ${LIB32FLAGS}" \
 		CXX="${CXX} ${LIB32FLAGS}" \
-		OBJC="${OBJC} ${LIB32FLAGS}" \
+		OBJC="gcc ${LIB32FLAGS}" \
 		LD="${LD} -m elf_i386_fbsd -Y P,${LIB32TMP}/usr/lib32" \
 		AS="${AS} --32" \
 		LIBDIR=/usr/lib32 \

Modified: projects/clangbsd/cddl/lib/libzpool/Makefile
==============================================================================
--- projects/clangbsd/cddl/lib/libzpool/Makefile	Wed Jun  3 09:44:22 2009	(r193375)
+++ projects/clangbsd/cddl/lib/libzpool/Makefile	Wed Jun  3 13:19:12 2009	(r193376)
@@ -23,6 +23,13 @@ ATOMIC_SRCS=	opensolaris_atomic.c
 
 LIB=		zpool
 
+.include <bsd.own.mk>
+
+# XXX: LLVM PR3679
+.if ${MK_CLANG_IS_CC} != "no" && ${CC} == "cc"
+CC=		gcc
+.endif
+
 ZFS_COMMON_SRCS= ${ZFS_COMMON_OBJS:C/.o$/.c/} vdev_file.c
 ZFS_SHARED_SRCS= ${ZFS_SHARED_OBJS:C/.o$/.c/}
 KERNEL_SRCS=	kernel.c taskq.c util.c

Modified: projects/clangbsd/contrib/gcc/bitmap.c
==============================================================================
--- projects/clangbsd/contrib/gcc/bitmap.c	Wed Jun  3 09:44:22 2009	(r193375)
+++ projects/clangbsd/contrib/gcc/bitmap.c	Wed Jun  3 13:19:12 2009	(r193376)
@@ -186,7 +186,7 @@ bitmap_elt_clear_from (bitmap head, bitm
 
 /* Clear a bitmap by freeing the linked list.  */
 
-inline void
+void
 bitmap_clear (bitmap head)
 {
   if (head->first)

Modified: projects/clangbsd/contrib/gcc/cfg.c
==============================================================================
--- projects/clangbsd/contrib/gcc/cfg.c	Wed Jun  3 09:44:22 2009	(r193375)
+++ projects/clangbsd/contrib/gcc/cfg.c	Wed Jun  3 13:19:12 2009	(r193376)
@@ -658,7 +658,7 @@ static void *first_edge_aux_obj = 0;
 /* Allocate a memory block of SIZE as BB->aux.  The obstack must
    be first initialized by alloc_aux_for_blocks.  */
 
-inline void
+void
 alloc_aux_for_block (basic_block bb, int size)
 {
   /* Verify that aux field is clear.  */
@@ -721,7 +721,7 @@ free_aux_for_blocks (void)
 /* Allocate a memory edge of SIZE as BB->aux.  The obstack must
    be first initialized by alloc_aux_for_edges.  */
 
-inline void
+void
 alloc_aux_for_edge (edge e, int size)
 {
   /* Verify that aux field is clear.  */

Modified: projects/clangbsd/contrib/gcc/dominance.c
==============================================================================
--- projects/clangbsd/contrib/gcc/dominance.c	Wed Jun  3 09:44:22 2009	(r193375)
+++ projects/clangbsd/contrib/gcc/dominance.c	Wed Jun  3 13:19:12 2009	(r193376)
@@ -686,7 +686,7 @@ get_immediate_dominator (enum cdi_direct
 
 /* Set the immediate dominator of the block possibly removing
    existing edge.  NULL can be used to remove any edge.  */
-inline void
+void
 set_immediate_dominator (enum cdi_direction dir, basic_block bb,
 			 basic_block dominated_by)
 {

Modified: projects/clangbsd/contrib/gcc/haifa-sched.c
==============================================================================
--- projects/clangbsd/contrib/gcc/haifa-sched.c	Wed Jun  3 09:44:22 2009	(r193375)
+++ projects/clangbsd/contrib/gcc/haifa-sched.c	Wed Jun  3 13:19:12 2009	(r193376)
@@ -625,7 +625,7 @@ static rtx last_scheduled_insn;
    This is the number of cycles between instruction issue and
    instruction results.  */
 
-HAIFA_INLINE int
+int
 insn_cost (rtx insn, rtx link, rtx used)
 {
   return insn_cost1 (insn, used ? REG_NOTE_KIND (link) : REG_NOTE_MAX,

Modified: projects/clangbsd/contrib/gcc/longlong.h
==============================================================================
--- projects/clangbsd/contrib/gcc/longlong.h	Wed Jun  3 09:44:22 2009	(r193375)
+++ projects/clangbsd/contrib/gcc/longlong.h	Wed Jun  3 13:19:12 2009	(r193376)
@@ -322,22 +322,22 @@ UDItype __umulsidi3 (USItype, USItype);
 	     "g" ((USItype) (bl)))
 #define sub_ddmmss(sh, sl, ah, al, bh, bl) \
   __asm__ ("subl %5,%1\n\tsbbl %3,%0"					\
-	   : "=r" ((USItype) (sh)),					\
-	     "=&r" ((USItype) (sl))					\
+	   : "=r" ((sh)),					\
+	     "=&r" ((sl))					\
 	   : "0" ((USItype) (ah)),					\
 	     "g" ((USItype) (bh)),					\
 	     "1" ((USItype) (al)),					\
 	     "g" ((USItype) (bl)))
 #define umul_ppmm(w1, w0, u, v) \
   __asm__ ("mull %3"							\
-	   : "=a" ((USItype) (w0)),					\
-	     "=d" ((USItype) (w1))					\
+	   : "=a" ((w0)),					\
+	     "=d" ((w1))					\
 	   : "%0" ((USItype) (u)),					\
 	     "rm" ((USItype) (v)))
 #define udiv_qrnnd(q, r, n1, n0, dv) \
   __asm__ ("divl %4"							\
-	   : "=a" ((USItype) (q)),					\
-	     "=d" ((USItype) (r))					\
+	   : "=a" ((q)),					\
+	     "=d" ((r))					\
 	   : "0" ((USItype) (n0)),					\
 	     "1" ((USItype) (n1)),					\
 	     "rm" ((USItype) (dv)))
@@ -387,10 +387,10 @@ UDItype __umulsidi3 (USItype, USItype);
 #define sub_ddmmss(sh, sl, ah, al, bh, bl) \
   /* The cmp clears the condition bit.  */ \
   __asm__ ("cmp %0,%0\n\tsubx %1,%5\n\tsubx %0,%3"			\
-	   : "=r" ((USItype) (sh)),					\
-	     "=&r" ((USItype) (sl))					\
-	   : "0" ((USItype) (ah)),					\
-	     "r" ((USItype) (bh)),					\
+	   : "=r" ((USItype)(sh)),					\
+	   "=&r" ((USItype)(sl))					\
+	   : "0" ((USItype)(ah)),					\
+	   "r" ((USItype)(bh)),						\
 	     "1" ((USItype) (al)),					\
 	     "r" ((USItype) (bl))					\
 	   : "cbit")

Modified: projects/clangbsd/contrib/gcc/toplev.h
==============================================================================
--- projects/clangbsd/contrib/gcc/toplev.h	Wed Jun  3 09:44:22 2009	(r193375)
+++ projects/clangbsd/contrib/gcc/toplev.h	Wed Jun  3 13:19:12 2009	(r193376)
@@ -158,7 +158,7 @@ extern int exact_log2                  (
 extern int floor_log2                  (unsigned HOST_WIDE_INT);
 
 /* Inline versions of the above for speed.  */
-#if GCC_VERSION >= 3004
+#if 0
 # if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONG
 #  define CLZ_HWI __builtin_clzl
 #  define CTZ_HWI __builtin_ctzl

Modified: projects/clangbsd/gnu/lib/csu/Makefile
==============================================================================
--- projects/clangbsd/gnu/lib/csu/Makefile	Wed Jun  3 09:44:22 2009	(r193375)
+++ projects/clangbsd/gnu/lib/csu/Makefile	Wed Jun  3 13:19:12 2009	(r193376)
@@ -3,6 +3,11 @@
 .include <bsd.own.mk>
 MK_SSP=		no
 
+# XXX: prevents infinite loop on startup
+.if ${MK_CLANG_IS_CC} != "no" && ${CC} == "cc"
+CC=		gcc
+.endif
+
 GCCDIR=	${.CURDIR}/../../../contrib/gcc
 GCCLIB=	${.CURDIR}/../../../contrib/gcclibs
 CCDIR=	${.CURDIR}/../../usr.bin/cc

Modified: projects/clangbsd/gnu/lib/libgcc/Makefile
==============================================================================
--- projects/clangbsd/gnu/lib/libgcc/Makefile	Wed Jun  3 09:44:22 2009	(r193375)
+++ projects/clangbsd/gnu/lib/libgcc/Makefile	Wed Jun  3 13:19:12 2009	(r193376)
@@ -9,6 +9,11 @@ SHLIBDIR?=	/lib
 .include <bsd.own.mk>
 .include "${.CURDIR}/../../usr.bin/cc/Makefile.tgt"
 
+# XXX: a lot of missing GCC builtins
+.if ${MK_CLANG_IS_CC} != "no" && ${CC} == "cc"
+CC=		gcc
+.endif
+
 .PATH: ${GCCDIR}/config/${GCC_CPU} ${GCCDIR}/config ${GCCDIR}
 
 CFLAGS+=	-DIN_GCC -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED \

Modified: projects/clangbsd/lib/csu/amd64/Makefile
==============================================================================
--- projects/clangbsd/lib/csu/amd64/Makefile	Wed Jun  3 09:44:22 2009	(r193375)
+++ projects/clangbsd/lib/csu/amd64/Makefile	Wed Jun  3 13:19:12 2009	(r193376)
@@ -1,7 +1,14 @@
 # $FreeBSD$
 
+.include <bsd.own.mk>
+
 .PATH: ${.CURDIR}/../common
 
+# XXX: prevents infinite loop on startup
+.if ${MK_CLANG_IS_CC} != "no"
+CC=		gcc
+.endif
+
 SRCS=		crt1.c crti.S crtn.S
 OBJS=		${SRCS:N*.h:R:S/$/.o/g}
 OBJS+=		gcrt1.o

Modified: projects/clangbsd/lib/csu/i386-elf/Makefile
==============================================================================
--- projects/clangbsd/lib/csu/i386-elf/Makefile	Wed Jun  3 09:44:22 2009	(r193375)
+++ projects/clangbsd/lib/csu/i386-elf/Makefile	Wed Jun  3 13:19:12 2009	(r193376)
@@ -1,7 +1,14 @@
 # $FreeBSD$
 
+.include <bsd.own.mk>
+
 .PATH: ${.CURDIR}/../common
 
+# XXX: prevents infinite loop on startup
+.if ${MK_CLANG_IS_CC} != "no" && ${CC} == "cc"
+CC=		gcc
+.endif
+
 SRCS=		crt1.c crti.S crtn.S
 FILES=		${SRCS:N*.h:R:S/$/.o/g} gcrt1.o
 FILESOWN=	${LIBOWN}

Modified: projects/clangbsd/lib/librt/Makefile
==============================================================================
--- projects/clangbsd/lib/librt/Makefile	Wed Jun  3 09:44:22 2009	(r193375)
+++ projects/clangbsd/lib/librt/Makefile	Wed Jun  3 13:19:12 2009	(r193376)
@@ -1,5 +1,12 @@
 # $FreeBSD$
 
+.include <bsd.own.mk>
+
+# XXX: LLVM PR3678
+.if ${MK_CLANG_IS_CC} != "no" && ${CC} == "cc"
+CC=	gcc
+.endif
+
 LIB=rt
 SHLIB_MAJOR= 1
 CFLAGS+=-I${.CURDIR}/../libc/include -I${.CURDIR}

Modified: projects/clangbsd/libexec/rtld-elf/Makefile
==============================================================================
--- projects/clangbsd/libexec/rtld-elf/Makefile	Wed Jun  3 09:44:22 2009	(r193375)
+++ projects/clangbsd/libexec/rtld-elf/Makefile	Wed Jun  3 13:19:12 2009	(r193376)
@@ -3,6 +3,11 @@
 .include <bsd.own.mk>
 MK_SSP=		no
 
+# XXX: prevents failed assertion on startup
+.if ${MK_CLANG_IS_CC} != "no" && ${CC} == "cc"
+CC=	gcc
+.endif
+
 PROG?=		ld-elf.so.1
 SRCS=		rtld_start.S \
 		reloc.c rtld.c rtld_lock.c map_object.c \

Modified: projects/clangbsd/secure/lib/libcrypto/Makefile
==============================================================================
--- projects/clangbsd/secure/lib/libcrypto/Makefile	Wed Jun  3 09:44:22 2009	(r193375)
+++ projects/clangbsd/secure/lib/libcrypto/Makefile	Wed Jun  3 13:19:12 2009	(r193376)
@@ -3,11 +3,12 @@
 SHLIBDIR?=	/lib
 SUBDIR=		engines
 
-.include <bsd.own.mk>
-
 LIB=		crypto
 SHLIB_MAJOR=	5
 
+# XXX: LLVM PR3678
+CFLAGS+=	-DOPENSSL_NO_INLINE_ASM
+
 NO_LINT=
 
 .if exists(Makefile.man)

Modified: projects/clangbsd/sys/boot/i386/boot2/Makefile
==============================================================================
--- projects/clangbsd/sys/boot/i386/boot2/Makefile	Wed Jun  3 09:44:22 2009	(r193375)
+++ projects/clangbsd/sys/boot/i386/boot2/Makefile	Wed Jun  3 13:19:12 2009	(r193376)
@@ -1,5 +1,11 @@
 # $FreeBSD$
 
+.include <bsd.own.mk>
+
+.if ${MK_CLANG_IS_CC} != "no" && ${CC} == "cc"
+CC=		gcc
+.endif
+
 FILES=		boot boot1 boot2
 
 NM?=		nm

Modified: projects/clangbsd/sys/boot/i386/gptboot/Makefile
==============================================================================
--- projects/clangbsd/sys/boot/i386/gptboot/Makefile	Wed Jun  3 09:44:22 2009	(r193375)
+++ projects/clangbsd/sys/boot/i386/gptboot/Makefile	Wed Jun  3 13:19:12 2009	(r193376)
@@ -1,5 +1,11 @@
 # $FreeBSD$
 
+.include <bsd.own.mk>
+
+.if ${MK_CLANG_IS_CC} != "no" && ${CC} == "cc"
+CC=		gcc
+.endif
+
 .PATH:		${.CURDIR}/../boot2
 
 FILES=		gptboot

Modified: projects/clangbsd/sys/boot/i386/gptzfsboot/Makefile
==============================================================================
--- projects/clangbsd/sys/boot/i386/gptzfsboot/Makefile	Wed Jun  3 09:44:22 2009	(r193375)
+++ projects/clangbsd/sys/boot/i386/gptzfsboot/Makefile	Wed Jun  3 13:19:12 2009	(r193376)
@@ -1,5 +1,11 @@
 # $FreeBSD$
 
+.include <bsd.own.mk>
+
+.if ${MK_CLANG_IS_CC} != "no" && ${CC} == "cc"
+CC=		gcc
+.endif
+
 .PATH:		${.CURDIR}/../boot2 ${.CURDIR}/../gptboot ${.CURDIR}/../zfsboot
 
 FILES=		gptzfsboot

Modified: projects/clangbsd/sys/boot/i386/loader/Makefile
==============================================================================
--- projects/clangbsd/sys/boot/i386/loader/Makefile	Wed Jun  3 09:44:22 2009	(r193375)
+++ projects/clangbsd/sys/boot/i386/loader/Makefile	Wed Jun  3 13:19:12 2009	(r193376)
@@ -3,6 +3,11 @@
 .include <bsd.own.mk>
 MK_SSP=		no
 
+# XXX: broken compiler include paths
+.if ${MK_CLANG_IS_CC} != "no" && ${CC} == "cc"
+CC=		gcc
+.endif
+
 PROG=		loader.sym
 INTERNALPROG=
 NEWVERSWHAT=	"bootstrap loader" i386

Modified: projects/clangbsd/sys/boot/i386/zfsboot/Makefile
==============================================================================
--- projects/clangbsd/sys/boot/i386/zfsboot/Makefile	Wed Jun  3 09:44:22 2009	(r193375)
+++ projects/clangbsd/sys/boot/i386/zfsboot/Makefile	Wed Jun  3 13:19:12 2009	(r193376)
@@ -1,5 +1,11 @@
 # $FreeBSD$
 
+.include <bsd.own.mk>
+
+.if ${MK_CLANG_IS_CC} != "no" && ${CC} == "cc"
+CC=		gcc
+.endif
+
 .PATH:		${.CURDIR}/../boot2
 
 FILES=		zfsboot



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200906031319.n53DJCOQ055400>