Introduce basic support for ARM64 CPU affinity

CPU affinity fields declared in MPIDR_EL1 describe
four affinity levels for each CPU core in the system creating
unique CPU address: <Aff3>.<Aff2>.<Aff1>.<Aff0>
Introduce __cpu_affinity[] array indexed by CPU number as seen
by the system and accessor macro cpu_affinity().
Current implementation supports only single CPU cluster which means
that only Aff0 is expected to change whereas Aff3-Aff1 are expected
to stay unchanged.
Use already defined CPU functions and macros to extract pcpu pointer

Since there are get_mpidr() and CPU_AFF() we can use them
to minimize code redefinitons and link related data
structures for future development (SMP).
Add 64KB page definitions for ARM64
Introduce basic support for ARM Generic Interrupts Controller v3.0

- Enable GIC CPU interface access via system registers in locore.
  The necessary configuration is performed in EL2.
- Add preliminary GICv3 driver:
  - distributor, re-distributo and CPU interface configuration
  - basic interrupts handling (PPIs and SPIs only)

- Missing bits:
  - "redistributor-regions" support
  - SGI support
  - ITS
  - selected interrupt configuration (pic_config method)
Add initial support for Cavium Thunder PCIe root complex.

	- Parse Device Tree to get mem ranges.
	- Add API to read/write to PCIe configuration space.
	- Device mem mapping and BAR initialization incomplete.
	- MSI-X interrupt handling incomplete.
Add CPU part name for Cavium Thunder

Name selected according to DTS description for "cpu" node.
Improve ARM64 CPU identification.

- Keep CPU description per-CPU (indexed by cpuid)
- Rework Implementer/PartNum relation
  - need to have separate PartNum tables for each implementer
Default to enabling elftoolchain tools for arm64

In-tree binutils does not support arm64. We still rely on the
devel/aarch64-freebsd port for as, ld, objcopy, objdump, readelf.
Marker change. Above needs reviewing, below is on arm64-dev.

No need to review this change, it's only here to show which
changes are in arm64-dev vs abtsys.
Fix pmap_invalidate_range to always invalidate

Dynamic libraries need this.

While here ass sched_pin/sched_unpin calls around the invalidation
functions. These will be needed when we have SMP to ensure we don't
get moved to a different core during the invalidation process.
Clean up setjmp:

 * __longjmp appears to be for linuxthreads, we can bring in the fix
   later if needed.
 * Add a magic value to the start of the buffer to tell which function
   created it.
 * Use this value for siglongjmp.
 * Backup x1 in longjmp when calling sigprocmask as we need it later.
 * Fix typos in <machine/setjmp.h>
Add the definition of Elf32_Auxinfo

This lets us build libprocstat
Add the needed defines for CDDL code

These are enough to build the libraries.
Allow shell scripts to work

They exposed a problem with pmap where anything run from them could
attempt to access the wrong physical page. This adds extra tlb
invalidation and moves one call before the unlock.

There is still a bug where, if the call to pmap_invalidate_all is removed
from pmap_alloc_l3 it will still crash, however I haven't managed to
track down why this is the case, even after adding invalidation to all
placed the l3 tables are changed.
Implment signal support

This adds the needed kernel changes to support signals.
Add brk and sbrk

A few things need these to build.
Add the last two simplefs ops
Update to build msun for arm64

 * The long double type on arm64 is quad-precision
 * Add fenv.c to export the required symbols
 * Fix _fpmath.h to be the correct size and pull out the correct bits

_fpmath.h is now based on the arm version.
Add initial support for the threading libraries

Untested but will help world to be built.
Update csu to use data passed to it by rtld