xref: /freebsd/share/man/man7/arch.7 (revision 55ed6718c2eab08cc7187dd986cfc022ba451a4a)
1e6c0d5c3SKonstantin Belousov.\" Copyright (c) 2016-2017 The FreeBSD Foundation. All rights reserved.
2df9330b5SEd Maste.\"
3df9330b5SEd Maste.\" This documentation was created by Ed Maste under sponsorship of
4df9330b5SEd Maste.\" The FreeBSD Foundation.
5df9330b5SEd Maste.\"
6df9330b5SEd Maste.\" Redistribution and use in source and binary forms, with or without
7df9330b5SEd Maste.\" modification, are permitted provided that the following conditions
8df9330b5SEd Maste.\" are met:
9df9330b5SEd Maste.\" 1. Redistributions of source code must retain the above copyright
10df9330b5SEd Maste.\"    notice, this list of conditions and the following disclaimer.
11df9330b5SEd Maste.\" 2. Redistributions in binary form must reproduce the above copyright
12df9330b5SEd Maste.\"    notice, this list of conditions and the following disclaimer in the
13df9330b5SEd Maste.\"    documentation and/or other materials provided with the distribution.
14df9330b5SEd Maste.\"
15df9330b5SEd Maste.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND
16df9330b5SEd Maste.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17df9330b5SEd Maste.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18df9330b5SEd Maste.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE
19df9330b5SEd Maste.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20df9330b5SEd Maste.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21df9330b5SEd Maste.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22df9330b5SEd Maste.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23df9330b5SEd Maste.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24df9330b5SEd Maste.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25df9330b5SEd Maste.\" SUCH DAMAGE.
26df9330b5SEd Maste.\"
27df9330b5SEd Maste.\" $FreeBSD$
28df9330b5SEd Maste.\"
29e6f6c36cSEd Maste.Dd March 28, 2020
30df9330b5SEd Maste.Dt ARCH 7
31df9330b5SEd Maste.Os
32df9330b5SEd Maste.Sh NAME
33df9330b5SEd Maste.Nm arch
34df9330b5SEd Maste.Nd Architecture-specific details
35df9330b5SEd Maste.Sh DESCRIPTION
36df9330b5SEd MasteDifferences between CPU architectures and platforms supported by
37df9330b5SEd Maste.Fx .
38de6fc272SKonstantin Belousov.Ss Introduction
3925b526e6SKonstantin BelousovThis document is a quick reference of key ABI details of
4025b526e6SKonstantin Belousov.Fx
4125b526e6SKonstantin Belousovarchitecture ports.
4225b526e6SKonstantin BelousovFor full details consult the processor-specific ABI supplement
4325b526e6SKonstantin Belousovdocumentation.
4425b526e6SKonstantin Belousov.Pp
45dddb1576SKonstantin BelousovIf not explicitly mentioned, sizes are in bytes.
4645801499SEd MasteThe architecture details in this document apply to
478b3c5418SEd Maste.Fx 11.0
4845801499SEd Masteand later, unless otherwise noted.
49de6fc272SKonstantin Belousov.Pp
50e6c0d5c3SKonstantin Belousov.Fx
517748ab43SKonstantin Belousovuses a flat address space.
527748ab43SKonstantin BelousovVariables of types
53e6c0d5c3SKonstantin Belousov.Vt unsigned long ,
54e6c0d5c3SKonstantin Belousov.Vt uintptr_t ,
55de6fc272SKonstantin Belousovand
56de6fc272SKonstantin Belousov.Vt size_t
577748ab43SKonstantin Belousovand pointers all have the same representation.
58de6fc272SKonstantin Belousov.Pp
59de6fc272SKonstantin BelousovIn order to maximize compatibility with future pointer integrity mechanisms,
60de6fc272SKonstantin Belousovmanipulations of pointers as integers should be performed via
61de6fc272SKonstantin Belousov.Vt uintptr_t
62de6fc272SKonstantin Belousovor
63de6fc272SKonstantin Belousov.Vt intptr_t
64de6fc272SKonstantin Belousovand no other types.
65de6fc272SKonstantin BelousovIn particular,
66de6fc272SKonstantin Belousov.Vt long
67de6fc272SKonstantin Belousovand
68de6fc272SKonstantin Belousov.Vt ptrdiff_t
69de6fc272SKonstantin Belousovshould be avoided.
70de6fc272SKonstantin Belousov.Pp
71098150fbSWarner LoshOn some architectures, e.g.,
72de6fc272SKonstantin Belousov.Dv powerpc
73de6fc272SKonstantin Belousovand AIM variants of
74de6fc272SKonstantin Belousov.Dv powerpc64 ,
75de6fc272SKonstantin Belousovthe kernel uses a separate address space.
76de6fc272SKonstantin BelousovOn other architectures, kernel and a user mode process share a
77de6fc272SKonstantin Belousovsingle address space.
78de6fc272SKonstantin BelousovThe kernel is located at the highest addresses.
79de6fc272SKonstantin Belousov.Pp
80de6fc272SKonstantin BelousovOn each architecture, the main user mode thread's stack starts near
81de6fc272SKonstantin Belousovthe highest user address and grows down.
8245801499SEd Maste.Pp
8345801499SEd Maste.Fx
8445801499SEd Mastearchitecture support varies by release.
8545801499SEd MasteThis table shows the first
8645801499SEd Maste.Fx
8745801499SEd Masterelease to support each architecture, and, for discontinued
8845801499SEd Mastearchitectures, the final release.
8945801499SEd Maste.Pp
90ddc9d6e5SEd Maste.Bl -column -offset indent "Architecture" "Initial Release" "Final Release"
9145801499SEd Maste.It Sy Architecture Ta Sy Initial Release Ta Sy Final Release
92f38b2297SIan Lepore.It aarch64     Ta 11.0
9304794d24SJohn Baldwin.It alpha       Ta 3.2   Ta 6.4
9445801499SEd Maste.It amd64       Ta 5.1
952fe25d16SEd Maste.It arm         Ta 6.0   Ta 12.x
96e9d6b13dSWarner Losh.It armeb       Ta 8.0   Ta 11.x
9745801499SEd Maste.It armv6       Ta 10.0
9813368c38SWarner Losh.It armv7       Ta 12.0
991f3de6dcSEd Maste.It ia64        Ta 5.0   Ta 10.4
10045801499SEd Maste.It i386        Ta 1.0
10145801499SEd Maste.It mips        Ta 8.0
10245801499SEd Maste.It mipsel      Ta 9.0
10345801499SEd Maste.It mipselhf    Ta 12.0
10445801499SEd Maste.It mipshf      Ta 12.0
10545801499SEd Maste.It mipsn32     Ta 9.0
10645801499SEd Maste.It mips64      Ta 9.0
10745801499SEd Maste.It mips64el    Ta 9.0
10845801499SEd Maste.It mips64elhf  Ta 12.0
10945801499SEd Maste.It mips64hf    Ta 12.0
1107fb14275SEd Maste.It pc98        Ta 2.2   Ta 11.x
11145801499SEd Maste.It powerpc     Ta 6.0
11245801499SEd Maste.It powerpcspe  Ta 12.0
11345801499SEd Maste.It powerpc64   Ta 6.0
11445801499SEd Maste.It riscv64     Ta 12.0
11545801499SEd Maste.It riscv64sf   Ta 12.0
1164940bf26SEd Maste.It sparc64     Ta 5.0   Ta 12.x
11745801499SEd Maste.El
118df9330b5SEd Maste.Ss Type sizes
119e6c0d5c3SKonstantin BelousovAll
120e6c0d5c3SKonstantin Belousov.Fx
121e6c0d5c3SKonstantin Belousovarchitectures use some variant of the ELF (see
122de6fc272SKonstantin Belousov.Xr elf 5 )
123de6fc272SKonstantin Belousov.Sy Application Binary Interface
124de6fc272SKonstantin Belousov(ABI) for the machine processor.
125de6fc272SKonstantin BelousovAll supported ABIs can be divided into two groups:
126de6fc272SKonstantin Belousov.Bl -tag -width "Dv ILP32"
127de6fc272SKonstantin Belousov.It Dv ILP32
128de6fc272SKonstantin Belousov.Vt int ,
129de6fc272SKonstantin Belousov.Vt long ,
130de6fc272SKonstantin Belousov.Vt void *
131de6fc272SKonstantin Belousovtypes machine representations all have 4-byte size.
132de6fc272SKonstantin Belousov.It Dv LP64
133de6fc272SKonstantin Belousov.Vt int
134de6fc272SKonstantin Belousovtype machine representation uses 4 bytes,
135de6fc272SKonstantin Belousovwhile
136de6fc272SKonstantin Belousov.Vt long
137de6fc272SKonstantin Belousovand
138de6fc272SKonstantin Belousov.Vt void *
139de6fc272SKonstantin Belousovare 8 bytes.
140de6fc272SKonstantin Belousov.El
14115d641f0SJohn Baldwin.Pp
142fcfe2d66SIan LeporeSome machines support more than one
143e6c0d5c3SKonstantin Belousov.Fx
144e6c0d5c3SKonstantin BelousovABI.
145de6fc272SKonstantin BelousovTypically these are 64-bit machines, where the
146de6fc272SKonstantin Belousov.Dq native
147de6fc272SKonstantin Belousov.Dv LP64
148de6fc272SKonstantin Belousovexecution environment is accompanied by the
149de6fc272SKonstantin Belousov.Dq legacy
150de6fc272SKonstantin Belousov.Dv ILP32
151fcfe2d66SIan Leporeenvironment, which was the historical 32-bit predecessor for 64-bit evolution.
152de6fc272SKonstantin BelousovExamples are:
153ddc9d6e5SEd Maste.Bl -column -offset indent "powerpc64" "ILP32 counterpart"
154de6fc272SKonstantin Belousov.It Sy LP64        Ta Sy ILP32 counterpart
155de6fc272SKonstantin Belousov.It Dv amd64       Ta Dv i386
156de6fc272SKonstantin Belousov.It Dv powerpc64   Ta Dv powerpc
157de6fc272SKonstantin Belousov.It Dv mips64*     Ta Dv mips*
15814601230SOlivier Houchard.It Dv aarch64     Ta Dv armv6/armv7
159de6fc272SKonstantin Belousov.El
16015d641f0SJohn Baldwin.Pp
161f38b2297SIan Lepore.Dv aarch64
16214601230SOlivier Houchardwill support execution of
163de6fc272SKonstantin Belousov.Dv armv6
16413368c38SWarner Loshor
16513368c38SWarner Losh.Dv armv7
16614601230SOlivier Houchardbinaries if the CPU implements
167de6fc272SKonstantin Belousov.Dv AArch32
16814601230SOlivier Houchardexecution state, however
16914601230SOlivier Houchard.Dv armv5
17014601230SOlivier Houchardbinaries aren't supported.
171de6fc272SKonstantin Belousov.Pp
172dddb1576SKonstantin BelousovOn all supported architectures:
173df9330b5SEd Maste.Bl -column -offset -indent "long long" "Size"
174df9330b5SEd Maste.It Sy Type Ta Sy Size
175df9330b5SEd Maste.It short Ta 2
176df9330b5SEd Maste.It int Ta 4
177df9330b5SEd Maste.It long Ta sizeof(void*)
178df9330b5SEd Maste.It long long Ta 8
179df9330b5SEd Maste.It float Ta 4
180df9330b5SEd Maste.It double Ta 8
181df9330b5SEd Maste.El
18215d641f0SJohn Baldwin.Pp
1837748ab43SKonstantin BelousovIntegers are represented in two's complement.
184de6fc272SKonstantin BelousovAlignment of integer and pointer types is natural, that is,
185e6c0d5c3SKonstantin Belousovthe address of the variable must be congruent to zero modulo the type size.
186e6c0d5c3SKonstantin BelousovMost ILP32 ABIs, except
187e6c0d5c3SKonstantin Belousov.Dv arm ,
188e6c0d5c3SKonstantin Belousovrequire only 4-byte alignment for 64-bit integers.
189dddb1576SKonstantin Belousov.Pp
190dddb1576SKonstantin BelousovMachine-dependent type sizes:
191ddc9d6e5SEd Maste.Bl -column -offset indent "Architecture" "void *" "long double" "time_t"
192dddb1576SKonstantin Belousov.It Sy Architecture Ta Sy void * Ta Sy long double Ta Sy time_t
193f38b2297SIan Lepore.It aarch64     Ta 8 Ta 16 Ta 8
1946554316cSKonstantin Belousov.It amd64       Ta 8 Ta 16 Ta 8
1956554316cSKonstantin Belousov.It armv6       Ta 4 Ta  8 Ta 8
196bad7e1e8SWarner Losh.It armv7       Ta 4 Ta  8 Ta 8
1976554316cSKonstantin Belousov.It i386        Ta 4 Ta 12 Ta 4
1986554316cSKonstantin Belousov.It mips        Ta 4 Ta  8 Ta 8
1996554316cSKonstantin Belousov.It mipsel      Ta 4 Ta  8 Ta 8
2006554316cSKonstantin Belousov.It mipselhf    Ta 4 Ta  8 Ta 8
2016554316cSKonstantin Belousov.It mipshf      Ta 4 Ta  8 Ta 8
2026554316cSKonstantin Belousov.It mipsn32     Ta 4 Ta  8 Ta 8
2036554316cSKonstantin Belousov.It mips64      Ta 8 Ta  8 Ta 8
2046554316cSKonstantin Belousov.It mips64el    Ta 8 Ta  8 Ta 8
2056554316cSKonstantin Belousov.It mips64elhf  Ta 8 Ta  8 Ta 8
2066554316cSKonstantin Belousov.It mips64hf    Ta 8 Ta  8 Ta 8
207fbcf7bcdSJustin Hibbits.It powerpc     Ta 4 Ta  8 Ta 8
208fbcf7bcdSJustin Hibbits.It powerpcspe  Ta 4 Ta  8 Ta 8
2096554316cSKonstantin Belousov.It powerpc64   Ta 8 Ta  8 Ta 8
2104dd67957SJohn Baldwin.It riscv64     Ta 8 Ta 16 Ta 8
2114dd67957SJohn Baldwin.It riscv64sf   Ta 8 Ta 16 Ta 8
212df9330b5SEd Maste.El
213dddb1576SKonstantin Belousov.Pp
214dddb1576SKonstantin Belousov.Sy time_t
21549ccd3feSEd Masteis 8 bytes on all supported architectures except i386.
216df9330b5SEd Maste.Ss Endianness and Char Signedness
217ddc9d6e5SEd Maste.Bl -column -offset indent "Architecture" "Endianness" "char Signedness"
218df9330b5SEd Maste.It Sy Architecture Ta Sy Endianness Ta Sy char Signedness
219f38b2297SIan Lepore.It aarch64     Ta little Ta unsigned
220df9330b5SEd Maste.It amd64       Ta little Ta   signed
221df9330b5SEd Maste.It armv6       Ta little Ta unsigned
22213368c38SWarner Losh.It armv7       Ta little Ta unsigned
223df9330b5SEd Maste.It i386        Ta little Ta   signed
2248395cdc1SEd Maste.It mips        Ta big    Ta   signed
2258395cdc1SEd Maste.It mipsel      Ta little Ta   signed
2265bca2215SRuslan Bukin.It mipselhf    Ta little Ta   signed
2275bca2215SRuslan Bukin.It mipshf      Ta big    Ta   signed
2288395cdc1SEd Maste.It mipsn32     Ta big    Ta   signed
2298395cdc1SEd Maste.It mips64      Ta big    Ta   signed
230df9330b5SEd Maste.It mips64el    Ta little Ta   signed
2315bca2215SRuslan Bukin.It mips64elhf  Ta little Ta   signed
2325bca2215SRuslan Bukin.It mips64hf    Ta big    Ta   signed
233df9330b5SEd Maste.It powerpc     Ta big    Ta unsigned
234002cc1f9SJustin Hibbits.It powerpcspe  Ta big    Ta unsigned
235df9330b5SEd Maste.It powerpc64   Ta big    Ta unsigned
2364dd67957SJohn Baldwin.It riscv64     Ta little Ta   signed
2374dd67957SJohn Baldwin.It riscv64sf   Ta little Ta   signed
238df9330b5SEd Maste.El
239df9330b5SEd Maste.Ss Page Size
240ddc9d6e5SEd Maste.Bl -column -offset indent "Architecture" "Page Sizes"
241df9330b5SEd Maste.It Sy Architecture Ta Sy Page Sizes
242f38b2297SIan Lepore.It aarch64     Ta 4K, 2M, 1G
243df9330b5SEd Maste.It amd64       Ta 4K, 2M, 1G
244780586e8SEd Maste.It armv6       Ta 4K, 1M
24513368c38SWarner Losh.It armv7       Ta 4K, 1M
246df9330b5SEd Maste.It i386        Ta 4K, 2M (PAE), 4M
247df9330b5SEd Maste.It mips        Ta 4K
248df9330b5SEd Maste.It mipsel      Ta 4K
2495bca2215SRuslan Bukin.It mipselhf    Ta 4K
2505bca2215SRuslan Bukin.It mipshf      Ta 4K
251df9330b5SEd Maste.It mipsn32     Ta 4K
252df9330b5SEd Maste.It mips64      Ta 4K
253df9330b5SEd Maste.It mips64el    Ta 4K
2545bca2215SRuslan Bukin.It mips64elhf  Ta 4K
2555bca2215SRuslan Bukin.It mips64hf    Ta 4K
256df9330b5SEd Maste.It powerpc     Ta 4K
257002cc1f9SJustin Hibbits.It powerpcspe  Ta 4K
258df9330b5SEd Maste.It powerpc64   Ta 4K
2594dd67957SJohn Baldwin.It riscv64     Ta 4K
2604dd67957SJohn Baldwin.It riscv64sf   Ta 4K
261df9330b5SEd Maste.El
262df9330b5SEd Maste.Ss Floating Point
263ddc9d6e5SEd Maste.Bl -column -offset indent "Architecture" "float, double" "long double"
264df9330b5SEd Maste.It Sy Architecture Ta Sy float, double Ta Sy long double
265f38b2297SIan Lepore.It aarch64     Ta hard Ta soft, quad precision
266df9330b5SEd Maste.It amd64       Ta hard Ta hard, 80 bit
2678b3c5418SEd Maste.It armv6       Ta hard Ta hard, double precision
2688b3c5418SEd Maste.It armv7       Ta hard Ta hard, double precision
269df9330b5SEd Maste.It i386        Ta hard Ta hard, 80 bit
270df9330b5SEd Maste.It mips        Ta soft Ta identical to double
271df9330b5SEd Maste.It mipsel      Ta soft Ta identical to double
2725bca2215SRuslan Bukin.It mipselhf    Ta hard Ta identical to double
2735bca2215SRuslan Bukin.It mipshf      Ta hard Ta identical to double
274df9330b5SEd Maste.It mipsn32     Ta soft Ta identical to double
275df9330b5SEd Maste.It mips64      Ta soft Ta identical to double
276df9330b5SEd Maste.It mips64el    Ta soft Ta identical to double
2775bca2215SRuslan Bukin.It mips64elhf  Ta hard Ta identical to double
2785bca2215SRuslan Bukin.It mips64hf    Ta hard Ta identical to double
279df9330b5SEd Maste.It powerpc     Ta hard Ta hard, double precision
280002cc1f9SJustin Hibbits.It powerpcspe  Ta hard Ta hard, double precision
281df9330b5SEd Maste.It powerpc64   Ta hard Ta hard, double precision
282cb8c6df4SKevin Lo.It riscv64     Ta hard Ta hard, double precision
283cb8c6df4SKevin Lo.It riscv64sf   Ta soft Ta soft, double precision
284df9330b5SEd Maste.El
2854ef28065SEd Maste.Ss Default Tool Chain
286ce0d5fb4SEd Maste.Fx
287ce0d5fb4SEd Masteuses
2884715c31eSEd Maste.Xr clang 1
289ce0d5fb4SEd Masteas the default compiler on all supported CPU architectures,
290e6f6c36cSEd MasteLLVM's
291e6f6c36cSEd Maste.Xr ld.lld 1
292e6f6c36cSEd Masteas the default linker, and
293e6f6c36cSEd MasteELF Tool Chain binary utilities such as
294ce0d5fb4SEd Maste.Xr objcopy 1
2954715c31eSEd Masteand
296ce0d5fb4SEd Maste.Xr readelf 1 .
297c81e4a69SWarner Losh.Ss MACHINE_ARCH vs MACHINE_CPUARCH vs MACHINE
2987b692b8eSWarner Losh.Dv MACHINE_CPUARCH
2997b692b8eSWarner Loshshould be preferred in Makefiles when the generic
3007b692b8eSWarner Losharchitecture is being tested.
3017b692b8eSWarner Losh.Dv MACHINE_ARCH
3027b692b8eSWarner Loshshould be preferred when there is something specific to a particular type of
3037b692b8eSWarner Losharchitecture where there is a choice of many, or could be a choice of many.
304c81e4a69SWarner LoshUse
305c81e4a69SWarner Losh.Dv MACHINE
306c81e4a69SWarner Loshwhen referring to the kernel, interfaces dependent on a specific type of kernel
307c81e4a69SWarner Loshor similar things like boot sequences.
3087b692b8eSWarner Losh.Bl -column -offset indent "Dv MACHINE" "Dv MACHINE_CPUARCH" "Dv MACHINE_ARCH"
3097b692b8eSWarner Losh.It Dv MACHINE Ta Dv MACHINE_CPUARCH Ta Dv MACHINE_ARCH
3107b692b8eSWarner Losh.It arm64 Ta aarch64 Ta aarch64
3117b692b8eSWarner Losh.It amd64 Ta amd64 Ta amd64
312bad7e1e8SWarner Losh.It arm Ta arm Ta armv6, armv7
3137b692b8eSWarner Losh.It i386 Ta i386 Ta i386
3147b692b8eSWarner Losh.It mips Ta mips Ta mips, mipsel, mips64, mips64el, mipshf, mipselhf, mips64elhf, mipsn32
3157b692b8eSWarner Losh.It powerpc Ta powerpc Ta powerpc, powerpcspe, powerpc64
3167b692b8eSWarner Losh.It riscv Ta riscv Ta riscv64, riscv64sf
3177b692b8eSWarner Losh.El
318df9330b5SEd Maste.Ss Predefined Macros
319df9330b5SEd MasteThe compiler provides a number of predefined macros.
320df9330b5SEd MasteSome of these provide architecture-specific details and are explained below.
321df9330b5SEd MasteOther macros, including those required by the language standard, are not
322df9330b5SEd Masteincluded here.
323df9330b5SEd Maste.Pp
324df9330b5SEd MasteThe full set of predefined macros can be obtained with this command:
325df9330b5SEd Maste.Bd -literal -offset indent
3268e71e112SEd Mastecc -x c -dM -E /dev/null
327df9330b5SEd Maste.Ed
328df9330b5SEd Maste.Pp
329df9330b5SEd MasteCommon type size and endianness macros:
330ddc9d6e5SEd Maste.Bl -column -offset indent "BYTE_ORDER" "Meaning"
331df9330b5SEd Maste.It Sy Macro Ta Sy Meaning
332df9330b5SEd Maste.It Dv __LP64__ Ta 64-bit (8-byte) long and pointer, 32-bit (4-byte) int
333df9330b5SEd Maste.It Dv __ILP32__ Ta 32-bit (4-byte) int, long and pointer
334df9330b5SEd Maste.It Dv BYTE_ORDER Ta Either Dv BIG_ENDIAN or Dv LITTLE_ENDIAN .
3351859c867SKonstantin Belousov.Dv PDP11_ENDIAN
3361859c867SKonstantin Belousovis not used on
3371859c867SKonstantin Belousov.Fx .
338df9330b5SEd Maste.El
339df9330b5SEd Maste.Pp
340df9330b5SEd MasteArchitecture-specific macros:
341ddc9d6e5SEd Maste.Bl -column -offset indent "Architecture" "Predefined macros"
342df9330b5SEd Maste.It Sy Architecture Ta Sy Predefined macros
343f38b2297SIan Lepore.It aarch64     Ta Dv __aarch64__
344df9330b5SEd Maste.It amd64       Ta Dv __amd64__, Dv __x86_64__
345df9330b5SEd Maste.It armv6       Ta Dv __arm__, Dv __ARM_ARCH >= 6
34613368c38SWarner Losh.It armv7       Ta Dv __arm__, Dv __ARM_ARCH >= 7
347df9330b5SEd Maste.It i386        Ta Dv __i386__
348df9330b5SEd Maste.It mips        Ta Dv __mips__, Dv __MIPSEB__, Dv __mips_o32
349df9330b5SEd Maste.It mipsel      Ta Dv __mips__, Dv __mips_o32
3505bca2215SRuslan Bukin.It mipselhf    Ta Dv __mips__, Dv __mips_o32
3515bca2215SRuslan Bukin.It mipshf      Ta Dv __mips__, Dv __MIPSEB__, Dv __mips_o32
352df9330b5SEd Maste.It mipsn32     Ta Dv __mips__, Dv __MIPSEB__, Dv __mips_n32
353df9330b5SEd Maste.It mips64      Ta Dv __mips__, Dv __MIPSEB__, Dv __mips_n64
354df9330b5SEd Maste.It mips64el    Ta Dv __mips__, Dv __mips_n64
3555bca2215SRuslan Bukin.It mips64elhf  Ta Dv __mips__, Dv __mips_n64
3565bca2215SRuslan Bukin.It mips64hf    Ta Dv __mips__, Dv __MIPSEB__, Dv __mips_n64
357df9330b5SEd Maste.It powerpc     Ta Dv __powerpc__
358002cc1f9SJustin Hibbits.It powerpcspe  Ta Dv __powerpc__, Dv __SPE__
359df9330b5SEd Maste.It powerpc64   Ta Dv __powerpc__, Dv __powerpc64__
360ca20f8ecSRuslan Bukin.It riscv64     Ta Dv __riscv, Dv __riscv_xlen == 64
361ca20f8ecSRuslan Bukin.It riscv64sf   Ta Dv __riscv, Dv __riscv_xlen == 64
362df9330b5SEd Maste.El
363f84d8f0cSEd Maste.Pp
364f84d8f0cSEd MasteCompilers may define additional variants of architecture-specific macros.
365f84d8f0cSEd MasteThe macros above are preferred for use in
366f84d8f0cSEd Maste.Fx .
367691e6ea8SWarner Losh.Ss Important Xr make 1 variables
368691e6ea8SWarner LoshMost of the externally settable variables are defined in the
369691e6ea8SWarner Losh.Xr build 7
370691e6ea8SWarner Loshman page.
371691e6ea8SWarner LoshThese variables are not otherwise documented and are used extensively
372691e6ea8SWarner Loshin the build system.
37315d641f0SJohn Baldwin.Bl -tag -width "MACHINE_CPUARCH"
37415d641f0SJohn Baldwin.It Dv MACHINE
3752e4b206fSJohn BaldwinRepresents the hardware platform.
376691e6ea8SWarner LoshThis is the same as the native platform's
377691e6ea8SWarner Losh.Xr uname 1
378691e6ea8SWarner Losh.Fl m
379691e6ea8SWarner Loshoutput.
380691e6ea8SWarner LoshIt defines both the userland / kernel interface, as well as the
381691e6ea8SWarner Loshbootloader / kernel interface.
382691e6ea8SWarner LoshIt should only be used in these contexts.
383691e6ea8SWarner LoshEach CPU architecture may have multiple hardware platforms it supports
384691e6ea8SWarner Loshwhere
385691e6ea8SWarner Losh.Dv MACHINE
386691e6ea8SWarner Loshdiffers among them.
387691e6ea8SWarner LoshIt is used to collect together all the files from
388691e6ea8SWarner Losh.Xr config 8
389691e6ea8SWarner Loshto build the kernel.
390691e6ea8SWarner LoshIt is often the same as
391691e6ea8SWarner Losh.Dv MACHINE_ARCH
392691e6ea8SWarner Loshjust as one CPU architecture can be implemented by many different
393691e6ea8SWarner Loshhardware platforms, one hardware platform may support multiple CPU
394691e6ea8SWarner Losharchitecture family members, though with different binaries.
395691e6ea8SWarner LoshFor example,
396691e6ea8SWarner Losh.Dv MACHINE
397691e6ea8SWarner Loshof i386 supported the IBM-AT hardware platform while the
398691e6ea8SWarner Losh.Dv MACHINE
399691e6ea8SWarner Loshof pc98 supported the Japanese company NEC's PC-9801 and PC-9821
400691e6ea8SWarner Loshhardware platforms.
401691e6ea8SWarner LoshBoth of these hardware platforms supported only the
402691e6ea8SWarner Losh.Dv MACHINE_ARCH
403691e6ea8SWarner Loshof i386 where they shared a common ABI, except for certain kernel /
404691e6ea8SWarner Loshuserland interfaces relating to underlying hardware platform
405691e6ea8SWarner Loshdifferences in bus architecture, device enumeration and boot interface.
406ffab3cb6SWarner LoshGenerally,
407ffab3cb6SWarner Losh.Dv MACHINE
408ffab3cb6SWarner Loshshould only be used in src/sys and src/stand or in system imagers or
409ffab3cb6SWarner Loshinstallers.
41015d641f0SJohn Baldwin.It Dv MACHINE_ARCH
41115d641f0SJohn BaldwinRepresents the CPU processor architecture.
412691e6ea8SWarner LoshThis is the same as the native platforms
413691e6ea8SWarner Losh.Xr uname 1
414691e6ea8SWarner Losh.Fl p
415691e6ea8SWarner Loshoutput.
416691e6ea8SWarner LoshIt defines the CPU instruction family supported.
417691e6ea8SWarner LoshIt may also encode a variation in the byte ordering of multi-byte
418691e6ea8SWarner Loshintegers (endian).
419691e6ea8SWarner LoshIt may also encode a variation in the size of the integer or pointer.
420691e6ea8SWarner LoshIt may also encode a ISA revision.
421691e6ea8SWarner LoshIt may also encode hard versus soft floating point ABI and usage.
422320bd864SWarner LoshIt may also encode a variant ABI when the other factors do not
423320bd864SWarner Loshuniquely define the ABI (e.g., MIPS' n32 ABI).
424691e6ea8SWarner LoshIt, along with
425320bd864SWarner Losh.Dv MACHINE ,
426320bd864SWarner Loshdefines the ABI used by the system.
427691e6ea8SWarner LoshFor example, the MIPS CPU processor family supports 9 different
428098150fbSWarner Loshcombinations encoding pointer size, endian and hard versus soft float (for
429691e6ea8SWarner Losh8 combinations) as well as N32 (which only ever had one variation of
430691e6ea8SWarner Loshall these).
431691e6ea8SWarner LoshGenerally, the plain CPU name specifies the most common (or at least
432691e6ea8SWarner Loshfirst) variant of the CPU.
433bad7e1e8SWarner LoshThis is why mips and mips64 imply 'big endian' while 'armv6' and 'armv7'
434691e6ea8SWarner Loshimply little endian.
435691e6ea8SWarner LoshIf we ever were to support the so-called x32 ABI (using 32-bit
436691e6ea8SWarner Loshpointers on the amd64 architecture), it would most likely be encoded
437691e6ea8SWarner Loshas amd64-x32.
438d56b465cSJohn BaldwinIt is unfortunate that amd64 specifies the 64-bit evolution of the x86
439691e6ea8SWarner Loshplatform (it matches the 'first rule') as everybody else uses x86_64.
440691e6ea8SWarner LoshThere is no standard name for the processor: each OS selects its own
441691e6ea8SWarner Loshconventions.
44215d641f0SJohn Baldwin.It Dv MACHINE_CPUARCH
44315d641f0SJohn BaldwinRepresents the source location for a given
444ffab3cb6SWarner Losh.Dv MACHINE_ARCH .
4457b692b8eSWarner LoshIt is generally the common prefix for all the MACHINE_ARCH that
4467b692b8eSWarner Loshshare the same implementation, though 'riscv' breaks this rule.
447ffab3cb6SWarner LoshFor example,
448ffab3cb6SWarner Losh.Dv MACHINE_CPUARCH
449ffab3cb6SWarner Loshis defined to be mips for all the flavors of mips that we support
450ffab3cb6SWarner Loshsince we support them all with a shared set of sources.
451bf1dea9bSWarner LoshWhile amd64 and i386 are closely related, MACHINE_CPUARCH is not x86
452bf1dea9bSWarner Loshfor them.
453*55ed6718SBenedict ReuschlingThe
454*55ed6718SBenedict Reuschling.Fx
455*55ed6718SBenedict Reuschlingsource base supports amd64 and i386 with two
456bf1dea9bSWarner Loshdistinct source bases living in subdirectories named amd64 and i386
457bf1dea9bSWarner Losh(though behind the scenes there's some sharing that fits into this
458bf1dea9bSWarner Loshframework).
45915d641f0SJohn Baldwin.It Dv CPUTYPE
46015d641f0SJohn BaldwinSets the flavor of
461691e6ea8SWarner Losh.Dv MACHINE_ARCH
462691e6ea8SWarner Loshto build.
463691e6ea8SWarner LoshIt is used to optimize the build for a specific CPU / core that the
464691e6ea8SWarner Loshbinaries run on.
465098150fbSWarner LoshGenerally, this does not change the ABI, though it can be a fine line
466691e6ea8SWarner Loshbetween optimization for specific cases.
46715d641f0SJohn Baldwin.It Dv TARGET
46815d641f0SJohn BaldwinUsed to set
469098150fbSWarner Losh.Dv MACHINE
470098150fbSWarner Loshin the top level Makefile for cross building.
471691e6ea8SWarner LoshUnused outside of that scope.
472691e6ea8SWarner LoshIt is not passed down to the rest of the build.
473098150fbSWarner LoshMakefiles outside of the top level should not use it at all (though
474691e6ea8SWarner Loshsome have their own private copy for hysterical raisons).
47515d641f0SJohn Baldwin.It Dv TARGET_ARCH
47615d641f0SJohn BaldwinUsed to set
477098150fbSWarner Losh.Dv MACHINE_ARCH
478098150fbSWarner Loshby the top level Makefile for cross building.
479691e6ea8SWarner LoshLike
48015d641f0SJohn Baldwin.Dv TARGET ,
48115d641f0SJohn Baldwinit is unused outside of that scope.
482691e6ea8SWarner Losh.El
483df9330b5SEd Maste.Sh SEE ALSO
484df9330b5SEd Maste.Xr src.conf 5 ,
485df9330b5SEd Maste.Xr build 7
486df9330b5SEd Maste.Sh HISTORY
487df9330b5SEd MasteAn
488df9330b5SEd Maste.Nm
489df9330b5SEd Mastemanual page appeared in
4902af3ea6bSEd Maste.Fx 11.1 .
491