From e6aedf6056b8800a26b18e15a05e3dd166723c43 Mon Sep 17 00:00:00 2001
From: jam1garner <8260240+jam1garner@users.noreply.github.com>
Date: Wed, 15 Sep 2021 13:56:20 -0400
Subject: [PATCH 01/10] Add Nintendo Switch tier 3 target

---
 .../src/spec/aarch64_nintendo_switch.rs       | 39 +++++++++++++++++++
 compiler/rustc_target/src/spec/mod.rs         |  2 +
 src/doc/rustc/src/platform-support.md         |  1 +
 3 files changed, 42 insertions(+)
 create mode 100644 compiler/rustc_target/src/spec/aarch64_nintendo_switch.rs

diff --git a/compiler/rustc_target/src/spec/aarch64_nintendo_switch.rs b/compiler/rustc_target/src/spec/aarch64_nintendo_switch.rs
new file mode 100644
index 00000000000..74ecba489c1
--- /dev/null
+++ b/compiler/rustc_target/src/spec/aarch64_nintendo_switch.rs
@@ -0,0 +1,39 @@
+use super::{LinkerFlavor, LldFlavor, PanicStrategy, RelroLevel, Target, TargetOptions};
+
+/// A base target for Nintendo Switch devices using a pure LLVM toolchain.
+pub fn target() -> Target {
+    let mut opts = TargetOptions {
+        linker_flavor: LinkerFlavor::Lld(LldFlavor::Ld),
+        linker: Some("rust-lld".into()),
+        os: "horizon".into(),
+        max_atomic_width: Some(128),
+        panic_strategy: PanicStrategy::Abort,
+        position_independent_executables: true,
+        crt_static_default: false,
+        crt_static_respected: false,
+        dynamic_linking: true,
+        executables: true,
+        has_elf_tls: false,
+        has_rpath: false,
+        relro_level: RelroLevel::Off,
+        ..Default::default()
+    };
+
+    opts.pre_link_args.insert(
+        LinkerFlavor::Lld(LldFlavor::Ld),
+        vec![],
+    );
+
+    opts.post_link_args.insert(
+        LinkerFlavor::Lld(LldFlavor::Ld),
+        vec!["--no-gc-sections".to_string(), "--eh-frame-hdr".to_string()],
+    );
+
+    Target {
+        llvm_target: "aarch64-unknown-none".into(),
+        pointer_width: 64,
+        data_layout: "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128".into(),
+        arch: "aarch64".into(),
+        options: opts,
+    }
+}
diff --git a/compiler/rustc_target/src/spec/mod.rs b/compiler/rustc_target/src/spec/mod.rs
index ef49fc8e968..a14a245480e 100644
--- a/compiler/rustc_target/src/spec/mod.rs
+++ b/compiler/rustc_target/src/spec/mod.rs
@@ -1035,6 +1035,8 @@ supported_targets! {
 
     ("armv6k-nintendo-3ds", armv6k_nintendo_3ds),
 
+    ("aarch64-nintendo-switch", aarch64_nintendo_switch),
+
     ("armv7-unknown-linux-uclibceabi", armv7_unknown_linux_uclibceabi),
     ("armv7-unknown-linux-uclibceabihf", armv7_unknown_linux_uclibceabihf),
 
diff --git a/src/doc/rustc/src/platform-support.md b/src/doc/rustc/src/platform-support.md
index eb985803266..641fcb9d6f8 100644
--- a/src/doc/rustc/src/platform-support.md
+++ b/src/doc/rustc/src/platform-support.md
@@ -209,6 +209,7 @@ target | std | host | notes
 `aarch64-apple-tvos` | * |  | ARM64 tvOS
 [`aarch64-apple-watchos-sim`](platform-support/apple-watchos.md) | ✓ |  | ARM64 Apple WatchOS Simulator
 [`aarch64-kmc-solid_asp3`](platform-support/kmc-solid.md) | ✓ |  | ARM64 SOLID with TOPPERS/ASP3
+`aarch64-nintendo-switch` | * |  | ARM64 Nintendo Switch, Horizon
 [`aarch64-pc-windows-gnullvm`](platform-support/pc-windows-gnullvm.md) | ✓ | ✓ |
 `aarch64-unknown-freebsd` | ✓ | ✓ | ARM64 FreeBSD
 `aarch64-unknown-hermit` | ✓ |  | ARM64 HermitCore

From 60beb1a99509b6cab2810aad3bac3584652f010d Mon Sep 17 00:00:00 2001
From: leo60228 <leo@60228.dev>
Date: Wed, 15 Sep 2021 15:17:40 -0400
Subject: [PATCH 02/10] Don't use host linker for switch

---
 src/bootstrap/util.rs | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/bootstrap/util.rs b/src/bootstrap/util.rs
index c5d62a8810a..1895e290148 100644
--- a/src/bootstrap/util.rs
+++ b/src/bootstrap/util.rs
@@ -298,7 +298,8 @@ pub fn use_host_linker(target: TargetSelection) -> bool {
         || target.contains("nvptx")
         || target.contains("fortanix")
         || target.contains("fuchsia")
-        || target.contains("bpf"))
+        || target.contains("bpf")
+        || target.contains("switch"))
 }
 
 pub fn is_valid_test_suite_arg<'a, P: AsRef<Path>>(

