version 1.71, 2019/06/02 13:32:38
|
version 1.72, 2019/06/12 08:29:41
|
Line 51 set and the aarch64 architecture, built
|
Line 51 set and the aarch64 architecture, built
|
(Note also that armv8 is the first architecture to support aarch64, so |
(Note also that armv8 is the first architecture to support aarch64, so |
this will not be an issue until at least armv9.) |
this will not be an issue until at least armv9.) |
|
|
#### ABI types |
|
|
|
There are two basic ABIs on ARM. One, called oabi, assumed a |
|
particular kind of hardware floating point (FPA). This results in |
|
faulting any floating-point instructions for kernel emulation on a |
|
vast number of CPus, which is very slow. A newer one, called eabi, |
|
has two variants. Both have stricter alignment rules, tending to 8 |
|
byte rather than 4 bytes for 8-byte types (but actually read the specs |
|
if you care). The one without "hf" emulates floating point without |
|
causing traps/emulation, and "hf" uses VFP instructions, which are |
|
present on modern CPUs. See the |
|
[TS-7200](https://wiki.embeddedarm.com/wiki/EABI_vs_OABI) and |
|
[Debian](https://wiki.debian.org/ArmEabiPort) documentation. |
|
|
|
Now, EABI is normal, and OABI is crufty. The only real reason NetBSD |
|
retains OABI support is binary compatibility with older releases. The |
|
"arm" and "armeb" MACHINE_ARCH targets are OABI; the rest of the |
|
targets, all having "earm" are EABI. |
|
|
|
\todo CHECK THIS: The "aarch64" MACHINE_ARCH target is an EABI variant. |
|
|
|
### Relationship of MACHINE_ARCH to official ARM terminology |
|
|
|
Note that these are all little endian, and have big endian variants |
|
with a "eb" suffix. Unless otherwise noted, all use the A32 or |
|
aarch32 instruction set. |
|
|
|
[[!table data=<<EOT |
|
MACHINE_ARCH |bits | ARM architecture version |ABI |
|
arm |32 |\todo ? |oabi |
|
earm |32 |alias for earmv5 (\todo why?) |eabi |
|
earmv4 |32 |armv4 (no thumb, so ok on strongarm) |eabi |
|
earmv5 |32 |armv5t |eabi |
|
earmv6 |32 |armv6 |eabi |
|
earmv7 |32 |armv7 |eabi |
|
aarch64 |64 |armv8 in aarch64 mode |\todo ? eabi |
|
EOT]] |
|
|
|
\todo Explain why, if we have armv5, we still have earm as a MACHINE_ARCH. |
|
|
|
\todo Explain why aarch64 is a MACHINE_ARCH, when it seems like it |
|
should be something like armv8hf_64. |
|
|
|
\todo Explain if MACHINE_ARCH values correspond to a particular |
|
argument to some CPU selection command in gcc (and/or clang). |
|
|
|
### Kernels and userland |
### Kernels and userland |
|
|
The evbarm userland can be used on any system that can run code of the |
The evbarm userland can be used on any system that can run code of the |