From owner-svn-src-projects@FreeBSD.ORG Sat Jul 7 19:12:16 2012 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id EB7A7106566B; Sat, 7 Jul 2012 19:12:16 +0000 (UTC) (envelope-from kientzle@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id D32238FC19; Sat, 7 Jul 2012 19:12:16 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q67JCGK6077814; Sat, 7 Jul 2012 19:12:16 GMT (envelope-from kientzle@svn.freebsd.org) Received: (from kientzle@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q67JCGZ0077779; Sat, 7 Jul 2012 19:12:16 GMT (envelope-from kientzle@svn.freebsd.org) Message-Id: <201207071912.q67JCGZ0077779@svn.freebsd.org> From: Tim Kientzle Date: Sat, 7 Jul 2012 19:12:16 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r238211 - in projects/armv6: . contrib/binutils contrib/binutils/bfd contrib/gcc/config/arm gnu/usr.bin/binutils gnu/usr.bin/binutils/as gnu/usr.bin/binutils/ld gnu/usr.bin/binutils/lib... X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 07 Jul 2012 19:12:17 -0000 Author: kientzle Date: Sat Jul 7 19:12:15 2012 New Revision: 238211 URL: http://svn.freebsd.org/changeset/base/238211 Log: Support TARGET_ARCH=armv6 and TARGET_ARCH=armv6eb This adds a new TARGET_ARCH for building on ARM processors that support the ARMv6K multiprocessor extensions. In particular, these processors have better support for TLS and mutex operations. This mostly touches a lot of Makefiles to extend existing patterns for inferring CPUARCH from ARCH. It also configures: * GCC to default to arm1176jz-s * GCC to predefine __FreeBSD_ARCH_armv6__ * gas to default to ARM_ARCH_V6K * uname -p to return 'armv6' * make so that MACHINE_ARCH defaults to 'armv6' It also changes a number of headers to use the compiler __ARM_ARCH_XXX__ macros to configure processor-specific support routines. I've successfully built and booted a BEAGLEBONE image with these patches, though "make buildworld" on the resulting image currently mis-compiles rtld. Modified: projects/armv6/Makefile projects/armv6/Makefile.inc1 projects/armv6/contrib/binutils/bfd/config.bfd projects/armv6/contrib/binutils/config.sub projects/armv6/contrib/gcc/config/arm/freebsd.h projects/armv6/gnu/usr.bin/binutils/Makefile.inc0 projects/armv6/gnu/usr.bin/binutils/as/Makefile projects/armv6/gnu/usr.bin/binutils/ld/Makefile.arm projects/armv6/gnu/usr.bin/binutils/libbfd/Makefile.arm projects/armv6/gnu/usr.bin/cc/Makefile.inc projects/armv6/gnu/usr.bin/cc/Makefile.tgt projects/armv6/gnu/usr.bin/gdb/Makefile.inc projects/armv6/gnu/usr.bin/gdb/libgdb/Makefile projects/armv6/share/mk/bsd.endian.mk projects/armv6/share/mk/sys.mk projects/armv6/sys/arm/arm/cpufunc_asm_armv7.S projects/armv6/sys/arm/at91/std.at91 projects/armv6/sys/arm/at91/std.at91sam9 projects/armv6/sys/arm/econa/std.econa projects/armv6/sys/arm/include/asm.h projects/armv6/sys/arm/include/asmacros.h projects/armv6/sys/arm/include/atomic.h projects/armv6/sys/arm/include/param.h projects/armv6/sys/arm/include/sysarch.h projects/armv6/sys/arm/lpc/std.lpc projects/armv6/sys/arm/mv/std.mv projects/armv6/sys/arm/s3c2xx0/std.s3c2410 projects/armv6/sys/arm/sa11x0/std.sa11x0 projects/armv6/sys/arm/ti/std.ti projects/armv6/sys/arm/xscale/std.xscale projects/armv6/sys/conf/kern.pre.mk projects/armv6/sys/conf/kmod.mk projects/armv6/usr.bin/xlint/Makefile.inc Modified: projects/armv6/Makefile ============================================================================== --- projects/armv6/Makefile Sat Jul 7 18:25:56 2012 (r238210) +++ projects/armv6/Makefile Sat Jul 7 19:12:15 2012 (r238211) @@ -135,7 +135,7 @@ _MAKE= PATH=${PATH} ${BINMAKE} -f Makefi _TARGET_ARCH= ${TARGET:S/pc98/i386/} .elif !defined(TARGET) && defined(TARGET_ARCH) && \ ${TARGET_ARCH} != ${MACHINE_ARCH} -_TARGET= ${TARGET_ARCH:C/mips(n32|64)?(el)?/mips/:C/armeb/arm/} +_TARGET= ${TARGET_ARCH:C/mips(n32|64)?(el)?/mips/:C/arm(v6)?(eb)?/arm/} .endif # Legacy names, for another transition period mips:mips(n32|64)?eb -> mips:mips\1 .if defined(TARGET) && defined(TARGET_ARCH) && \ @@ -329,7 +329,7 @@ kernel-toolchains: # .if make(universe) || make(universe_kernels) || make(tinderbox) || make(targets) TARGETS?=amd64 arm i386 ia64 mips pc98 powerpc sparc64 -TARGET_ARCHES_arm?= arm armeb +TARGET_ARCHES_arm?= arm armeb armv6 armv6eb TARGET_ARCHES_mips?= mipsel mips mips64el mips64 mipsn32 TARGET_ARCHES_powerpc?= powerpc powerpc64 TARGET_ARCHES_pc98?= i386 Modified: projects/armv6/Makefile.inc1 ============================================================================== --- projects/armv6/Makefile.inc1 Sat Jul 7 18:25:56 2012 (r238210) +++ projects/armv6/Makefile.inc1 Sat Jul 7 19:12:15 2012 (r238211) @@ -136,7 +136,7 @@ VERSION!= uname -srp VERSION+= ${OSRELDATE} .endif -KNOWN_ARCHES?= amd64 arm armeb/arm i386 i386/pc98 ia64 mips mipsel/mips mips64el/mips mips64/mips mipsn32el/mips mipsn32/mips powerpc powerpc64/powerpc sparc64 +KNOWN_ARCHES?= amd64 arm armeb/arm armv6/arm armv6eb/arm i386 i386/pc98 ia64 mips mipsel/mips mips64el/mips mips64/mips mipsn32el/mips mipsn32/mips powerpc powerpc64/powerpc sparc64 .if ${TARGET} == ${TARGET_ARCH} _t= ${TARGET} .else Modified: projects/armv6/contrib/binutils/bfd/config.bfd ============================================================================== --- projects/armv6/contrib/binutils/bfd/config.bfd Sat Jul 7 18:25:56 2012 (r238210) +++ projects/armv6/contrib/binutils/bfd/config.bfd Sat Jul 7 19:12:15 2012 (r238211) @@ -277,6 +277,14 @@ case "${targ}" in targ_defvec=bfd_elf32_bigarm_vec targ_selvecs=bfd_elf32_littlearm_vec ;; + armv6eb-*-freebsd*) + targ_defvec=bfd_elf32_bigarm_vec + targ_selvecs=bfd_elf32_littlearm_vec + ;; + armv6-*-freebsd*) + targ_defvec=bfd_elf32_littlearm_vec + targ_selvecs=bfd_elf32_bigarm_vec + ;; arm-*-elf | arm-*-freebsd* | arm*-*-linux-* | arm*-*-conix* | \ arm*-*-uclinux* | arm-*-kfreebsd*-gnu | \ arm*-*-eabi* ) Modified: projects/armv6/contrib/binutils/config.sub ============================================================================== --- projects/armv6/contrib/binutils/config.sub Sat Jul 7 18:25:56 2012 (r238210) +++ projects/armv6/contrib/binutils/config.sub Sat Jul 7 19:12:15 2012 (r238211) @@ -241,7 +241,7 @@ case $basic_machine in | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ - | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ + | arc | arm | arm[bl]e | arme[lb] | armv[23456] | armv[345][lb] | avr | avr32 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ Modified: projects/armv6/contrib/gcc/config/arm/freebsd.h ============================================================================== --- projects/armv6/contrib/gcc/config/arm/freebsd.h Sat Jul 7 18:25:56 2012 (r238210) +++ projects/armv6/contrib/gcc/config/arm/freebsd.h Sat Jul 7 19:12:15 2012 (r238211) @@ -55,8 +55,6 @@ /************************[ Target stuff ]***********************************/ -#undef TARGET_VERSION -#define TARGET_VERSION fprintf (stderr, " (FreeBSD/StrongARM ELF)"); #ifndef TARGET_ENDIAN_DEFAULT #define TARGET_ENDIAN_DEFAULT 0 @@ -86,8 +84,22 @@ /* We use the GCC defaults here. */ #undef WCHAR_TYPE +#if defined(FREEBSD_ARCH_armv6) +#undef SUBTARGET_CPU_DEFAULT +#define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm1176jzs +#undef FBSD_TARGET_CPU_CPP_BUILTINS +#define FBSD_TARGET_CPU_CPP_BUILTINS() \ + do { \ + builtin_define ("__FreeBSD_ARCH_armv6__"); \ + } while (0) +#undef TARGET_VERSION +#define TARGET_VERSION fprintf (stderr, " (FreeBSD/armv6 ELF)"); +#else #undef SUBTARGET_CPU_DEFAULT #define SUBTARGET_CPU_DEFAULT TARGET_CPU_strongarm +#undef TARGET_VERSION +#define TARGET_VERSION fprintf (stderr, " (FreeBSD/StrongARM ELF)"); +#endif /* FreeBSD does its profiling differently to the Acorn compiler. We don't need a word following the mcount call; and to skip it Modified: projects/armv6/gnu/usr.bin/binutils/Makefile.inc0 ============================================================================== --- projects/armv6/gnu/usr.bin/binutils/Makefile.inc0 Sat Jul 7 18:25:56 2012 (r238210) +++ projects/armv6/gnu/usr.bin/binutils/Makefile.inc0 Sat Jul 7 19:12:15 2012 (r238211) @@ -7,7 +7,7 @@ VERSION= "2.17.50 [FreeBSD] 2007-07-03" .if defined(TARGET_ARCH) -TARGET_CPUARCH=${TARGET_ARCH:C/mips(n32|64)?(el)?/mips/:C/armeb/arm/:C/powerpc64/powerpc/} +TARGET_CPUARCH=${TARGET_ARCH:C/mips(n32|64)?(el)?/mips/:C/arm(v6)?(eb)?/arm/:C/powerpc64/powerpc/} .else TARGET_CPUARCH=${MACHINE_CPUARCH} .endif @@ -16,7 +16,7 @@ TARGET_VENDOR?= unknown TARGET_OS?= freebsd BINUTILS_ARCH=${TARGET_ARCH:C/amd64/x86_64/} TARGET_TUPLE?= ${BINUTILS_ARCH}-${TARGET_VENDOR}-${TARGET_OS} -.if ${TARGET_ARCH} == "armeb" || \ +.if ${TARGET_ARCH} == "armeb" || ${TARGET_ARCH} == "armv6eb" || \ (${TARGET_CPUARCH} == "mips" && ${TARGET_ARCH:Mmips*el} == "") TARGET_BIG_ENDIAN=t .endif Modified: projects/armv6/gnu/usr.bin/binutils/as/Makefile ============================================================================== --- projects/armv6/gnu/usr.bin/binutils/as/Makefile Sat Jul 7 18:25:56 2012 (r238210) +++ projects/armv6/gnu/usr.bin/binutils/as/Makefile Sat Jul 7 19:12:15 2012 (r238211) @@ -42,6 +42,10 @@ SRCS+= app.c \ # DEO: why not used? #SRCS+= itbl-ops.c +.if ${TARGET_ARCH} == "armv6" || ${TARGET_ARCH} == "armv6eb" +CFLAGS+= -DCPU_DEFAULT=ARM_ARCH_V6K +.endif + .if ${TARGET_CPUARCH} == "mips" SRCS+= itbl-ops.c itbl-parse.y itbl-lex.l .if ${TARGET_ARCH:Mmips64*} != "" Modified: projects/armv6/gnu/usr.bin/binutils/ld/Makefile.arm ============================================================================== --- projects/armv6/gnu/usr.bin/binutils/ld/Makefile.arm Sat Jul 7 18:25:56 2012 (r238210) +++ projects/armv6/gnu/usr.bin/binutils/ld/Makefile.arm Sat Jul 7 19:12:15 2012 (r238211) @@ -1,6 +1,6 @@ # $FreeBSD$ -.if ${TARGET_ARCH} == "armeb" +.if ${TARGET_ARCH} == "armeb" || ${TARGET_ARCH} == "armv6eb" NATIVE_EMULATION= armelfb_fbsd .else NATIVE_EMULATION= armelf_fbsd Modified: projects/armv6/gnu/usr.bin/binutils/libbfd/Makefile.arm ============================================================================== --- projects/armv6/gnu/usr.bin/binutils/libbfd/Makefile.arm Sat Jul 7 18:25:56 2012 (r238210) +++ projects/armv6/gnu/usr.bin/binutils/libbfd/Makefile.arm Sat Jul 7 19:12:15 2012 (r238211) @@ -1,6 +1,6 @@ # $FreeBSD$ -.if ${TARGET_ARCH} == "armeb" +.if ${TARGET_ARCH} == "armeb" || ${TARGET_ARCH} == "armv6eb" DEFAULT_VECTOR= bfd_elf32_bigarm_vec .else DEFAULT_VECTOR= bfd_elf32_littlearm_vec @@ -14,7 +14,7 @@ SRCS+= cpu-arm.c \ elflink.c VECS+= ${DEFAULT_VECTOR} -.if ${TARGET_ARCH} == "armeb" +.if ${TARGET_ARCH} == "armeb" || ${TARGET_ARCH} == "armv6eb" VECS+= bfd_elf32_littlearm_vec .else VECS+= bfd_elf32_bigarm_vec Modified: projects/armv6/gnu/usr.bin/cc/Makefile.inc ============================================================================== --- projects/armv6/gnu/usr.bin/cc/Makefile.inc Sat Jul 7 18:25:56 2012 (r238210) +++ projects/armv6/gnu/usr.bin/cc/Makefile.inc Sat Jul 7 19:12:15 2012 (r238211) @@ -26,9 +26,12 @@ CSTD?= gnu89 CFLAGS+= -DCROSS_COMPILE .endif -.if ${TARGET_ARCH} == "armeb" +.if ${TARGET_ARCH} == "armeb" || ${TARGET_ARCH} == "armv6eb" CFLAGS += -DTARGET_ENDIAN_DEFAULT=MASK_BIG_END .endif +.if ${TARGET_ARCH} == "armv6" || ${TARGET_ARCH} == "armv6eb" +CFLAGS += -DFREEBSD_ARCH_armv6 +.endif .if ${TARGET_CPUARCH} == "mips" .if ${TARGET_ARCH:Mmips*el} != "" Modified: projects/armv6/gnu/usr.bin/cc/Makefile.tgt ============================================================================== --- projects/armv6/gnu/usr.bin/cc/Makefile.tgt Sat Jul 7 18:25:56 2012 (r238210) +++ projects/armv6/gnu/usr.bin/cc/Makefile.tgt Sat Jul 7 19:12:15 2012 (r238211) @@ -4,7 +4,7 @@ # MACHINE_CPUARCH, but there's no easy way to export make functions... .if defined(TARGET_ARCH) -TARGET_CPUARCH=${TARGET_ARCH:C/mips(n32|64)?(el)?/mips/:C/armeb/arm/:C/powerpc64/powerpc/} +TARGET_CPUARCH=${TARGET_ARCH:C/mips(n32|64)?(el)?/mips/:C/arm(v6)?(eb)?/arm/:C/powerpc64/powerpc/} .else TARGET_CPUARCH=${MACHINE_CPUARCH} .endif @@ -17,7 +17,7 @@ TARGET_CPU_DEFAULT= MASK_GNU_AS|MASK_GNU .if ${TARGET_ARCH} == "sparc64" TARGET_CPU_DEFAULT= TARGET_CPU_ultrasparc .endif -.if ${TARGET_ARCH} == "armeb" || \ +.if ${TARGET_ARCH} == "armeb" || ${TARGET_ARCH} == "armv6eb" || \ (${TARGET_CPUARCH} == "mips" && ${TARGET_ARCH:Mmips*el} == "") TARGET_BIG_ENDIAN=t .endif Modified: projects/armv6/gnu/usr.bin/gdb/Makefile.inc ============================================================================== --- projects/armv6/gnu/usr.bin/gdb/Makefile.inc Sat Jul 7 18:25:56 2012 (r238210) +++ projects/armv6/gnu/usr.bin/gdb/Makefile.inc Sat Jul 7 19:12:15 2012 (r238211) @@ -20,7 +20,7 @@ OBJ_GDB= ${OBJ_ROOT}/gdb # MACHINE_CPUARCH, but there's no easy way to export make functions... .if defined(TARGET_ARCH) -TARGET_CPUARCH=${TARGET_ARCH:C/mips(n32|64)?(el)?/mips/:C/armeb/arm/:C/powerpc64/powerpc/} +TARGET_CPUARCH=${TARGET_ARCH:C/mips(n32|64)?(el)?/mips/:C/arm(v6)?(eb)?/arm/:C/powerpc64/powerpc/} .else TARGET_CPUARCH=${MACHINE_CPUARCH} .endif Modified: projects/armv6/gnu/usr.bin/gdb/libgdb/Makefile ============================================================================== --- projects/armv6/gnu/usr.bin/gdb/libgdb/Makefile Sat Jul 7 18:25:56 2012 (r238210) +++ projects/armv6/gnu/usr.bin/gdb/libgdb/Makefile Sat Jul 7 19:12:15 2012 (r238211) @@ -4,7 +4,7 @@ # MACHINE_CPUARCH, but there's no easy way to export make functions... .if defined(TARGET_ARCH) -TARGET_CPUARCH=${TARGET_ARCH:C/mips(n32|64)?(el)?/mips/:C/armeb/arm/:C/powerpc64/powerpc/} +TARGET_CPUARCH=${TARGET_ARCH:C/mips(n32|64)?(el)?/mips/:C/arm(v6)?(eb)?/arm/:C/powerpc64/powerpc/} .else TARGET_CPUARCH=${MACHINE_CPUARCH} .endif Modified: projects/armv6/share/mk/bsd.endian.mk ============================================================================== --- projects/armv6/share/mk/bsd.endian.mk Sat Jul 7 18:25:56 2012 (r238210) +++ projects/armv6/share/mk/bsd.endian.mk Sat Jul 7 19:12:15 2012 (r238211) @@ -4,12 +4,14 @@ ${MACHINE_ARCH} == "i386" || \ ${MACHINE_ARCH} == "ia64" || \ ${MACHINE_ARCH} == "arm" || \ + ${MACHINE_ARCH} == "armv6" || \ ${MACHINE_ARCH:Mmips*el} != "" TARGET_ENDIANNESS= 1234 .elif ${MACHINE_ARCH} == "powerpc" || \ ${MACHINE_ARCH} == "powerpc64" || \ ${MACHINE_ARCH} == "sparc64" || \ ${MACHINE_ARCH} == "armeb" || \ + ${MACHINE_ARCH} == "armv6eb" || \ ${MACHINE_ARCH:Mmips*} != "" TARGET_ENDIANNESS= 4321 .endif Modified: projects/armv6/share/mk/sys.mk ============================================================================== --- projects/armv6/share/mk/sys.mk Sat Jul 7 18:25:56 2012 (r238210) +++ projects/armv6/share/mk/sys.mk Sat Jul 7 19:12:15 2012 (r238211) @@ -13,7 +13,7 @@ unix ?= We run FreeBSD, not UNIX. # and/or endian. This is called MACHINE_CPU in NetBSD, but that's used # for something different in FreeBSD. # -MACHINE_CPUARCH=${MACHINE_ARCH:C/mips(n32|64)?(el)?/mips/:C/armeb/arm/:C/powerpc64/powerpc/} +MACHINE_CPUARCH=${MACHINE_ARCH:C/mips(n32|64)?(el)?/mips/:C/arm(v6)?(eb)?/arm/:C/powerpc64/powerpc/} .endif # If the special target .POSIX appears (without prerequisites or Modified: projects/armv6/sys/arm/arm/cpufunc_asm_armv7.S ============================================================================== --- projects/armv6/sys/arm/arm/cpufunc_asm_armv7.S Sat Jul 7 18:25:56 2012 (r238210) +++ projects/armv6/sys/arm/arm/cpufunc_asm_armv7.S Sat Jul 7 19:12:15 2012 (r238211) @@ -32,6 +32,8 @@ #include __FBSDID("$FreeBSD$"); + .cpu cortex-a8 + .Lcoherency_level: .word _C_LABEL(arm_cache_loc) .Lcache_type: Modified: projects/armv6/sys/arm/at91/std.at91 ============================================================================== --- projects/armv6/sys/arm/at91/std.at91 Sat Jul 7 18:25:56 2012 (r238210) +++ projects/armv6/sys/arm/at91/std.at91 Sat Jul 7 19:12:15 2012 (r238211) @@ -5,4 +5,3 @@ cpu CPU_ARM9 makeoptions CONF_CFLAGS=-mcpu=arm9 options PHYSADDR=0x20000000 options NO_EVENTTIMERS -options ARM_WANT_TP_ADDRESS Modified: projects/armv6/sys/arm/at91/std.at91sam9 ============================================================================== --- projects/armv6/sys/arm/at91/std.at91sam9 Sat Jul 7 18:25:56 2012 (r238210) +++ projects/armv6/sys/arm/at91/std.at91sam9 Sat Jul 7 19:12:15 2012 (r238211) @@ -8,5 +8,4 @@ options PHYSADDR=0x20000000 device at91sam9g20 device at91sam9260 options NO_EVENTTIMERS -options ARM_WANT_TP_ADDRESS Modified: projects/armv6/sys/arm/econa/std.econa ============================================================================== --- projects/armv6/sys/arm/econa/std.econa Sat Jul 7 18:25:56 2012 (r238210) +++ projects/armv6/sys/arm/econa/std.econa Sat Jul 7 19:12:15 2012 (r238211) @@ -14,4 +14,3 @@ options LOADERRAMADDR=0x00000000 options STARTUP_PAGETABLE_ADDR=0x00100000 options NO_EVENTTIMERS -options ARM_WANT_TP_ADDRESS Modified: projects/armv6/sys/arm/include/asm.h ============================================================================== --- projects/armv6/sys/arm/include/asm.h Sat Jul 7 18:25:56 2012 (r238210) +++ projects/armv6/sys/arm/include/asm.h Sat Jul 7 19:12:15 2012 (r238211) @@ -130,49 +130,52 @@ .stabs __STRING(_/**/sym),1,0,0,0 #endif /* __STDC__ */ +/* Exactly one of the __ARM_ARCH_*__ macros will be defined by the compiler. */ +/* The _ARM_ARCH_* macros are deprecated and will be removed soon. */ +/* This should be moved into another header so it can be used in + * both asm and C code. machine/asm.h cannot be included in C code. */ #if defined (__ARM_ARCH_7__) || defined (__ARM_ARCH_7A__) #define _ARM_ARCH_7 +#define _HAVE_ARMv7_INSTRUCTIONS 1 #endif -#if defined(_ARM_ARCH_7) || defined (__ARM_ARCH_6__) || \ - defined (__ARM_ARCH_6J__) +#if defined (_HAVE_ARMv7_INSTRUCTIONS) || defined (__ARM_ARCH_6__) || \ + defined (__ARM_ARCH_6J__) || defined (__ARM_ARCH_6K__) || \ + defined (__ARM_ARCH_6Z__) || defined (__ARM_ARCH_6ZK__) #define _ARM_ARCH_6 +#define _HAVE_ARMv6_INSTRUCTIONS 1 #endif -#if defined (_ARM_ARCH_6) || defined (__ARM_ARCH_5__) || \ - defined (__ARM_ARCH_5T__) || defined (__ARM_ARCH_5TE__) || \ +#if defined (_HAVE_ARMv6_INSTRUCTIONS) || defined (__ARM_ARCH_5TE__) || \ defined (__ARM_ARCH_5TEJ__) || defined (__ARM_ARCH_5E__) -#define _ARM_ARCH_5 +#define _ARM_ARCH_5E +#define _HAVE_ARMv5E_INSTRUCTIONS 1 #endif -#if defined (_ARM_ARCH_6) || defined(__ARM_ARCH_5TE__) || \ - defined(__ARM_ARCH_5TEJ__) || defined(__ARM_ARCH_5E__) -#define _ARM_ARCH_5E +#if defined (_HAVE_ARMv5E_INSTRUCTIONS) || defined (__ARM_ARCH_5__) || \ + defined (__ARM_ARCH_5T__) +#define _ARM_ARCH_5 +#define _HAVE_ARMv5_INSTRUCTIONS 1 #endif -#if defined (_ARM_ARCH_5) || defined (__ARM_ARCH_4T__) +#if defined (_HAVE_ARMv5_INSTRUCTIONS) || defined (__ARM_ARCH_4T__) #define _ARM_ARCH_4T +#define _HAVE_ARMv4T_INSTRUCTIONS 1 #endif +/* FreeBSD requires ARMv4, so this is always set. */ +#define _HAVE_ARMv4_INSTRUCTIONS 1 -#if defined (_ARM_ARCH_4T) +#if defined (_HAVE_ARMv4T_INSTRUCTIONS) # define RET bx lr # define RETeq bxeq lr # define RETne bxne lr -# ifdef __STDC__ -# define RETc(c) bx##c lr -# else -# define RETc(c) bx/**/c lr -# endif +# define RETc(c) bx##c lr #else # define RET mov pc, lr # define RETeq moveq pc, lr # define RETne movne pc, lr -# ifdef __STDC__ -# define RETc(c) mov##c pc, lr -# else -# define RETc(c) mov/**/c pc, lr -# endif +# define RETc(c) mov##c pc, lr #endif #endif /* !_MACHINE_ASM_H_ */ Modified: projects/armv6/sys/arm/include/asmacros.h ============================================================================== --- projects/armv6/sys/arm/include/asmacros.h Sat Jul 7 18:25:56 2012 (r238210) +++ projects/armv6/sys/arm/include/asmacros.h Sat Jul 7 19:12:15 2012 (r238211) @@ -40,6 +40,8 @@ #ifndef _MACHINE_ASMACROS_H_ #define _MACHINE_ASMACROS_H_ +#include + #ifdef _KERNEL #ifdef LOCORE Modified: projects/armv6/sys/arm/include/atomic.h ============================================================================== --- projects/armv6/sys/arm/include/atomic.h Sat Jul 7 18:25:56 2012 (r238210) +++ projects/armv6/sys/arm/include/atomic.h Sat Jul 7 19:12:15 2012 (r238211) @@ -58,14 +58,24 @@ #define F32_bit (1 << 6) /* FIQ disable */ #endif -/* XXX: Rethink for userland later as those won't be defined */ -#if ARM_ARCH_6 || ARM_ARCH_7A - +/* + * It would be nice to use _HAVE_ARMv6_INSTRUCTIONS from machine/asm.h + * here, but that header can't be included here because this is C + * code. I would like to move the _HAVE_ARMv6_INSTRUCTIONS definition + * out of asm.h so it can be used in both asm and C code. - kientzle@ + */ +#if defined (__ARM_ARCH_7__) || \ + defined (__ARM_ARCH_7A__) || \ + defined (__ARM_ARCH_6__) || \ + defined (__ARM_ARCH_6J__) || \ + defined (__ARM_ARCH_6K__) || \ + defined (__ARM_ARCH_6Z__) || \ + defined (__ARM_ARCH_6ZK__) static __inline void __do_dmb(void) { -#if ARM_ARCH_7A +#if defined (__ARM_ARCH_7__) || defined (__ARM_ARCH_7A__) __asm __volatile("dmb" : : : "memory"); #else __asm __volatile("mcr p15, 0, r0, c7, c10, 5" : : : "memory"); Modified: projects/armv6/sys/arm/include/param.h ============================================================================== --- projects/armv6/sys/arm/include/param.h Sat Jul 7 18:25:56 2012 (r238210) +++ projects/armv6/sys/arm/include/param.h Sat Jul 7 19:12:15 2012 (r238211) @@ -56,8 +56,12 @@ #define MACHINE "arm" #endif #ifndef MACHINE_ARCH +#ifdef __FreeBSD_ARCH_armv6__ +#define MACHINE_ARCH "armv6" +#else #define MACHINE_ARCH "arm" #endif +#endif #define MID_MACHINE MID_ARM6 #if defined(SMP) || defined(KLD_MODULE) Modified: projects/armv6/sys/arm/include/sysarch.h ============================================================================== --- projects/armv6/sys/arm/include/sysarch.h Sat Jul 7 18:25:56 2012 (r238210) +++ projects/armv6/sys/arm/include/sysarch.h Sat Jul 7 19:12:15 2012 (r238211) @@ -51,7 +51,13 @@ * of ldr/str rm,[rn, #4]). */ -#ifdef ARM_WANT_TP_ADDRESS +/* ARM_TP_ADDRESS is needed for processors that don't support + * the exclusive-access opcodes introduced with ARMv6K. */ +/* TODO: #if !defined(_HAVE_ARMv6K_INSTRUCTIONS) */ +#if !defined (__ARM_ARCH_7__) && \ + !defined (__ARM_ARCH_7A__) && \ + !defined (__ARM_ARCH_6K__) && \ + !defined (__ARM_ARCH_6ZK__) #define ARM_TP_ADDRESS (ARM_VECTORS_HIGH + 0x1000) #define ARM_RAS_START (ARM_TP_ADDRESS + 4) #define ARM_RAS_END (ARM_TP_ADDRESS + 8) Modified: projects/armv6/sys/arm/lpc/std.lpc ============================================================================== --- projects/armv6/sys/arm/lpc/std.lpc Sat Jul 7 18:25:56 2012 (r238210) +++ projects/armv6/sys/arm/lpc/std.lpc Sat Jul 7 19:12:15 2012 (r238211) @@ -12,4 +12,3 @@ makeoptions KERNPHYSADDR=0x80100000 options KERNPHYSADDR=0x80100000 makeoptions KERNVIRTADDR=0xc0100000 options KERNVIRTADDR=0xc0100000 -options ARM_WANT_TP_ADDRESS Modified: projects/armv6/sys/arm/mv/std.mv ============================================================================== --- projects/armv6/sys/arm/mv/std.mv Sat Jul 7 18:25:56 2012 (r238210) +++ projects/armv6/sys/arm/mv/std.mv Sat Jul 7 19:12:15 2012 (r238211) @@ -3,4 +3,3 @@ files "../mv/files.mv" cpu CPU_ARM9E makeoptions CONF_CFLAGS="-march=armv5te" -options ARM_WANT_TP_ADDRESS Modified: projects/armv6/sys/arm/s3c2xx0/std.s3c2410 ============================================================================== --- projects/armv6/sys/arm/s3c2xx0/std.s3c2410 Sat Jul 7 18:25:56 2012 (r238210) +++ projects/armv6/sys/arm/s3c2xx0/std.s3c2410 Sat Jul 7 19:12:15 2012 (r238211) @@ -5,4 +5,3 @@ cpu CPU_ARM9 makeoptions CONF_CFLAGS=-mcpu=arm920t options NO_EVENTTIMERS -options ARM_WANT_TP_ADDRESS Modified: projects/armv6/sys/arm/sa11x0/std.sa11x0 ============================================================================== --- projects/armv6/sys/arm/sa11x0/std.sa11x0 Sat Jul 7 18:25:56 2012 (r238210) +++ projects/armv6/sys/arm/sa11x0/std.sa11x0 Sat Jul 7 19:12:15 2012 (r238211) @@ -6,4 +6,3 @@ cpu CPU_SA1110 makeoptions KERNPHYSADDR=0xc0000000 makeoptions KERNVIRTADDR=0xc0000000 options NO_EVENTTIMERS -options ARM_WANT_TP_ADDRESS Modified: projects/armv6/sys/arm/ti/std.ti ============================================================================== --- projects/armv6/sys/arm/ti/std.ti Sat Jul 7 18:25:56 2012 (r238210) +++ projects/armv6/sys/arm/ti/std.ti Sat Jul 7 19:12:15 2012 (r238211) @@ -1,8 +1,5 @@ # $FreeBSD$ -# This should be armv7-a but current gcc doesn't support it -makeoptions CONF_CFLAGS=-D_ARM_ARCH_6 - cpu CPU_CORTEXA files "../ti/files.ti" Modified: projects/armv6/sys/arm/xscale/std.xscale ============================================================================== --- projects/armv6/sys/arm/xscale/std.xscale Sat Jul 7 18:25:56 2012 (r238210) +++ projects/armv6/sys/arm/xscale/std.xscale Sat Jul 7 19:12:15 2012 (r238211) @@ -1,4 +1,3 @@ # $FreeBSD$ options ARM_CACHE_LOCK_ENABLE options NO_EVENTTIMERS -options ARM_WANT_TP_ADDRESS Modified: projects/armv6/sys/conf/kern.pre.mk ============================================================================== --- projects/armv6/sys/conf/kern.pre.mk Sat Jul 7 18:25:56 2012 (r238210) +++ projects/armv6/sys/conf/kern.pre.mk Sat Jul 7 19:12:15 2012 (r238211) @@ -6,7 +6,7 @@ .include # backwards compat option for older systems. -MACHINE_CPUARCH?=${MACHINE_ARCH:C/mips(n32|64)?(el)?/mips/:C/armeb/arm/:C/powerpc64/powerpc/} +MACHINE_CPUARCH?=${MACHINE_ARCH:C/mips(n32|64)?(el)?/mips/:C/arm(v6)?(eb)?/arm/:C/powerpc64/powerpc/} # Can be overridden by makeoptions or /etc/make.conf KERNEL_KO?= kernel Modified: projects/armv6/sys/conf/kmod.mk ============================================================================== --- projects/armv6/sys/conf/kmod.mk Sat Jul 7 18:25:56 2012 (r238210) +++ projects/armv6/sys/conf/kmod.mk Sat Jul 7 19:12:15 2012 (r238211) @@ -61,7 +61,7 @@ # # backwards compat option for older systems. -MACHINE_CPUARCH?=${MACHINE_ARCH:C/mips(n32|64)?(el)?/mips/:C/armeb/arm/:C/powerpc64/powerpc/} +MACHINE_CPUARCH?=${MACHINE_ARCH:C/mips(n32|64)?(el)?/mips/:C/arm(v6)?(eb)?/arm/:C/powerpc64/powerpc/} AWK?= awk KMODLOAD?= /sbin/kldload Modified: projects/armv6/usr.bin/xlint/Makefile.inc ============================================================================== --- projects/armv6/usr.bin/xlint/Makefile.inc Sat Jul 7 18:25:56 2012 (r238210) +++ projects/armv6/usr.bin/xlint/Makefile.inc Sat Jul 7 19:12:15 2012 (r238211) @@ -8,7 +8,7 @@ WARNS?= 0 # These assignments duplicate much of the functionality of # MACHINE_CPUARCH, but there's no easy way to export make functions... .if defined(TARGET_ARCH) -TARGET_CPUARCH= ${TARGET_ARCH:C/mips(n32|64)?(el)?/mips/:C/armeb/arm/} +TARGET_CPUARCH= ${TARGET_ARCH:C/mips(n32|64)?(el)?/mips/:C/arm(v6)?(eb)?/arm/} .else TARGET_CPUARCH= ${MACHINE_CPUARCH} TARGET_ARCH= ${MACHINE_ARCH}