Index: chapter02/creatingpartition.xml
===================================================================
--- chapter02/creatingpartition.xml	(revision 4640b37d9680598de7979b830c0c9dc05615d9cd)
+++ chapter02/creatingpartition.xml	(revision a747ea2a67e0e70d5addb5bc957b4315934939ae)
@@ -105,22 +105,4 @@
 
     <sect3>
-    <title>The Grub Bios Partition</title>
-
-    <para>If the <emphasis>boot disk</emphasis> has been partitioned with a
-    GUID Partition Table (GPT), then a small, typically 1 MB, partition must be
-    created if it does not already exist.  This partition is not formatted, but
-    must be available for GRUB to use during installation of the boot
-    loader. This partition will normally be labeled 'BIOS Boot' if using
-    <command>fdisk</command> or have a code of <emphasis>EF02</emphasis> if
-    using the <command>gdisk</command> command.</para>
-
-    <note><para>The Grub Bios partition must be on the drive that the BIOS
-    uses to boot the system.  This is not necessarily the drive that holds
-    the LFS root partition. The disks on a system may use different
-    partition table types. The necessity of the Grub Bios partition depends
-    only on the partition table type of the boot disk.</para></note>
-    </sect3>
-
-    <sect3>
     <title>Convenience Partitions</title>
 
Index: chapter04/addinguser.xml
===================================================================
--- chapter04/addinguser.xml	(revision 4640b37d9680598de7979b830c0c9dc05615d9cd)
+++ chapter04/addinguser.xml	(revision a747ea2a67e0e70d5addb5bc957b4315934939ae)
@@ -81,8 +81,5 @@
   <systemitem class="username">lfs</systemitem> the owner:</para>
 
