Make armv7 as a new MACHINE_ARCH.
Copy all the places we do armv6 and add armv7 as basically an
alias. clang appears to generate code for armv7 by default. armv7 hard
float isn't supported by the the in-tree gcc, so it hasn't been
updated to have a new default.
Support armv7 as a new valid MACHINE_ARCH (and by extension
TARGET_ARCH).
Add armv7 to the universe build.
Differential Revision: https://reviews.freebsd.org/D12010
r238211:
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.
Submitted by: Tim Kientzle <kientzle@freebsd.org>
TARGET_BIG_ENDIAN is now completely dead, except where it was
originally supposed to be used (internally in the toolchain building).
TARGET_ARCH has changed in three cases:
(1) Little endian mips has changed to mipsel.
(2) Big endian mips has changed to mipseb.
(3) Big endian arm has changed to armeb.
Some additional changes are needed to make 'make universe' work on arm
and mips after this change, so those are commented out for now.
UPDATING information will be forthcoming. Any remaining rough edges
will be hammered out in -current.
tc-sparc-fixed.c entirely, since the fix has been integrated into
contrib/binutils/gas/config/tc-sparc.c by upstream. Define TARGET_OS
in addition to the other TARGET_XXX defines.
a variety of bugs in binutils related to handling of 64-bit PPC ELF,
provides a GCC configuration for 64-bit PowerPC on FreeBSD, and
associated build systems tweaks.
Obtained from: projects/ppc64
This includes removing all vestiges of the old not-really supported
ability to build cross tools targeting non-FreeBSD systems, such as
m68k Lynx and NetBSD. Move as much duplicated code from platform
Makefiles into the shared Makefiles. Add a simple mechanism for
specifying ELF 'ldscripts'. Also share as many .h files as possible
(now a single bfd.h vs. one per platform).
The target machine is represented by TARGET_ARCH. MACHINE_ARCH always
represents the host machine. When TARGET_ARCH is not defined, it is
assumed to be equal to MACHINE_ARCH. This means that we're building a
native toolset by default. We're creating cross-compilation tools when
MACHINE_ARCH != TARGET_ARCH.
TARGET_ARCH is defined when building binutils as part of the bootstrap
build and is set to reflect the architecture we're currently cross-
building. With this change binutils is ready for cross-building.
All Makefiles now use MACHINE_ARCH for the target architecture.
Unification is required for cross-building.
Tags added to:
sys/boot/Makefile
sys/boot/arc/loader/Makefile
sys/kern/Makefile
usr.bin/cpp/Makefile
usr.bin/gcore/Makefile
usr.bin/truss/Makefile
usr.bin/gcore/Makefile:
fixed typo: MACHINDE -> MACHINE_ARCH
tidy up the logic that works out which sub-directories to build.
The new directories with freebsdelf suffixes now have freebsd suffixes
after a repo move by Peter at the request of David O'Brien.
Unlike the unisex architecutres we've had so far, mips is bisexual.
These tools can produce either byte sex, and the compiler/make
determines the proper gender to use. Otherwise, we'd have to have had
mipsel and mipseb in all the places that we have just mips. And there
are other complications with doing that (binutils doesn't like to
build mips tools without both byte genders, it seems).
Introduced BINUTIL_ARCH so that other bisexual architectures can a
generic mechanism.
We cannot just define MACHINE_ARCH as mips because we need to
differentiate big and little endian types of binaries. Discussions on
freebsd-arch have hashed out this issue (and the parallel libc
issues). NetBSD is moving towards mipsel and mipseb for their two
flavors of mips ports (in time for 1.4, if this change hasn't already
been accomplished).
I've been building i386 worlds with this tree for a three months with
these files in place with no ill effects.
gas for each target format. So for m68k targets that means several
gases. I wanted a m68k gas for VxWorks which uses aout in sun3 big
endian format, cross compiled on i386 under FreeBSD using libraries
supplied by DEC and intended by them for cross compilation on Alpha
under OSF/1. And it actually works!
support more than one architecture at a time, build as from the
default for the host and if CROSS_TOOLS defines other architectures,
build them as as_${arch}
support building it for variant architectures. It was already
becoming clear that the former structure was too rigid and didn't
scale well.
The usual sort of makefile magic arranges to .include an architecture
specific makefile "Makefile.${MACHINE_ARCH}" in each directory
where it exists. Also, sources will be found in each subdirectory
"${MACHINE_ARCH}" that exists. This is all taken care of automatically
by the top level "Makefile.inc0".
This all seems to work right for the i386 now. I have also converted
those alpha pieces already present to the new schema as best I
could.
Also: change the BINDIR on the i386 to /usr/libexec/elf for "ar"
and "ranlib". They are not object format independent enough to
put into /usr/bin.