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...
Tim Kientzle
kientzle at FreeBSD.org
Sat Jul 7 19:12:17 UTC 2012
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 <machine/asm.h>
__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 <machine/asm.h>
+
#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 <bsd.own.mk>
# 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}
More information about the svn-src-projects
mailing list