-<screen><userinput>chown -v lfs $LFS/{usr{,/*},lib,var,etc,bin,sbin,tools}
-case $(uname -m) in
-  x86_64) chown -v lfs $LFS/lib64 ;;
-esac</userinput></screen>
+<screen><userinput>chown -v lfs $LFS/{usr{,/*},lib,var,etc,bin,sbin,tools}</userinput></screen>
 
 <note><para>In some host systems, the following <command>su</command> command does not complete
Index: chapter04/creatingminlayout.xml
===================================================================
--- chapter04/creatingminlayout.xml	(revision 4640b37d9680598de7979b830c0c9dc05615d9cd)
+++ chapter04/creatingminlayout.xml	(revision a747ea2a67e0e70d5addb5bc957b4315934939ae)
@@ -26,9 +26,5 @@
 for i in bin lib sbin; do
   ln -sv usr/$i $LFS/$i
-done
-
-case $(uname -m) in
-  x86_64) mkdir -pv $LFS/lib64 ;;
-esac</userinput></screen>
+done</userinput></screen>
 
   <para>Programs in <xref linkend="chapter-temporary-tools"/> will be compiled
Index: chapter05/gcc-pass1.xml
===================================================================
--- chapter05/gcc-pass1.xml	(revision 4640b37d9680598de7979b830c0c9dc05615d9cd)
+++ chapter05/gcc-pass1.xml	(revision a747ea2a67e0e70d5addb5bc957b4315934939ae)
@@ -63,13 +63,9 @@
 mv -v mpc-&mpc-version; mpc</userinput></screen>
 
-    <para>On x86_64 hosts, set the default directory name for
+    <para>On ARM64 hosts, set the default directory name for
     64-bit libraries to <quote>lib</quote>:</para>
 
-<screen><userinput remap="pre">case $(uname -m) in
-  x86_64)
-    sed -e '/m64=/s/lib64/lib/' \
-        -i.orig gcc/config/i386/t-linux64
- ;;
-esac</userinput></screen>
+<screen><userinput remap="pre">sed -e '/lp64=/s/lib64/lib/' \
+    -i.orig gcc/config/aarch64/t-aarch64-linux</userinput></screen>
 
     <para>The GCC documentation recommends building GCC
@@ -160,6 +156,5 @@
         <term><parameter>--disable-multilib</parameter></term>
         <listitem>
-          <para>On x86_64, LFS does not support a multilib configuration.
-          This switch is harmless for x86.</para>
+          <para>On ARM64, LFS does not support a multilib configuration.</para>
         </listitem>
       </varlistentry>
Index: chapter05/glibc.xml
===================================================================
--- chapter05/glibc.xml	(revision 4640b37d9680598de7979b830c0c9dc05615d9cd)
+++ chapter05/glibc.xml	(revision a747ea2a67e0e70d5addb5bc957b4315934939ae)
@@ -43,25 +43,4 @@
   <sect2 role="installation">
     <title>Installation of Glibc</title>
-
-    <para>First, create a symbolic link for LSB compliance. Additionally,
-    for x86_64, create a compatibility symbolic link required for proper
-    operation of the dynamic library loader:</para>
-
-<screen><userinput remap="pre">case $(uname -m) in
-    i?86)   ln -sfv ld-linux.so.2 $LFS/lib/ld-lsb.so.3
-    ;;
-    x86_64) ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64
-            ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64/ld-lsb-x86-64.so.3
-    ;;
-esac</userinput></screen>
-
-    <note>
-      <para>
-        The above command is correct.  The <command>ln</command> command has
-        several syntactic versions, so be sure to check
-        <command>info coreutils ln</command> and <filename>ln(1)</filename>
-        before reporting what may appear to be an error.
-      </para>
-    </note>
 
     <para>Fix an issue building Glibc with parallel jobs and make-4.4
@@ -207,8 +186,8 @@
       and the output of the last command will be of the form:</para>
 
-<screen><computeroutput>[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]</computeroutput></screen>
-
-      <para>Note that for 32-bit machines, the interpreter name will be
-      <filename>/lib/ld-linux.so.2</filename>.</para>
+<screen><computeroutput>[Requesting program interpreter: /lib/ld-linux-aarch64.so.1]</computeroutput></screen>
+
+      <para>Note that for big-endian machines, the interpreter name will be
+	  <filename>/lib/ld-linux-aarch64_be.so.1</filename>.</para>
 
       <para>If the output is not as shown above, or there is no output at all,
Index: chapter06/gcc-pass2.xml
===================================================================
--- chapter06/gcc-pass2.xml	(revision 4640b37d9680598de7979b830c0c9dc05615d9cd)
+++ chapter06/gcc-pass2.xml	(revision a747ea2a67e0e70d5addb5bc957b4315934939ae)
@@ -58,12 +58,9 @@
 mv -v mpc-&mpc-version; mpc</userinput></screen>
 
-    <para>If building on x86_64, change the default directory name for 64-bit
-    libraries to <quote>lib</quote>:</para>
+    <para>On ARM64 hosts, set the default directory name for
+    64-bit libraries to <quote>lib</quote>:</para>
 
-<screen><userinput remap="pre">case $(uname -m) in
-  x86_64)
-    sed -e '/m64=/s/lib64/lib/' -i.orig gcc/config/i386/t-linux64
-  ;;
-esac</userinput></screen>
+<screen><userinput remap="pre">sed -e '/lp64=/s/lib64/lib/' \
+    -i.orig gcc/config/aarch64/t-aarch64-linux</userinput></screen>
 
     <para>Override the building rule of libgcc and libstdc++ headers, to
Index: chapter07/changingowner.xml
===================================================================
--- chapter07/changingowner.xml	(revision 4640b37d9680598de7979b830c0c9dc05615d9cd)
+++ chapter07/changingowner.xml	(revision a747ea2a67e0e70d5addb5bc957b4315934939ae)
@@ -34,8 +34,5 @@
   command:</para>
 
-<screen><userinput>chown -R root:root $LFS/{usr,lib,var,etc,bin,sbin,tools}
-case $(uname -m) in
-  x86_64) chown -R root:root $LFS/lib64 ;;
-esac</userinput></screen>
+<screen><userinput>chown -R root:root $LFS/{usr,lib,var,etc,bin,sbin,tools}</userinput></screen>
 
 </sect1>
Index: chapter08/binutils.xml
===================================================================
--- chapter08/binutils.xml	(revision 4640b37d9680598de7979b830c0c9dc05615d9cd)
+++ chapter08/binutils.xml	(revision a747ea2a67e0e70d5addb5bc957b4315934939ae)
@@ -139,6 +139,6 @@
           ultimately be located) is set to <filename
           class="directory">$(exec_prefix)/$(target_alias)</filename>. For
-          example, x86_64 machines would expand that to <filename
-          class="directory">/usr/x86_64-pc-linux-gnu</filename>. Because this is
+          example, ARM64 machines would expand that to <filename
+          class="directory">/usr/aarch64-unknown-linux-gnu</filename>. Because this is
           a custom system, this target-specific directory in <filename
           class="directory">/usr</filename> is not required. <filename
@@ -165,7 +165,5 @@
 <screen><userinput remap="test">grep '^FAIL:' $(find -name '*.log')</userinput></screen>
 
-    <para>Twelve tests fail in the gold test suite when the
-    <option>--enable-default-pie</option> and
-    <option>--enable-default-ssp</option> options are passed to GCC.
+    <para>
     <!-- Caused by egrep deprecation.  Note that we don't "patch" temp grep.
          And it seems unworthy to add a sed into temp grep just for one test
@@ -173,5 +171,5 @@
          anyway.)
          Will be fixed in 2.40 (upstream commit 67d1991). -->
-    The test named <filename>ar with versioned solib</filename> is also
+    The test named <filename>ar with versioned solib</filename> is
     known to fail.
     <!-- https://sourceware.org/bugzilla/show_bug.cgi?id=29107 -->
Index: chapter08/expect.xml
===================================================================
--- chapter08/expect.xml	(revision 4640b37d9680598de7979b830c0c9dc05615d9cd)
+++ chapter08/expect.xml	(revision a747ea2a67e0e70d5addb5bc957b4315934939ae)
@@ -48,4 +48,10 @@
   <sect2 role="installation">
     <title>Installation of Expect</title>
+
+    <para>Update two config scripts to allow building this package for
+    AArch64:</para>
+
+<screen><userinput remap="pre">tar -C tclconfig -xf ../autoconf-&autoconf-version;.tar.xz --strip-components=2 \
+    autoconf-&autoconf-version;/build-aux/config.{guess,sub}</userinput></screen>
 
     <para>Prepare Expect for compilation:</para>
Index: chapter08/findutils.xml
===================================================================
--- chapter08/findutils.xml	(revision 4640b37d9680598de7979b830c0c9dc05615d9cd)
+++ chapter08/findutils.xml	(revision a747ea2a67e0e70d5addb5bc957b4315934939ae)
@@ -46,18 +46,8 @@
     <para>Prepare Findutils for compilation:</para>
 
-<screen><userinput remap="configure">case $(uname -m) in
-    i?86)   TIME_T_32_BIT_OK=yes ./configure --prefix=/usr --localstatedir=/var/lib/locate ;;
-    x86_64) ./configure --prefix=/usr --localstatedir=/var/lib/locate ;;
-esac</userinput></screen>
+<screen><userinput remap="configure">./configure --prefix=/usr --localstatedir=/var/lib/locate</userinput></screen>
 
     <variablelist>
       <title>The meaning of the configure options:</title>
-
-      <varlistentry>
-        <term><command>TIME_32_BIT_OK=yes</command></term>
-        <listitem>
-          <para>This setting is needed for building on a 32 bit system.</para>
-        </listitem>
-      </varlistentry>
 
       <varlistentry>
Index: chapter08/gcc.xml
===================================================================
--- chapter08/gcc.xml	(revision 4640b37d9680598de7979b830c0c9dc05615d9cd)
+++ chapter08/gcc.xml	(revision a747ea2a67e0e70d5addb5bc957b4315934939ae)
@@ -55,13 +55,9 @@
     <screen><userinput remap="pre">patch -Np1 -i ../&gcc-upstream-fixes-patch;</userinput></screen>
 -->
-    <para>If building on x86_64, change the default directory name for 64-bit
-    libraries to <quote>lib</quote>:</para>
-
-<screen><userinput remap="pre">case $(uname -m) in
-  x86_64)
-    sed -e '/m64=/s/lib64/lib/' \
-        -i.orig gcc/config/i386/t-linux64
-  ;;
-esac</userinput></screen>
+    <para>On ARM64 hosts, set the default directory name for
+    64-bit libraries to <quote>lib</quote>:</para>
+
+<screen><userinput remap="pre">sed -e '/lp64=/s/lib64/lib/' \
+    -i.orig gcc/config/aarch64/t-aarch64-linux</userinput></screen>
 
     <para>The GCC documentation recommends building GCC in a dedicated build directory:</para>
@@ -161,11 +157,49 @@
     <ulink url="https://gcc.gnu.org/ml/gcc-testresults/"/>.</para>
 
-    <para>Eleven tests in the i386 test suite for the gcc compiler are known to FAIL.
-    It's because the test files do not account for the
+    <para>In gcc tests, the tests related to
+    <filename>fuse_adrp_add_1.c</filename>,
+    <filename>pr63304_1.c</filename>,
+    <filename>pr70120-2.c</filename>,
+    <filename>pr78733.c</filename>,
+    <filename>pr78796.c</filename>,
+    <filename>pr79041-2.c</filename>,
+    <filename>pr94530.c</filename>,
+    <filename>pr94577.c</filename>,
+    <filename>reload-valid-spoff.c</filename>, and
+    many <filename>aapcs64</filename> tests are known to fail.
+    They are because the test files do not account for the
     <parameter>--enable-default-pie</parameter> option.</para>
 
-    <para>Four tests related to PR100400 may be reported
-    as both XPASS and FAIL when testing the g++ compiler; the test file
+    <para>In gcc tests, the tests related to
+    <filename>pr104005.c</filename>,
+    <filename>pr103147-10.C</filename>,
+    <filename>shrink_wrap_1.c</filename>,
+    <filename>stack-check-cfa-1.c</filename>,
+    <filename>stack-check-cfa-2.c</filename>,
+    <filename>test_frame_17.c</filename>, and
+    many <filename>sve/pcs</filename> tests are known
+    to fail.  The g++ test related to <filename>pr103147-10.C</filename>
+    is known to fail.  They are because the test files do not account for
+    the <parameter>--enable-default-ssp</parameter> option.</para>
+
+    <para>In g++, four tests related to PR100400 are known to be reported
+    as both XPASS and FAIL.  It's because the test file for this known issue
     is not well written.</para>
+
+    <!-- Already known via gcc-testresults@gcc.gnu.org -->
+    <para>On ARM64,
+    four g++ tests related to <filename>Waddress-5.C</filename>,
+    twelve g++ tests related to <filename>attrs-10.C</filename>,
+    four g++ tests related to <filename>declare-simd-8.C</filename>,
+    one gcc tests related to <filename>ssa-dom-thread-7.c</filename>,
+    one gcc tests related to <filename>fcsel_1.c</filename>,
+    one gcc tests related to <filename>mgeneral-regs_3.c</filename>, and
+    four gcc tests related to <filename>vqdmlalh_laneq*.c</filename>
+    are known to fail.</para>
+
+    <!-- Need further investigation -->
+    <para>Many gcc and g++ tests related to hwasan are known to fail.
+    And, two tests related to <filename>thread_leak1.c</filename> are known
+    to fail for both gcc and g++.</para>
 
     <para>A few unexpected failures cannot always be avoided. The GCC developers
@@ -224,5 +258,5 @@
   platform-specific differences in the dynamic linker name):</para>
 
-<screen><computeroutput>[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]</computeroutput></screen>
+<screen><computeroutput>[Requesting program interpreter: /lib/ld-linux-aarch64.so.1]</computeroutput></screen>
 
   <para>Now make sure that we're set up to use the correct start files:</para>
@@ -232,7 +266,7 @@
   <para>The output of the last command should be:</para>
 
-<screen><computeroutput>/usr/lib/gcc/x86_64-pc-linux-gnu/&gcc-version;/../../../../lib/Scrt1.o succeeded
-/usr/lib/gcc/x86_64-pc-linux-gnu/&gcc-version;/../../../../lib/crti.o succeeded
-/usr/lib/gcc/x86_64-pc-linux-gnu/&gcc-version;/../../../../lib/crtn.o succeeded</computeroutput></screen>
+<screen><computeroutput>/usr/lib/gcc/aarch64-unknown-linux-gnu/&gcc-version;/../../../../lib/Scrt1.o succeeded
+/usr/lib/gcc/aarch64-unknown-linux-gnu/&gcc-version;/../../../../lib/crti.o succeeded
+/usr/lib/gcc/aarch64-unknown-linux-gnu/&gcc-version;/../../../../lib/crtn.o succeeded</computeroutput></screen>
 
   <para>Depending on your machine architecture, the above may differ slightly.
@@ -251,7 +285,7 @@
 
 <screen><computeroutput>#include &lt;...&gt; search starts here:
- /usr/lib/gcc/x86_64-pc-linux-gnu/&gcc-version;/include
+ /usr/lib/gcc/aarch64-unknown-linux-gnu/&gcc-version;/include
  /usr/local/include
- /usr/lib/gcc/x86_64-pc-linux-gnu/&gcc-version;/include-fixed
+ /usr/lib/gcc/aarch64-unknown-linux-gnu/&gcc-version;/include-fixed
  /usr/include</computeroutput></screen>
 
@@ -266,9 +300,9 @@
   be ignored, but otherwise the output of the last command should be:</para>
 
-<screen><computeroutput>SEARCH_DIR("/usr/x86_64-pc-linux-gnu/lib64")
+<screen><computeroutput>SEARCH_DIR("/usr/aarch64-unknown-linux-gnu/lib64")
 SEARCH_DIR("/usr/local/lib64")
 SEARCH_DIR("/lib64")
 SEARCH_DIR("/usr/lib64")
-SEARCH_DIR("/usr/x86_64-pc-linux-gnu/lib")
+SEARCH_DIR("/usr/aarch64-unknown-linux-gnu/lib")
 SEARCH_DIR("/usr/local/lib")
 SEARCH_DIR("/lib")
@@ -302,5 +336,5 @@
   platform-specific differences in dynamic linker name):</para>
 
-<screen><computeroutput>found ld-linux-x86-64.so.2 at /usr/lib/ld-linux-x86-64.so.2</computeroutput></screen>
+<screen><computeroutput>found ld-linux-aarch64.so.1 at /usr/lib/ld-linux-aarch64.so.1</computeroutput></screen>
 
   <para>If the output does not appear as shown above or is not received
Index: chapter08/glibc.xml
===================================================================
--- chapter08/glibc.xml	(revision 4640b37d9680598de7979b830c0c9dc05615d9cd)
+++ chapter08/glibc.xml	(revision a747ea2a67e0e70d5addb5bc957b4315934939ae)
@@ -447,5 +447,5 @@
 
     <para>By default, the dynamic loader (<filename
-    class="libraryfile">/lib/ld-linux.so.2</filename>) searches through
+    class="libraryfile">/lib/ld-linux-aarch64.so.1</filename>) searches through
     <filename class="directory">/usr/lib</filename> for dynamic libraries
     that are needed by programs as they are run. However, if there are
@@ -495,9 +495,9 @@
         <seg>gencat, getconf, getent, iconv, iconvconfig, ldconfig,
         ldd, lddlibc4,
-        ld.so (symlink to ld-linux-x86-64.so.2 or ld-linux.so.2),
+        ld.so (symlink to ld-linux-aarch64[_be].so.1),
         locale, localedef, makedb, mtrace, nscd,
         pcprofiledump, pldd, sln, sotruss, sprof, tzselect, xtrace,
         zdump, and zic</seg>
-        <seg>ld-linux-x86-64.so.2, ld-linux.so.2,
+        <seg>ld-linux-aarch64[_be].so.1,
         libBrokenLocale.{a,so}, libanl.{a,so},
         libc.{a,so}, libc_nonshared.a, libc_malloc_debug.so,
Index: chapter08/gmp.xml
===================================================================
--- chapter08/gmp.xml	(revision 4640b37d9680598de7979b830c0c9dc05615d9cd)
+++ chapter08/gmp.xml	(revision a747ea2a67e0e70d5addb5bc957b4315934939ae)
@@ -41,13 +41,4 @@
   <sect2 role="installation">
     <title>Installation of GMP</title>
-
-    <note>
-      <para>If you are building for 32-bit x86, but you have a CPU which is
-      capable of running 64-bit code <emphasis>and</emphasis> you have specified
-      <envar>CFLAGS</envar> in the environment, the configure script will
-      attempt to configure for 64-bits and fail.
-      Avoid this by invoking the configure command below with
-<screen role="nodump"><userinput><parameter>ABI=32</parameter> ./configure ...</userinput></screen></para>
-    </note>
 
     <note>
@@ -107,5 +98,5 @@
     applications using the gmp libraries with the message "Illegal
     instruction".  In this case, gmp should be reconfigured with the option
-    --build=x86_64-pc-linux-gnu and rebuilt.</para></caution>
+    --build=aarch64-unknown-linux-gnu and rebuilt.</para></caution>
 
     <para>Ensure that all 197 tests in the test suite passed.
Index: chapter08/grub.xml
===================================================================
--- chapter08/grub.xml	(revision 4640b37d9680598de7979b830c0c9dc05615d9cd)
+++ chapter08/grub.xml	(revision a747ea2a67e0e70d5addb5bc957b4315934939ae)
@@ -43,9 +43,20 @@
     <note>
       <para>
-        If your system has UEFI support and you wish to boot LFS with UEFI,
-        you can skip this package in LFS,
+        On ARM64 systems, the following instruction builds GRUB for UEFI.
+        But the built GRUB lacks some features because a few optional
+        dependencies of GRUB for UEFI is beyond the scope of LFS and not
+        installed yet.
+      </para>
+      <para>
+        If your system firmware does not support UEFI, you need to skip the
+        content of this page and try to figure out how to boot your system.
+      </para>
+      <para>
+        If your system firmware supports UEFI and you want a fully
+        functional GRUB, you can skip the content of this page,
         and install GRUB with UEFI support (and its dependencies) following
         <ulink url="&blfs-book;postlfs/grub-efi.html">the BLFS page</ulink>
-        at the end of this chapter.
+        (with <parameter>--target=x86_64</parameter> removed) at the end of
+        this chapter.
       </para>
     </note>
Index: chapter08/kbd.xml
===================================================================
--- chapter08/kbd.xml	(revision 4640b37d9680598de7979b830c0c9dc05615d9cd)
+++ chapter08/kbd.xml	(revision a747ea2a67e0e70d5addb5bc957b4315934939ae)
@@ -45,4 +45,12 @@
     across the keymaps in the Kbd package. The following patch fixes this
     issue for i386 keymaps:</para>
+
+    <note>
+      <para>
+        Don't skip the patch just because it mentions "i386".  The keymaps
+        for the keyboards most common on the market (qwerty or dvorak) are
+        in "i386" catagory.
+      </para>
+    </note>
 
 <screen><userinput remap="pre">patch -Np1 -i ../&kbd-backspace-patch;</userinput></screen>
Index: chapter08/libcap.xml
===================================================================
--- chapter08/libcap.xml	(revision 4640b37d9680598de7979b830c0c9dc05615d9cd)
+++ chapter08/libcap.xml	(revision a747ea2a67e0e70d5addb5bc957b4315934939ae)
@@ -60,6 +60,5 @@
           <para>This parameter sets the library directory to
           <filename>/usr/lib</filename> rather than
-          <filename>/usr/lib64</filename> on x86_64. It has no effect on
-          x86.</para>
+          <filename>/usr/lib64</filename> on ARM64.</para>
         </listitem>
       </varlistentry>
Index: chapter08/libelf.xml
===================================================================
--- chapter08/libelf.xml	(revision 4640b37d9680598de7979b830c0c9dc05615d9cd)
+++ chapter08/libelf.xml	(revision a747ea2a67e0e70d5addb5bc957b4315934939ae)
@@ -60,5 +60,5 @@
 
     <para>One test named <filename>run-low_high_pc.sh</filename> is known to
-    fail on 32-bit x86 systems.</para>
+    fail on ARM64 systems.</para>
 
     <para>Install only Libelf:</para>
Index: chapter08/libffi.xml
===================================================================
--- chapter08/libffi.xml	(revision 4640b37d9680598de7979b830c0c9dc05615d9cd)
+++ chapter08/libffi.xml	(revision a747ea2a67e0e70d5addb5bc957b4315934939ae)
@@ -77,6 +77,6 @@
           system, use the less capable system as a parameter. For details
           about alternative system types, see <ulink
-          url='https://gcc.gnu.org/onlinedocs/gcc-&gcc-version;/gcc/x86-Options.html'>
-          the x86 options in the GCC manual</ulink>.</para>
+          url='https://gcc.gnu.org/onlinedocs/gcc-&gcc-version;/gcc/AArch64-Options.html'>
+          the AArch64 options in the GCC manual</ulink>.</para>
         </listitem>
       </varlistentry>
@@ -101,4 +101,7 @@
 
 <screen><userinput remap="test">make check</userinput></screen>
+
+    <!-- https://github.com/libffi/libffi/actions/runs/3084390461/jobs/4986488117 -->
+    <para>90 tests are known to fail on ARM64.</para>
 
     <para>Install the package:</para>
Index: chapter08/stripping.xml
===================================================================
--- chapter08/stripping.xml	(revision 4640b37d9680598de7979b830c0c9dc05615d9cd)
+++ chapter08/stripping.xml	(revision a747ea2a67e0e70d5addb5bc957b4315934939ae)
@@ -47,6 +47,7 @@
   rationale to use the <command>install</command> command here.</para>
 
-  <note><para>The ELF loader's name is ld-linux-x86-64.so.2 on 64-bit systems
-  and ld-linux.so.2 on 32-bit systems.  The construct below selects the
+  <note><para>The ELF loader's name is ld-linux-aarch64.so.1 on
+  little-endian systems and ld-linux-aarch64_be.so.1 on big-endian systems.
+  The construct below selects the
   correct name for the current architecture, excluding anything ending
   with <quote>g</quote>, in case the commands below have already been
Index: chapter08/util-linux.xml
===================================================================
--- chapter08/util-linux.xml	(revision 4640b37d9680598de7979b830c0c9dc05615d9cd)
+++ chapter08/util-linux.xml	(revision a747ea2a67e0e70d5addb5bc957b4315934939ae)
@@ -127,5 +127,5 @@
         eject, fallocate, fdisk, fincore, findfs, findmnt, flock, fsck,
         fsck.cramfs, fsck.minix, fsfreeze, fstrim, getopt, hexdump, hwclock,
-        i386, ionice, ipcmk, ipcrm, ipcs, irqtop, isosize, kill, last, lastb (link to
+        ionice, ipcmk, ipcrm, ipcs, irqtop, isosize, kill, last, lastb (link to
         last), ldattach, linux32, linux64, logger, look, losetup, lsblk, lscpu,
         lsipc, lsirq, lslocks, lslogins, lsmem, lsns, mcookie, mesg, mkfs, mkfs.bfs, mkfs.cramfs, mkfs.minix, mkswap,
@@ -135,5 +135,5 @@
         swapoff (link to swapon), swapon, switch_root, taskset, uclampset, ul,
         umount, uname26, unshare, utmpdump, uuidd, uuidgen, uuidparse, wall, wdctl, whereis,
-        wipefs, x86_64, and zramctl</seg>
+        wipefs, and zramctl</seg>
         <seg>libblkid.so, libfdisk.so, libmount.so,
         libsmartcols.so, and libuuid.so</seg>
@@ -507,14 +507,4 @@
       </varlistentry>
 
-      <varlistentry id="i386">
-        <term><command>i386</command></term>
-        <listitem>
-          <para>A symbolic link to setarch</para>
-          <indexterm zone="ch-system-util-linux i386">
-            <primary sortas="b-i386">i386</primary>
-          </indexterm>
-        </listitem>
-      </varlistentry>
-
       <varlistentry id="ionice">
         <term><command>ionice</command></term>
@@ -1255,14 +1245,4 @@
       </varlistentry>
 
-      <varlistentry id="x86_64">
-        <term><command>x86_64</command></term>
-        <listitem>
-          <para>A symbolic link to setarch</para>
-          <indexterm zone="ch-system-util-linux x86_64">
-            <primary sortas="b-x86_64">x86_64</primary>
-          </indexterm>
-        </listitem>
-      </varlistentry>
-
       <varlistentry id="zramctl">
         <term><command>zramctl</command></term>
Index: chapter10/grub.xml
===================================================================
--- chapter10/grub.xml	(revision 4640b37d9680598de7979b830c0c9dc05615d9cd)
+++ chapter10/grub.xml	(revision a747ea2a67e0e70d5addb5bc957b4315934939ae)
@@ -19,8 +19,19 @@
   <note>
     <para>
-      If your system has UEFI support and you wish to boot LFS with UEFI,
-      you should skip this page, and config GRUB with UEFI support
+      This section assume your system has UEFI support and you wish to boot
+      LFS with UEFI and GRUB built following the instructions in Chapter 8.
+    </para>
+    <para>
+      If you've installed GRUB for UEFI with optional dependencies following
+      BLFS, you should skip this page, and config GRUB with UEFI support
       using the instructions provided in
-      <ulink url="&blfs-book;postlfs/grub-setup.html">the BLFS page</ulink>.
+      <ulink url="&blfs-book;postlfs/grub-setup.html">the BLFS page</ulink>,
+      but replace <parameter>--target=x86_64-efi</parameter> with
+      <parameter>--target=arm64-efi</parameter> for the ARM64 system.
+    </para>
+    <para>
+      If your system does not support UEFI or you don't want to use it,
+      you'll need to figure out how to configure the booting process of
+      the system on your own.
     </para>
   </note>
@@ -35,16 +46,21 @@
     LILO.</para></warning>
 
-    <para> Ensure that an emergency boot disk is ready to <quote>rescue</quote>
+    <para>Ensure that an emergency boot disk is ready to <quote>rescue</quote>
     the computer if the computer becomes unusable (un-bootable).  If you do not
-    already have a boot device, you can create one.  In order for the procedure
-    below to work, you need to jump ahead to BLFS and install
-    <userinput>xorriso</userinput> from the <ulink
-    url="&blfs-book;multimedia/libisoburn.html">
-    libisoburn</ulink> package.</para>
-
-<screen role="nodump"><userinput>cd /tmp
-grub-mkrescue --output=grub-img.iso
-xorriso -as cdrecord -v dev=/dev/cdrw blank=as_needed grub-img.iso</userinput></screen>
-
+    already have a boot device, you can create one.  To create a emergency
+    boot device for UEFI, consult section <quote>Create an Emergency Boot
+    Disk</quote> in
+	<ulink url="&blfs-book;postlfs/grub-setup.html">the BLFS page</ulink>.</para>
+
+  </sect2>
+
+  <sect2>
+    <title>Turn off Secure Boot</title>
+
+    <para>LFS does not have the essential packages to support Secure Boot.
+    To set up the boot process following the instructions in this section,
+    Secure Boot must be turned off from the configuration interface of the
+    firmware. Read the documentation provided by the manufacturer of your
+    system to find out how.</para>
   </sect2>
 
@@ -72,8 +88,29 @@
     <title>Setting Up the Configuration</title>
 
-    <para>GRUB works by writing data to the first physical track of the
-    hard disk.  This area is not part of any file system.  The programs
-    there access GRUB modules in the boot partition.  The default location
-    is /boot/grub/.</para>
+    <para>GRUB works by creating an EFI executable in the EFI System
+    Partition (ESP).  You can find the ESP with:</para>
+
+<screen role="nodump"><userinput>fdisk -l | grep 'EFI System'</userinput></screen>
+
+    <para>If no ESP exists on your hard drive (for example, you are building
+    LFS on a fresh new system with a Live CD as the host distro), read
+    <ulink url="&blfs-book;postlfs/grub-setup.html">the BLFS page</ulink>
+    for the instruction to create an ESP on your hard drive.</para>
+
+    <para>If the ESP is not mounted at
+    <filename class="directory">/boot/efi</filename> (in the chroot),
+    mount it now:</para>
+
+<screen role="nodump"><userinput>mkdir -pv /boot/efi
+mount /boot/efi</userinput></screen>
+
+    <note>
+      <para>The path to the device node is intentionally omitted in the
+      command.  We expect the entry for mounting the ESP to
+      <filename class="directory">/boot/efi</filename> is already in
+      <filename>/etc/fstab</filename>.  Add the entry before running the
+      command if you forgot to create an entry for the ESP in
+      <xref linkend="ch-bootable-fstab"/>.</para>
+    </note>
 
     <para>The location of the boot partition is a choice of the user that
@@ -99,21 +136,54 @@
 
     <para>Install the GRUB files into <filename
-    class="directory">/boot/grub</filename> and set up the boot track:</para>
+    class="directory">/boot/grub</filename> and the GRUB EFI executable into
+    <filename class="directory">/boot/efi/EFI/BOOTAA64.EFI</filename>:</para>
 
     <warning>
-      <para>The following command will overwrite the current boot loader. Do not
-      run the command if this is not desired, for example, if using a third party
-      boot manager to manage the Master Boot Record (MBR).</para>
+      <para>The following command will overwrite
+      <filename>BOOTAA64.EFI</filename>. Do not run the command if this is
+      not desired, for example, if it contains a third party boot manager.
+      You can backup it with <command>cp</command> as it's a regular
+      file.</para>
     </warning>
 
-<screen role="nodump"><userinput>grub-install /dev/sda</userinput></screen>
+<screen role="nodump"><userinput>grub-install --removable</userinput></screen>
 
     <note>
-      <para>If the system has been booted using UEFI,
-      <command>grub-install</command> will try to install files for the
-      <emphasis>x86_64-efi</emphasis> target, but those files
-      have not been installed in <xref linkend="chapter-building-system"/>.
-      If this is the case, add <option>--target i386-pc</option> to the
-      command above.</para>
+      <para>
+        <parameter>--removable</parameter> may seem strange here.  The UEFI
+        firmware searches EFI executables for boot loaders in a hardcoded
+        path, <filename>EFI/BOOTAA64.EFI</filename> in the ESP, and other
+        boot loader paths listed in the EFI variables.  We've not installed
+        the utilities for manipulating EFI variables so we need to install
+        the EFI executable into the hardcoded path.  The hardcoded path is
+        usually used by removable devices (for example, USB thumb devices)
+        so the <command>grub-install</command> option for this purpose is
+        named <parameter>--removable</parameter>.
+      </para>
+      <para>
+        UEFI implementation usually prefers the boot loaders with paths
+        recorded in an EFI variable, to the boot loader with the hardcoded
+        search path.  You may need to invoke the boot device selection menu
+        or setting interface of your EFI firmware on next boot to explicitly
+        select the bootloader.
+      </para>
+      <para>
+        Some UEFI implementation may completely skip the hardcoded path if
+        there are other boot loaders in the same hard drive with paths
+        recorded in an EFI variable.  Then you need to create an EFI
+        variable for the newly installed boot loader.  Install
+        <ulink url="&blfs-book;postlfs/efibootmgr.html">efibootmgr</ulink>,
+        then run the following commands:
+
+<screen role="nodump"><userinput>mount -v -t efivarfs efivarfs /sys/firmware/efi/efivars
+efibootmgr -B -L LFS || true
+efibootmgr -c -L LFS -l '\EFI\BOOT\BOOTAA64.EFI' -d /dev/sda
+umount /sys/firmware/efi/efivars</userinput></screen>
+
+        Replace <filename>/dev/sda</filename> with the device node of the
+        hard drive where you are installing GRUB into.  For some UEFI
+        firmwares, <option>-e 3</option> option may be needed for the
+        <command>efibootmgr -c</command> command.
+      </para>
     </note>
 
Index: chapter10/kernel.xml
===================================================================
--- chapter10/kernel.xml	(revision 4640b37d9680598de7979b830c0c9dc05615d9cd)
+++ chapter10/kernel.xml	(revision a747ea2a67e0e70d5addb5bc957b4315934939ae)
@@ -165,19 +165,4 @@
        Pseudo filesystems  ---&gt;
         [*] Tmpfs POSIX Access Control Lists [CONFIG_TMPFS_POSIX_ACL]</screen>
-
-      <para>Enable some additional features if you are building a 64-bit
-      system.  If you are using menuconfig, enable them in the order of
-      <parameter>CONFIG_PCI_MSI</parameter> first, then
-      <parameter>CONFIG_IRQ_REMAP</parameter>, at last
-      <parameter>CONFIG_X86_X2APIC</parameter> because an option only
-      shows up after its dependencies are selected.</para>
-
-      <screen role="nodump">Processor type and features ---&gt;
-  [*] Support x2apic [CONFIG_X86_X2APIC]
-Device Drivers ---&gt;
-  [*] PCI Support ---&gt; [CONFIG_PCI]
-    [*] Message Signaled Interrupts (MSI and MSI-X) [CONFIG_PCI_MSI]
-  [*] IOMMU Hardware Support ---&gt; [CONFIG_IOMMU_SUPPORT]
-    [*] Support for Interrupt Remapping [CONFIG_IRQ_REMAP]</screen>
     </note>
 
@@ -288,16 +273,4 @@
       </varlistentry>
 
-      <varlistentry>
-        <term><parameter>Support x2apic</parameter></term>
-        <listitem>
-          <para>Support running the interrupt controller of 64-bit x86
-          processors in x2APIC mode.  x2APIC may be enabled by firmware on
-          64-bit x86 systems, and a kernel without this option enabled will
-          panic on boot if x2APIC is enabled by firmware.  This option has
-          has no effect, but also does no harm if x2APIC is disabled by the
-          firmware.</para>
-        </listitem>
-      </varlistentry>
-
     </variablelist>
 
@@ -354,7 +327,7 @@
     the filename should be <emphasis>vmlinuz</emphasis> to be compatible with
     the automatic setup of the boot process described in the next section.  The
-    following command assumes an x86 architecture:</para>
-
-<screen><userinput remap="install">cp -iv arch/x86/boot/bzImage /boot/vmlinuz-&linux-version;-lfs-&version;</userinput></screen>
+    following command assumes an ARM64 architecture:</para>
+
+<screen><userinput remap="install">cp -iv arch/arm64/boot/Image /boot/vmlinuz-&linux-version;-lfs-&version;</userinput></screen>
 
     <para><filename>System.map</filename> is a symbol file for the kernel.
Index: general.ent
===================================================================
--- general.ent	(revision 4640b37d9680598de7979b830c0c9dc05615d9cd)
+++ general.ent	(revision a747ea2a67e0e70d5addb5bc957b4315934939ae)
@@ -92,5 +92,5 @@
 <!ENTITY test-results    "&lfs-root;lfs/build-logs/&generic-version;/">
 <!ENTITY secadv          "&lfs-root;lfs/advisories/">
-<!ENTITY min-kernel      "3.2">
+<!ENTITY min-kernel      "3.7">
 <!--
 <!ENTITY patches-rootd   "&lfs-root;patches/lfs/&generic-versiond;/">
Index: git-version.sh
===================================================================
--- git-version.sh	(revision 4640b37d9680598de7979b830c0c9dc05615d9cd)
+++ git-version.sh	(revision a747ea2a67e0e70d5addb5bc957b4315934939ae)
@@ -49,5 +49,5 @@
 
 sha="$(git describe --abbrev=1)"
-rev=$(echo "$sha" | sed 's/-g[^-]*$//')
+rev=arm64-$(echo "$sha" | sed 's/-g[^-]*$//')
 version="$rev"
 versiond="$rev-systemd"
Index: prologue/architecture.xml
===================================================================
--- prologue/architecture.xml	(revision 4640b37d9680598de7979b830c0c9dc05615d9cd)
+++ prologue/architecture.xml	(revision a747ea2a67e0e70d5addb5bc957b4315934939ae)
@@ -11,40 +11,24 @@
   <title>LFS Target Architectures</title>
 
-<para>The primary target architectures of LFS are the AMD/Intel x86 (32-bit)
-and x86_64 (64-bit) CPUs.  On the other hand, the instructions in this book are
-also known to work, with some modifications, with the Power PC and ARM CPUs. To
-build a system that utilizes one of these alternative CPUs, the main prerequisite, in
-addition to those on the next page, is an existing Linux system such as an
-earlier LFS installation, Ubuntu, Red Hat/Fedora, SuSE, or some other distribution
-that targets that architecture. (Note that a 32-bit
-distribution can be installed and used as a host system on a 64-bit AMD/Intel
-computer.)</para>
+<para>The target architectures of this LFS edition are ARM64 (sometimes
+called AArch64) CPUs.  On the other hand, the instructions in this book may
+work on 32-bit ARM CPUs with some modifications. To build a system that
+utilizes one of these alternative CPUs, the main prerequisite, in
+addition to those on
+the next page, is an existing Linux system such as an earlier LFS
+installation, Ubuntu, Red Hat/Fedora, SuSE, or other distribution that
+targets the architecture that you have.</para>
 
-<para>The gain from building on a 64-bit system, as
-compared to a 32-bit system, is minimal.
-For example, in a test build of LFS-9.1 on a Core i7-4790 CPU based system,
-using 4 cores, the following statistics were measured:</para>
-
-<screen><computeroutput>Architecture Build Time     Build Size
-32-bit       239.9 minutes  3.6 GB
-64-bit       233.2 minutes  4.4 GB</computeroutput></screen>
-
-<para>As you can see, on the same hardware, the 64-bit build is only 3% faster
-(and 22% larger) than the 32-bit build. If you plan to use LFS as a LAMP
-server, or a firewall, a 32-bit CPU may be good enough. On the other
-hand, several packages in BLFS now need more than 4 GB of RAM to be built
-and/or to run; if you plan to use LFS as a desktop, the LFS authors
-recommend building a 64-bit system.</para>
-
-<para>The default 64-bit build that results from LFS is a
-<quote>pure</quote> 64-bit system. That is, it supports 64-bit executables
-only. Building a <quote>multi-lib</quote> system requires compiling many
+<para>The build results from this LFS edition is considered a
+<quote>pure</quote> 64-bit system.  That is, it supports 64-bit executables
+only.  Building a <quote>multi-lib</quote> system requires compiling many
 applications twice, once for a 32-bit system and once for a 64-bit system.
 This is not directly supported in LFS because it would interfere with the
 educational objective of providing the minimal instructions needed for a
-basic Linux system. Some of the LFS/BLFS editors maintain a multilib fork
+base Linux system. Some LFS/BLFS editors maintain a multilib fork
 of LFS, accessible at <ulink
 url="https://www.linuxfromscratch.org/~thomas/multilib/index.html"/>. But
-that's an advanced topic.</para>
+the multilib edition is for x86_64, and multilib is an advanced topic
+anyway.</para>
 
 </sect1>
Index: prologue/standards.xml
===================================================================
--- prologue/standards.xml	(revision 4640b37d9680598de7979b830c0c9dc05615d9cd)
+++ prologue/standards.xml	(revision a747ea2a67e0e70d5addb5bc957b4315934939ae)
@@ -36,6 +36,6 @@
         specifications are architecture specific.  There are also two trial
         specifications: Gtk3 and Graphics.  LFS attempts to conform to the LSB
-        specifications for the IA32 (32-bit x86) or AMD64 (x86_64)
-        architectures discussed in the previous section.</para>
+        generic specifications.  The architecture specific part of LSB does
+        not exist for ARM64.</para>
 
         <note><para>Many people do not agree with these requirements.