From f688a56ef68ae5e726314e5a554e0057fdcb5b27 Mon Sep 17 00:00:00 2001
From: leo60228 <leo@60228.dev>
Date: Wed, 15 Sep 2021 15:19:00 -0400
Subject: [PATCH 03/10] Remove unnecessary linker args

---
 .../rustc_target/src/spec/aarch64_nintendo_switch.rs   | 10 ++--------
 1 file changed, 2 insertions(+), 8 deletions(-)

diff --git a/compiler/rustc_target/src/spec/aarch64_nintendo_switch.rs b/compiler/rustc_target/src/spec/aarch64_nintendo_switch.rs
index 74ecba489c1..b6863d509f2 100644
--- a/compiler/rustc_target/src/spec/aarch64_nintendo_switch.rs
+++ b/compiler/rustc_target/src/spec/aarch64_nintendo_switch.rs
@@ -19,15 +19,9 @@ pub fn target() -> Target {
         ..Default::default()
     };
 
-    opts.pre_link_args.insert(
-        LinkerFlavor::Lld(LldFlavor::Ld),
-        vec![],
-    );
+    opts.pre_link_args.insert(LinkerFlavor::Lld(LldFlavor::Ld), vec![]);
 
-    opts.post_link_args.insert(
-        LinkerFlavor::Lld(LldFlavor::Ld),
-        vec!["--no-gc-sections".to_string(), "--eh-frame-hdr".to_string()],
-    );
+    opts.post_link_args.insert(LinkerFlavor::Lld(LldFlavor::Ld), vec![]);
 
     Target {
         llvm_target: "aarch64-unknown-none".into(),

From 4bc8549cb3ea8bafd93c185cd99353e391967390 Mon Sep 17 00:00:00 2001
From: leo60228 <leo@60228.dev>
Date: Wed, 15 Sep 2021 15:26:59 -0400
Subject: [PATCH 04/10] Add linker script for switch

---
 .../src/spec/aarch64_nintendo_switch.rs       |  3 +
 .../aarch64_nintendo_switch_linker_script.ld  | 83 +++++++++++++++++++
 2 files changed, 86 insertions(+)
 create mode 100644 compiler/rustc_target/src/spec/aarch64_nintendo_switch_linker_script.ld

diff --git a/compiler/rustc_target/src/spec/aarch64_nintendo_switch.rs b/compiler/rustc_target/src/spec/aarch64_nintendo_switch.rs
index b6863d509f2..4e4cabe9bbf 100644
--- a/compiler/rustc_target/src/spec/aarch64_nintendo_switch.rs
+++ b/compiler/rustc_target/src/spec/aarch64_nintendo_switch.rs
@@ -1,10 +1,13 @@
 use super::{LinkerFlavor, LldFlavor, PanicStrategy, RelroLevel, Target, TargetOptions};
 
+const LINKER_SCRIPT: &str = include_str!("./aarch64_nintendo_switch_linker_script.ld");
+
 /// A base target for Nintendo Switch devices using a pure LLVM toolchain.
 pub fn target() -> Target {
     let mut opts = TargetOptions {
         linker_flavor: LinkerFlavor::Lld(LldFlavor::Ld),
         linker: Some("rust-lld".into()),
+        link_script: Some(LINKER_SCRIPT.into()),
         os: "horizon".into(),
         max_atomic_width: Some(128),
         panic_strategy: PanicStrategy::Abort,
diff --git a/compiler/rustc_target/src/spec/aarch64_nintendo_switch_linker_script.ld b/compiler/rustc_target/src/spec/aarch64_nintendo_switch_linker_script.ld
new file mode 100644
index 00000000000..7938f75e139
--- /dev/null
+++ b/compiler/rustc_target/src/spec/aarch64_nintendo_switch_linker_script.ld
@@ -0,0 +1,83 @@
+OUTPUT_FORMAT(elf64-littleaarch64)
+OUTPUT_ARCH(aarch64)
+ENTRY(_start)
+
+PHDRS
+{
+  text PT_LOAD FLAGS(5);
+  rodata PT_LOAD FLAGS(4);
+  data PT_LOAD FLAGS(6);
+  bss PT_LOAD FLAGS(6);
+  dynamic PT_DYNAMIC;
+}
+
+SECTIONS
+{
+  . = 0;
+
+  .text : ALIGN(0x1000) {
+    HIDDEN(__text_start = .);
+    KEEP(*(.text.jmp))
+
+    . = 0x80;
+
+    *(.text .text.*)
+    *(.plt .plt.*)
+  }
+
+  /* Read-only sections */
+
+  . = ALIGN(0x1000);
+
+  .module_name : { *(.module_name) } :rodata
+  
+  .rodata : { *(.rodata .rodata.*) } :rodata
+  .mod0 : {
+    KEEP(crt0.nso.o(.data.mod0))
+    KEEP(crt0.nro.o(.data.mod0))
+    KEEP(crt0.lib.nro.o(.data.mod0))
+  }
+  .hash : { *(.hash) }
+  .dynsym : { *(.dynsym .dynsym.*) }
+  .dynstr : { *(.dynstr .dynstr.*) }
+  .rela.dyn : { *(.rela.dyn) }
+
+  .eh_frame : {
+    HIDDEN(__eh_frame_start = .);
+    *(.eh_frame .eh_frame.*)
+    HIDDEN(__eh_frame_end = .);
+  }
+
+  .eh_frame_hdr : {
+    HIDDEN(__eh_frame_hdr_start = .);
+    *(.eh_frame_hdr .eh_frame_hdr.*)
+    HIDDEN(__eh_frame_hdr_end = .);
+  }
+
+  /* Read-write sections */
+
+   . = ALIGN(0x1000);
+
+  .data : {
+    *(.data .data.*)
+    *(.got .got.*)
+    *(.got.plt .got.plt.*)
+  } :data
+
+  .dynamic : {
+    HIDDEN(__dynamic_start = .);
+    *(.dynamic)
+  }
+
+  /* BSS section */
+
+  . = ALIGN(0x1000);
+
+  .bss : {
+    HIDDEN(__bss_start = .);
+    *(.bss .bss.*)
+    *(COMMON)
+    . = ALIGN(8);
+    HIDDEN(__bss_end = .);
+  } :bss
+}

From bee373c699073863a150b8e32e9912321850ddde Mon Sep 17 00:00:00 2001
From: leo60228 <leo@60228.dev>
Date: Wed, 15 Sep 2021 15:30:00 -0400
Subject: [PATCH 05/10] Don't build std for switch

---
 src/bootstrap/config.rs | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/bootstrap/config.rs b/src/bootstrap/config.rs
index 62dd9a6b365..ea0f78e2a6b 100644
--- a/src/bootstrap/config.rs
+++ b/src/bootstrap/config.rs
@@ -411,7 +411,7 @@ pub struct Target {
 impl Target {
     pub fn from_triple(triple: &str) -> Self {
         let mut target: Self = Default::default();
-        if triple.contains("-none") || triple.contains("nvptx") {
+        if triple.contains("-none") || triple.contains("nvptx") || triple.contains("switch") {
             target.no_std = true;
         }
         target

From 7f8804915ef3b0749f03b0f49311674270612a64 Mon Sep 17 00:00:00 2001
From: jam1garner <8260240+jam1garner@users.noreply.github.com>
Date: Wed, 15 Sep 2021 17:57:43 -0400
Subject: [PATCH 06/10] Remove unneeded options from Nintendo Switch target

---
 .../src/spec/aarch64_nintendo_switch.rs       | 36 +++++++------------
 1 file changed, 13 insertions(+), 23 deletions(-)

diff --git a/compiler/rustc_target/src/spec/aarch64_nintendo_switch.rs b/compiler/rustc_target/src/spec/aarch64_nintendo_switch.rs
index 4e4cabe9bbf..ae9a05b1a38 100644
--- a/compiler/rustc_target/src/spec/aarch64_nintendo_switch.rs
+++ b/compiler/rustc_target/src/spec/aarch64_nintendo_switch.rs
@@ -4,33 +4,23 @@ const LINKER_SCRIPT: &str = include_str!("./aarch64_nintendo_switch_linker_scrip
 
 /// A base target for Nintendo Switch devices using a pure LLVM toolchain.
 pub fn target() -> Target {
-    let mut opts = TargetOptions {
-        linker_flavor: LinkerFlavor::Lld(LldFlavor::Ld),
-        linker: Some("rust-lld".into()),
-        link_script: Some(LINKER_SCRIPT.into()),
-        os: "horizon".into(),
-        max_atomic_width: Some(128),
-        panic_strategy: PanicStrategy::Abort,
-        position_independent_executables: true,
-        crt_static_default: false,
-        crt_static_respected: false,
-        dynamic_linking: true,
-        executables: true,
-        has_elf_tls: false,
-        has_rpath: false,
-        relro_level: RelroLevel::Off,
-        ..Default::default()
-    };
-
-    opts.pre_link_args.insert(LinkerFlavor::Lld(LldFlavor::Ld), vec![]);
-
-    opts.post_link_args.insert(LinkerFlavor::Lld(LldFlavor::Ld), vec![]);
-
     Target {
         llvm_target: "aarch64-unknown-none".into(),
         pointer_width: 64,
         data_layout: "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128".into(),
         arch: "aarch64".into(),
-        options: opts,
+        options: TargetOptions {
+            linker_flavor: LinkerFlavor::Lld(LldFlavor::Ld),
+            linker: Some("rust-lld".into()),
+            link_script: Some(LINKER_SCRIPT.into()),
+            os: "horizon".into(),
+            max_atomic_width: Some(128),
+            panic_strategy: PanicStrategy::Abort,
+            position_independent_executables: true,
+            dynamic_linking: true,
+            executables: true,
+            relro_level: RelroLevel::Off,
+            ..Default::default()
+        },
     }
 }

From c690db4024c880907092ecd44702646bf0f5f264 Mon Sep 17 00:00:00 2001
From: leo60228 <leo@60228.dev>
Date: Wed, 15 Sep 2021 18:21:34 -0400
Subject: [PATCH 07/10] Remove obsolete crt0 references in linker script

---
 .../src/spec/aarch64_nintendo_switch_linker_script.ld      | 7 +------
 1 file changed, 1 insertion(+), 6 deletions(-)

diff --git a/compiler/rustc_target/src/spec/aarch64_nintendo_switch_linker_script.ld b/compiler/rustc_target/src/spec/aarch64_nintendo_switch_linker_script.ld
index 7938f75e139..f3441e65937 100644
--- a/compiler/rustc_target/src/spec/aarch64_nintendo_switch_linker_script.ld
+++ b/compiler/rustc_target/src/spec/aarch64_nintendo_switch_linker_script.ld
@@ -30,13 +30,8 @@ SECTIONS
   . = ALIGN(0x1000);
 
   .module_name : { *(.module_name) } :rodata
-  
+
   .rodata : { *(.rodata .rodata.*) } :rodata
-  .mod0 : {
-    KEEP(crt0.nso.o(.data.mod0))
-    KEEP(crt0.nro.o(.data.mod0))
-    KEEP(crt0.lib.nro.o(.data.mod0))
-  }
   .hash : { *(.hash) }
   .dynsym : { *(.dynsym .dynsym.*) }
   .dynstr : { *(.dynstr .dynstr.*) }

From fd81b99a999313caf7750b8223f80d83dd2881e3 Mon Sep 17 00:00:00 2001
From: leo60228 <leo@60228.dev>
Date: Fri, 17 Sep 2021 10:11:19 -0400
Subject: [PATCH 08/10] Add docs for Switch target

---
 src/doc/rustc/src/platform-support.md         |  2 +-
 .../aarch64-nintendo-switch.md                | 49 +++++++++++++++++++
 2 files changed, 50 insertions(+), 1 deletion(-)
 create mode 100644 src/doc/rustc/src/platform-support/aarch64-nintendo-switch.md

diff --git a/src/doc/rustc/src/platform-support.md b/src/doc/rustc/src/platform-support.md
index 641fcb9d6f8..19f640f721b 100644
--- a/src/doc/rustc/src/platform-support.md
+++ b/src/doc/rustc/src/platform-support.md
@@ -209,7 +209,7 @@ target | std | host | notes
 `aarch64-apple-tvos` | * |  | ARM64 tvOS
 [`aarch64-apple-watchos-sim`](platform-support/apple-watchos.md) | ✓ |  | ARM64 Apple WatchOS Simulator
 [`aarch64-kmc-solid_asp3`](platform-support/kmc-solid.md) | ✓ |  | ARM64 SOLID with TOPPERS/ASP3
-`aarch64-nintendo-switch` | * |  | ARM64 Nintendo Switch, Horizon
+[`aarch64-nintendo-switch`](platform-support/aarch64-nintendo-switch.md) | * |  | ARM64 Nintendo Switch, Horizon
 [`aarch64-pc-windows-gnullvm`](platform-support/pc-windows-gnullvm.md) | ✓ | ✓ |
 `aarch64-unknown-freebsd` | ✓ | ✓ | ARM64 FreeBSD
 `aarch64-unknown-hermit` | ✓ |  | ARM64 HermitCore
diff --git a/src/doc/rustc/src/platform-support/aarch64-nintendo-switch.md b/src/doc/rustc/src/platform-support/aarch64-nintendo-switch.md
new file mode 100644
index 00000000000..7eb3f21ea26
--- /dev/null
+++ b/src/doc/rustc/src/platform-support/aarch64-nintendo-switch.md
@@ -0,0 +1,49 @@
+# aarch64-nintendo-switch
+
+**Tier: 3**
+
+Nintendo Switch with pure-Rust toolchain.
+
+## Designated Developers
+
+* [@leo60228](https://github.com/leo60228)
+* [@jam1garner](https://github.com/jam1garner)
+
+## Requirements
+
+This target is cross-compiled.
+It has no special requirements for the host.
+
+## Building
+
+The target can be built by enabling it for a `rustc` build:
+
+```toml
+[build]
+build-stage = 1
+target = ["aarch64-nintendo-switch"]
+```
+
+## Cross-compilation
+
+This target can be cross-compiled from any host.
+
+## Testing
+
+Currently there is no support to run the rustc test suite for this target.
+
+## Building Rust programs
+
+If `rustc` has support for that target and the library artifacts are available,
+then Rust programs can be built for that target:
+
+```text
+rustc --target aarch64-nintendo-switch your-code.rs
+```
+
+To generate binaries in the NRO format that can be easily run on-device, you
+can use [cargo-nx](https://github.com/aarch64-switch-rs/cargo-nx):
+
+```text
+cargo nx --triple=aarch64-nintendo-switch
+```

From d04753e19e76dacf5138937875f232f43571e8c1 Mon Sep 17 00:00:00 2001
From: leo60228 <leo@60228.dev>
Date: Fri, 17 Sep 2021 10:44:59 -0400
Subject: [PATCH 09/10] Add aarch64-nintendo-switch.md to SUMMARY.md

I can't think of any other reason CI might be failing, and I should've
done this anyway.
---
 src/doc/rustc/src/SUMMARY.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/doc/rustc/src/SUMMARY.md b/src/doc/rustc/src/SUMMARY.md
index 87dc5138539..1c8ba490f2d 100644
--- a/src/doc/rustc/src/SUMMARY.md
+++ b/src/doc/rustc/src/SUMMARY.md
@@ -17,6 +17,7 @@
     - [Template for Target-specific Documentation](platform-support/TEMPLATE.md)
     - [aarch64-apple-ios-sim](platform-support/aarch64-apple-ios-sim.md)
     - [\*-apple-watchos\*](platform-support/apple-watchos.md)
+    - [aarch64-nintendo-switch](platform-support/aarch64-nintendo-switch.md)
     - [armv6k-nintendo-3ds](platform-support/armv6k-nintendo-3ds.md)
     - [armv7-unknown-linux-uclibceabi](platform-support/armv7-unknown-linux-uclibceabi.md)
     - [armv7-unknown-linux-uclibceabihf](platform-support/armv7-unknown-linux-uclibceabihf.md)

From 62aafb01b11db42e358d81c53719727c1daca33c Mon Sep 17 00:00:00 2001
From: leo60228 <leo@60228.dev>
Date: Fri, 17 Sep 2021 13:29:49 -0400
Subject: [PATCH 10/10] Rename aarch64-nintendo-switch to
 aarch64-nintendo-switch-freestanding

---
 ..._switch.rs => aarch64_nintendo_switch_freestanding.rs} | 2 +-
 ...aarch64_nintendo_switch_freestanding_linker_script.ld} | 0
 compiler/rustc_target/src/spec/mod.rs                     | 2 +-
 src/doc/rustc/src/SUMMARY.md                              | 2 +-
 src/doc/rustc/src/platform-support.md                     | 2 +-
 ...-switch.md => aarch64-nintendo-switch-freestanding.md} | 8 ++++----
 6 files changed, 8 insertions(+), 8 deletions(-)
 rename compiler/rustc_target/src/spec/{aarch64_nintendo_switch.rs => aarch64_nintendo_switch_freestanding.rs} (96%)
 rename compiler/rustc_target/src/spec/{aarch64_nintendo_switch_linker_script.ld => aarch64_nintendo_switch_freestanding_linker_script.ld} (100%)
 rename src/doc/rustc/src/platform-support/{aarch64-nintendo-switch.md => aarch64-nintendo-switch-freestanding.md} (80%)

diff --git a/compiler/rustc_target/src/spec/aarch64_nintendo_switch.rs b/compiler/rustc_target/src/spec/aarch64_nintendo_switch_freestanding.rs
similarity index 96%
rename from compiler/rustc_target/src/spec/aarch64_nintendo_switch.rs
rename to compiler/rustc_target/src/spec/aarch64_nintendo_switch_freestanding.rs
index ae9a05b1a38..1b7161fbb85 100644
--- a/compiler/rustc_target/src/spec/aarch64_nintendo_switch.rs
+++ b/compiler/rustc_target/src/spec/aarch64_nintendo_switch_freestanding.rs
@@ -1,6 +1,6 @@
 use super::{LinkerFlavor, LldFlavor, PanicStrategy, RelroLevel, Target, TargetOptions};
 
-const LINKER_SCRIPT: &str = include_str!("./aarch64_nintendo_switch_linker_script.ld");
+const LINKER_SCRIPT: &str = include_str!("./aarch64_nintendo_switch_freestanding_linker_script.ld");
 
 /// A base target for Nintendo Switch devices using a pure LLVM toolchain.
 pub fn target() -> Target {
diff --git a/compiler/rustc_target/src/spec/aarch64_nintendo_switch_linker_script.ld b/compiler/rustc_target/src/spec/aarch64_nintendo_switch_freestanding_linker_script.ld
similarity index 100%
rename from compiler/rustc_target/src/spec/aarch64_nintendo_switch_linker_script.ld
rename to compiler/rustc_target/src/spec/aarch64_nintendo_switch_freestanding_linker_script.ld
diff --git a/compiler/rustc_target/src/spec/mod.rs b/compiler/rustc_target/src/spec/mod.rs
index a14a245480e..1a6bb4a2eaf 100644
--- a/compiler/rustc_target/src/spec/mod.rs
+++ b/compiler/rustc_target/src/spec/mod.rs
@@ -1035,7 +1035,7 @@ supported_targets! {
 
     ("armv6k-nintendo-3ds", armv6k_nintendo_3ds),
 
-    ("aarch64-nintendo-switch", aarch64_nintendo_switch),
+    ("aarch64-nintendo-switch-freestanding", aarch64_nintendo_switch_freestanding),
 
     ("armv7-unknown-linux-uclibceabi", armv7_unknown_linux_uclibceabi),
     ("armv7-unknown-linux-uclibceabihf", armv7_unknown_linux_uclibceabihf),
diff --git a/src/doc/rustc/src/SUMMARY.md b/src/doc/rustc/src/SUMMARY.md
index 1c8ba490f2d..f6348b2bddc 100644
--- a/src/doc/rustc/src/SUMMARY.md
+++ b/src/doc/rustc/src/SUMMARY.md
@@ -17,7 +17,7 @@
     - [Template for Target-specific Documentation](platform-support/TEMPLATE.md)
     - [aarch64-apple-ios-sim](platform-support/aarch64-apple-ios-sim.md)
     - [\*-apple-watchos\*](platform-support/apple-watchos.md)
-    - [aarch64-nintendo-switch](platform-support/aarch64-nintendo-switch.md)
+    - [aarch64-nintendo-switch-freestanding](platform-support/aarch64-nintendo-switch-freestanding.md)
     - [armv6k-nintendo-3ds](platform-support/armv6k-nintendo-3ds.md)
     - [armv7-unknown-linux-uclibceabi](platform-support/armv7-unknown-linux-uclibceabi.md)
     - [armv7-unknown-linux-uclibceabihf](platform-support/armv7-unknown-linux-uclibceabihf.md)
diff --git a/src/doc/rustc/src/platform-support.md b/src/doc/rustc/src/platform-support.md
index 19f640f721b..7a03238f13d 100644
--- a/src/doc/rustc/src/platform-support.md
+++ b/src/doc/rustc/src/platform-support.md
@@ -209,7 +209,7 @@ target | std | host | notes
 `aarch64-apple-tvos` | * |  | ARM64 tvOS
 [`aarch64-apple-watchos-sim`](platform-support/apple-watchos.md) | ✓ |  | ARM64 Apple WatchOS Simulator
 [`aarch64-kmc-solid_asp3`](platform-support/kmc-solid.md) | ✓ |  | ARM64 SOLID with TOPPERS/ASP3
-[`aarch64-nintendo-switch`](platform-support/aarch64-nintendo-switch.md) | * |  | ARM64 Nintendo Switch, Horizon
+[`aarch64-nintendo-switch-freestanding`](platform-support/aarch64-nintendo-switch-freestanding.md) | * |  | ARM64 Nintendo Switch, Horizon
 [`aarch64-pc-windows-gnullvm`](platform-support/pc-windows-gnullvm.md) | ✓ | ✓ |
 `aarch64-unknown-freebsd` | ✓ | ✓ | ARM64 FreeBSD
 `aarch64-unknown-hermit` | ✓ |  | ARM64 HermitCore
diff --git a/src/doc/rustc/src/platform-support/aarch64-nintendo-switch.md b/src/doc/rustc/src/platform-support/aarch64-nintendo-switch-freestanding.md
similarity index 80%
rename from src/doc/rustc/src/platform-support/aarch64-nintendo-switch.md
rename to src/doc/rustc/src/platform-support/aarch64-nintendo-switch-freestanding.md
index 7eb3f21ea26..308e1fe2f92 100644
--- a/src/doc/rustc/src/platform-support/aarch64-nintendo-switch.md
+++ b/src/doc/rustc/src/platform-support/aarch64-nintendo-switch-freestanding.md
@@ -1,4 +1,4 @@
-# aarch64-nintendo-switch
+# aarch64-nintendo-switch-freestanding
 
 **Tier: 3**
 
@@ -21,7 +21,7 @@ The target can be built by enabling it for a `rustc` build:
 ```toml
 [build]
 build-stage = 1
-target = ["aarch64-nintendo-switch"]
+target = ["aarch64-nintendo-switch-freestanding"]
 ```
 
 ## Cross-compilation
@@ -38,12 +38,12 @@ If `rustc` has support for that target and the library artifacts are available,
 then Rust programs can be built for that target:
 
 ```text
-rustc --target aarch64-nintendo-switch your-code.rs
+rustc --target aarch64-nintendo-switch-freestanding your-code.rs
 ```
 
 To generate binaries in the NRO format that can be easily run on-device, you
 can use [cargo-nx](https://github.com/aarch64-switch-rs/cargo-nx):
 
 ```text
-cargo nx --triple=aarch64-nintendo-switch
+cargo nx --triple=aarch64-nintendo-switch-freestanding
 ```