all: remove scattered remnants of darwin/arm

This removes all conditions and conditional code (that I could find)
that depended on darwin/arm.

Fixes #35439 (since that only happened on darwin/arm)
Fixes #37611.

Change-Id: Ia4c32a5a4368ed75231075832b0b5bfb1ad11986
Reviewed-on: https://go-review.googlesource.com/c/go/+/227198
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
diff --git a/misc/cgo/test/pkg_test.go b/misc/cgo/test/pkg_test.go
index 08e075c..26c50ad 100644
--- a/misc/cgo/test/pkg_test.go
+++ b/misc/cgo/test/pkg_test.go
@@ -32,7 +32,7 @@
 		t.Skip("Can't exec cmd/go subprocess on Android.")
 	case "darwin":
 		switch runtime.GOARCH {
-		case "arm", "arm64":
+		case "arm64":
 			t.Skip("Can't exec cmd/go subprocess on iOS.")
 		}
 	}
diff --git a/misc/cgo/test/sigaltstack.go b/misc/cgo/test/sigaltstack.go
index 7b3f4ac..f501f9b 100644
--- a/misc/cgo/test/sigaltstack.go
+++ b/misc/cgo/test/sigaltstack.go
@@ -62,7 +62,7 @@
 
 func testSigaltstack(t *testing.T) {
 	switch {
-	case runtime.GOOS == "solaris", runtime.GOOS == "illumos", runtime.GOOS == "darwin" && (runtime.GOARCH == "arm" || runtime.GOARCH == "arm64"):
+	case runtime.GOOS == "solaris", runtime.GOOS == "illumos", runtime.GOOS == "darwin" && runtime.GOARCH == "arm64":
 		t.Skipf("switching signal stack not implemented on %s/%s", runtime.GOOS, runtime.GOARCH)
 	case runtime.GOOS == "darwin" && runtime.GOARCH == "386":
 		t.Skipf("sigaltstack fails on darwin/386")
diff --git a/misc/cgo/test/testx.go b/misc/cgo/test/testx.go
index 42979b5..98c48fa 100644
--- a/misc/cgo/test/testx.go
+++ b/misc/cgo/test/testx.go
@@ -159,7 +159,7 @@
 }
 
 func testCthread(t *testing.T) {
-	if runtime.GOOS == "darwin" && (runtime.GOARCH == "arm" || runtime.GOARCH == "arm64") {
+	if runtime.GOOS == "darwin" && runtime.GOARCH == "arm64" {
 		t.Skip("the iOS exec wrapper is unable to properly handle the panic from Add")
 	}
 	sum.i = 0
diff --git a/misc/cgo/testcarchive/carchive_test.go b/misc/cgo/testcarchive/carchive_test.go
index 82a1a5a..b4a046c 100644
--- a/misc/cgo/testcarchive/carchive_test.go
+++ b/misc/cgo/testcarchive/carchive_test.go
@@ -134,7 +134,7 @@
 	} else {
 		switch GOOS {
 		case "darwin":
-			if GOARCH == "arm" || GOARCH == "arm64" {
+			if GOARCH == "arm64" {
 				libbase += "_shared"
 			}
 		case "dragonfly", "freebsd", "linux", "netbsd", "openbsd", "solaris", "illumos":
@@ -305,7 +305,7 @@
 	switch GOOS {
 	case "darwin":
 		switch GOARCH {
-		case "arm", "arm64":
+		case "arm64":
 			t.Skipf("skipping on %s/%s; see https://golang.org/issue/13701", GOOS, GOARCH)
 		}
 	case "windows":
@@ -487,7 +487,7 @@
 	switch GOOS {
 	case "darwin":
 		switch GOARCH {
-		case "arm", "arm64":
+		case "arm64":
 			t.Skipf("skipping on %s/%s; see https://golang.org/issue/13701", GOOS, GOARCH)
 		}
 	case "windows":
@@ -603,7 +603,7 @@
 	if runtime.Compiler == "gccgo" {
 		t.Skip("skipping -extar test when using gccgo")
 	}
-	if runtime.GOOS == "darwin" && (runtime.GOARCH == "arm" || runtime.GOARCH == "arm64") {
+	if runtime.GOOS == "darwin" && runtime.GOARCH == "arm64" {
 		t.Skip("shell scripts are not executable on iOS hosts")
 	}
 
diff --git a/misc/cgo/testcshared/cshared_test.go b/misc/cgo/testcshared/cshared_test.go
index cb95153..bd4d341 100644
--- a/misc/cgo/testcshared/cshared_test.go
+++ b/misc/cgo/testcshared/cshared_test.go
@@ -108,7 +108,7 @@
 	libgodir := GOOS + "_" + GOARCH
 	switch GOOS {
 	case "darwin":
-		if GOARCH == "arm" || GOARCH == "arm64" {
+		if GOARCH == "arm64" {
 			libgodir += "_shared"
 		}
 	case "dragonfly", "freebsd", "linux", "netbsd", "openbsd", "solaris", "illumos":
diff --git a/misc/cgo/testso/so_test.go b/misc/cgo/testso/so_test.go
index f940170..bdd6bd8 100644
--- a/misc/cgo/testso/so_test.go
+++ b/misc/cgo/testso/so_test.go
@@ -20,7 +20,7 @@
 func requireTestSOSupported(t *testing.T) {
 	t.Helper()
 	switch runtime.GOARCH {
-	case "arm", "arm64":
+	case "arm64":
 		if runtime.GOOS == "darwin" {
 			t.Skip("No exec facility on iOS.")
 		}
diff --git a/misc/cgo/testsovar/so_test.go b/misc/cgo/testsovar/so_test.go
index f940170..bdd6bd8 100644
--- a/misc/cgo/testsovar/so_test.go
+++ b/misc/cgo/testsovar/so_test.go
@@ -20,7 +20,7 @@
 func requireTestSOSupported(t *testing.T) {
 	t.Helper()
 	switch runtime.GOARCH {
-	case "arm", "arm64":
+	case "arm64":
 		if runtime.GOOS == "darwin" {
 			t.Skip("No exec facility on iOS.")
 		}
diff --git a/misc/ios/clangwrap.sh b/misc/ios/clangwrap.sh
index c69a9bf..5fdbb6d 100755
--- a/misc/ios/clangwrap.sh
+++ b/misc/ios/clangwrap.sh
@@ -8,9 +8,7 @@
 # cmd/cgo doesn't support llvm-gcc-4.2, so we have to use clang.
 CLANG=`xcrun --sdk $SDK --find clang`
 
-if [ "$GOARCH" == "arm" ]; then
-	CLANGARCH="armv7"
-elif [ "$GOARCH" == "arm64" ]; then
+if [ "$GOARCH" == "arm64" ]; then
 	CLANGARCH="arm64"
 else
 	echo "unknown GOARCH=$GOARCH" >&2
diff --git a/src/buildall.bash b/src/buildall.bash
index 18d0b0d..dc67c06 100755
--- a/src/buildall.bash
+++ b/src/buildall.bash
@@ -42,7 +42,7 @@
 }
 
 selectedtargets() {
-	gettargets | egrep -v 'android-arm|darwin-arm' | egrep "$pattern"
+	gettargets | egrep -v 'android-arm|darwin-arm64' | egrep "$pattern"
 }
 
 # put linux first in the target list to get all the architectures up front.
diff --git a/src/cmd/dist/build.go b/src/cmd/dist/build.go
index ab55a98..9e2b4f3 100644
--- a/src/cmd/dist/build.go
+++ b/src/cmd/dist/build.go
@@ -1461,8 +1461,8 @@
 		if gohostos != "android" {
 			return pathf("%s/misc/android/go_android_exec.go", goroot)
 		}
-	case goos == "darwin" && (goarch == "arm" || goarch == "arm64"):
-		if gohostos != "darwin" || (gohostarch != "arm" && gohostarch != "arm64") {
+	case goos == "darwin" && goarch == "arm64":
+		if gohostos != "darwin" || gohostarch != "arm64" {
 			return pathf("%s/misc/ios/go_darwin_arm_exec.go", goroot)
 		}
 	}
diff --git a/src/cmd/dist/test.go b/src/cmd/dist/test.go
index 0ab5e6e..a7ef8f2 100644
--- a/src/cmd/dist/test.go
+++ b/src/cmd/dist/test.go
@@ -887,7 +887,7 @@
 }
 
 func (t *tester) iOS() bool {
-	return goos == "darwin" && (goarch == "arm" || goarch == "arm64")
+	return goos == "darwin" && goarch == "arm64"
 }
 
 func (t *tester) out(v string) {
@@ -902,7 +902,7 @@
 	switch pair {
 	case "aix-ppc64",
 		"android-arm", "android-arm64",
-		"darwin-386", "darwin-amd64", "darwin-arm", "darwin-arm64",
+		"darwin-386", "darwin-amd64", "darwin-arm64",
 		"dragonfly-amd64",
 		"freebsd-386", "freebsd-amd64", "freebsd-arm",
 		"linux-386", "linux-amd64", "linux-arm", "linux-arm64", "linux-ppc64le", "linux-mips64", "linux-mips64le", "linux-mips", "linux-mipsle", "linux-s390x",
@@ -927,7 +927,7 @@
 	if goos == "android" {
 		return false
 	}
-	if goos == "darwin" && (goarch == "arm" || goarch == "arm64") {
+	if t.iOS() {
 		return false
 	}
 	// Internally linking cgo is incomplete on some architectures.
@@ -963,7 +963,7 @@
 		}
 		switch pair {
 		case "aix-ppc64",
-			"darwin-386", "darwin-amd64", "darwin-arm", "darwin-arm64",
+			"darwin-386", "darwin-amd64", "darwin-arm64",
 			"linux-amd64", "linux-386", "linux-ppc64le", "linux-s390x",
 			"freebsd-amd64",
 			"windows-amd64", "windows-386":
diff --git a/src/cmd/dist/util.go b/src/cmd/dist/util.go
index b9e8a51..0a419e4 100644
--- a/src/cmd/dist/util.go
+++ b/src/cmd/dist/util.go
@@ -383,8 +383,8 @@
 }
 
 func xgetgoarm() string {
-	if goos == "darwin" || goos == "android" {
-		// Assume all darwin/arm and android devices have VFPv3.
+	if goos == "android" {
+		// Assume all android devices have VFPv3.
 		// These ports are also mostly cross-compiled, so it makes little
 		// sense to auto-detect the setting.
 		return "7"
diff --git a/src/cmd/doc/doc_test.go b/src/cmd/doc/doc_test.go
index fd2ae30..80b8cd4 100644
--- a/src/cmd/doc/doc_test.go
+++ b/src/cmd/doc/doc_test.go
@@ -36,8 +36,8 @@
 }
 
 func maybeSkip(t *testing.T) {
-	if runtime.GOOS == "darwin" && strings.HasPrefix(runtime.GOARCH, "arm") {
-		t.Skip("darwin/arm does not have a full file tree")
+	if runtime.GOOS == "darwin" && runtime.GOARCH == "arm64" {
+		t.Skip("darwin/arm64 does not have a full file tree")
 	}
 }
 
diff --git a/src/cmd/go/go_test.go b/src/cmd/go/go_test.go
index 33c3f48..723e1d9 100644
--- a/src/cmd/go/go_test.go
+++ b/src/cmd/go/go_test.go
@@ -61,7 +61,7 @@
 		canRun = false
 	case "darwin":
 		switch runtime.GOARCH {
-		case "arm", "arm64":
+		case "arm64":
 			canRun = false
 		}
 	case "linux":
diff --git a/src/cmd/go/internal/load/pkg.go b/src/cmd/go/internal/load/pkg.go
index 247f5ed..3c018a0 100644
--- a/src/cmd/go/internal/load/pkg.go
+++ b/src/cmd/go/internal/load/pkg.go
@@ -1940,8 +1940,7 @@
 			return true
 		}
 	case "darwin":
-		switch cfg.BuildContext.GOARCH {
-		case "arm", "arm64":
+		if cfg.BuildContext.GOARCH == "arm64" {
 			return true
 		}
 	}
diff --git a/src/cmd/go/internal/work/build_test.go b/src/cmd/go/internal/work/build_test.go
index b60f4e2..c33de26 100644
--- a/src/cmd/go/internal/work/build_test.go
+++ b/src/cmd/go/internal/work/build_test.go
@@ -222,7 +222,7 @@
 func TestRespectSetgidDir(t *testing.T) {
 	switch runtime.GOOS {
 	case "darwin":
-		if runtime.GOARCH == "arm" || runtime.GOARCH == "arm64" {
+		if runtime.GOARCH == "arm64" {
 			t.Skip("can't set SetGID bit with chmod on iOS")
 		}
 	case "windows", "plan9":
diff --git a/src/cmd/go/internal/work/init.go b/src/cmd/go/internal/work/init.go
index a574924..473bd1a 100644
--- a/src/cmd/go/internal/work/init.go
+++ b/src/cmd/go/internal/work/init.go
@@ -117,7 +117,7 @@
 			switch cfg.Goos {
 			case "darwin":
 				switch cfg.Goarch {
-				case "arm", "arm64":
+				case "arm64":
 					codegenArg = "-shared"
 				}
 
@@ -151,7 +151,7 @@
 			ldBuildmode = "pie"
 		case "darwin":
 			switch cfg.Goarch {
-			case "arm", "arm64":
+			case "arm64":
 				codegenArg = "-shared"
 			}
 			fallthrough
diff --git a/src/cmd/internal/sys/supported.go b/src/cmd/internal/sys/supported.go
index 639827b..efc07af 100644
--- a/src/cmd/internal/sys/supported.go
+++ b/src/cmd/internal/sys/supported.go
@@ -39,7 +39,7 @@
 			return true
 		}
 	case "darwin":
-		if goarch == "arm" || goarch == "arm64" {
+		if goarch == "arm64" {
 			return true
 		}
 	}
diff --git a/src/cmd/link/internal/arm/asm.go b/src/cmd/link/internal/arm/asm.go
index 43ee4bf..8472cb8 100644
--- a/src/cmd/link/internal/arm/asm.go
+++ b/src/cmd/link/internal/arm/asm.go
@@ -789,11 +789,6 @@
 }
 
 func asmb2(ctxt *ld.Link) {
-	machlink := uint32(0)
-	if ctxt.HeadType == objabi.Hdarwin {
-		machlink = uint32(ld.Domacholink(ctxt))
-	}
-
 	/* output symbol table */
 	ld.Symsize = 0
 
@@ -811,9 +806,6 @@
 		case objabi.Hplan9:
 			symo = uint32(ld.Segdata.Fileoff + ld.Segdata.Filelen)
 
-		case objabi.Hdarwin:
-			symo = uint32(ld.Segdwarf.Fileoff + uint64(ld.Rnd(int64(ld.Segdwarf.Filelen), int64(*ld.FlagRound))) + uint64(machlink))
-
 		case objabi.Hwindows:
 			symo = uint32(ld.Segdwarf.Fileoff + ld.Segdwarf.Filelen)
 			symo = uint32(ld.Rnd(int64(symo), ld.PEFILEALIGN))
@@ -845,11 +837,6 @@
 
 		case objabi.Hwindows:
 			// Do nothing
-
-		case objabi.Hdarwin:
-			if ctxt.LinkMode == ld.LinkExternal {
-				ld.Machoemitreloc(ctxt)
-			}
 		}
 	}
 
@@ -872,9 +859,6 @@
 		objabi.Hopenbsd:
 		ld.Asmbelf(ctxt, int64(symo))
 
-	case objabi.Hdarwin:
-		ld.Asmbmacho(ctxt)
-
 	case objabi.Hwindows:
 		ld.Asmbpe(ctxt)
 	}
diff --git a/src/cmd/link/internal/arm/obj.go b/src/cmd/link/internal/arm/obj.go
index 27246df..003c80a 100644
--- a/src/cmd/link/internal/arm/obj.go
+++ b/src/cmd/link/internal/arm/obj.go
@@ -100,15 +100,6 @@
 			*ld.FlagRound = 0x10000
 		}
 
-	case objabi.Hdarwin: /* apple MACH */
-		ld.HEADR = ld.INITIAL_MACHO_HEADR
-		if *ld.FlagTextAddr == -1 {
-			*ld.FlagTextAddr = 4096 + int64(ld.HEADR)
-		}
-		if *ld.FlagRound == -1 {
-			*ld.FlagRound = 4096
-		}
-
 	case objabi.Hwindows: /* PE executable */
 		// ld.HEADR, ld.FlagTextAddr, ld.FlagRound are set in ld.Peinit
 		return
diff --git a/src/cmd/link/internal/ld/sym.go b/src/cmd/link/internal/ld/sym.go
index 97966ed..2284963 100644
--- a/src/cmd/link/internal/ld/sym.go
+++ b/src/cmd/link/internal/ld/sym.go
@@ -106,9 +106,6 @@
 		case sys.AMD64:
 			ctxt.Tlsoffset = 0x30
 
-		case sys.ARM:
-			ctxt.Tlsoffset = 0 // dummy value, not needed
-
 		case sys.ARM64:
 			ctxt.Tlsoffset = 0 // dummy value, not needed
 		}
diff --git a/src/cmd/oldlink/internal/arm/asm.go b/src/cmd/oldlink/internal/arm/asm.go
index 8db0bc3..a2a0879 100644
--- a/src/cmd/oldlink/internal/arm/asm.go
+++ b/src/cmd/oldlink/internal/arm/asm.go
@@ -618,15 +618,6 @@
 			}
 			r.Xsym = rs
 
-			// ld64 for arm seems to want the symbol table to contain offset
-			// into the section rather than pseudo virtual address that contains
-			// the section load address.
-			// we need to compensate that by removing the instruction's address
-			// from addend.
-			if ctxt.HeadType == objabi.Hdarwin {
-				r.Xadd -= ld.Symaddr(s) + int64(r.Off)
-			}
-
 			if r.Xadd/4 > 0x7fffff || r.Xadd/4 < -0x800000 {
 				ld.Errorf(s, "direct call too far %d", r.Xadd/4)
 			}
@@ -789,11 +780,6 @@
 }
 
 func asmb2(ctxt *ld.Link) {
-	machlink := uint32(0)
-	if ctxt.HeadType == objabi.Hdarwin {
-		machlink = uint32(ld.Domacholink(ctxt))
-	}
-
 	/* output symbol table */
 	ld.Symsize = 0
 
@@ -811,9 +797,6 @@
 		case objabi.Hplan9:
 			symo = uint32(ld.Segdata.Fileoff + ld.Segdata.Filelen)
 
-		case objabi.Hdarwin:
-			symo = uint32(ld.Segdwarf.Fileoff + uint64(ld.Rnd(int64(ld.Segdwarf.Filelen), int64(*ld.FlagRound))) + uint64(machlink))
-
 		case objabi.Hwindows:
 			symo = uint32(ld.Segdwarf.Fileoff + ld.Segdwarf.Filelen)
 			symo = uint32(ld.Rnd(int64(symo), ld.PEFILEALIGN))
@@ -845,11 +828,6 @@
 
 		case objabi.Hwindows:
 			// Do nothing
-
-		case objabi.Hdarwin:
-			if ctxt.LinkMode == ld.LinkExternal {
-				ld.Machoemitreloc(ctxt)
-			}
 		}
 	}
 
@@ -872,9 +850,6 @@
 		objabi.Hopenbsd:
 		ld.Asmbelf(ctxt, int64(symo))
 
-	case objabi.Hdarwin:
-		ld.Asmbmacho(ctxt)
-
 	case objabi.Hwindows:
 		ld.Asmbpe(ctxt)
 	}
diff --git a/src/cmd/oldlink/internal/arm/obj.go b/src/cmd/oldlink/internal/arm/obj.go
index 1fe4b9c..c423937 100644
--- a/src/cmd/oldlink/internal/arm/obj.go
+++ b/src/cmd/oldlink/internal/arm/obj.go
@@ -100,15 +100,6 @@
 			*ld.FlagRound = 0x10000
 		}
 
-	case objabi.Hdarwin: /* apple MACH */
-		ld.HEADR = ld.INITIAL_MACHO_HEADR
-		if *ld.FlagTextAddr == -1 {
-			*ld.FlagTextAddr = 4096 + int64(ld.HEADR)
-		}
-		if *ld.FlagRound == -1 {
-			*ld.FlagRound = 4096
-		}
-
 	case objabi.Hwindows: /* PE executable */
 		// ld.HEADR, ld.FlagTextAddr, ld.FlagRound are set in ld.Peinit
 		return
diff --git a/src/cmd/oldlink/internal/ld/sym.go b/src/cmd/oldlink/internal/ld/sym.go
index c0f725c..a470ddb 100644
--- a/src/cmd/oldlink/internal/ld/sym.go
+++ b/src/cmd/oldlink/internal/ld/sym.go
@@ -104,9 +104,6 @@
 		case sys.AMD64:
 			ctxt.Tlsoffset = 0x30
 
-		case sys.ARM:
-			ctxt.Tlsoffset = 0 // dummy value, not needed
-
 		case sys.ARM64:
 			ctxt.Tlsoffset = 0 // dummy value, not needed
 		}
diff --git a/src/crypto/x509/root_darwin_test.go b/src/crypto/x509/root_darwin_test.go
index 0a1529e..bd14d34 100644
--- a/src/crypto/x509/root_darwin_test.go
+++ b/src/crypto/x509/root_darwin_test.go
@@ -16,7 +16,7 @@
 
 func TestSystemRoots(t *testing.T) {
 	switch runtime.GOARCH {
-	case "arm", "arm64":
+	case "arm64":
 		t.Skipf("skipping on %s/%s, no system root", runtime.GOOS, runtime.GOARCH)
 	}
 
diff --git a/src/go/build/build_test.go b/src/go/build/build_test.go
index 05ddb49..7151ba1 100644
--- a/src/go/build/build_test.go
+++ b/src/go/build/build_test.go
@@ -111,11 +111,8 @@
 }
 
 func TestLocalDirectory(t *testing.T) {
-	if runtime.GOOS == "darwin" {
-		switch runtime.GOARCH {
-		case "arm", "arm64":
-			t.Skipf("skipping on %s/%s, no valid GOROOT", runtime.GOOS, runtime.GOARCH)
-		}
+	if runtime.GOOS == "darwin" && runtime.GOARCH == "arm64" {
+		t.Skipf("skipping on %s/%s, no valid GOROOT", runtime.GOOS, runtime.GOARCH)
 	}
 
 	cwd, err := os.Getwd()
@@ -244,11 +241,8 @@
 }
 
 func TestImportCmd(t *testing.T) {
-	if runtime.GOOS == "darwin" {
-		switch runtime.GOARCH {
-		case "arm", "arm64":
-			t.Skipf("skipping on %s/%s, no valid GOROOT", runtime.GOOS, runtime.GOARCH)
-		}
+	if runtime.GOOS == "darwin" && runtime.GOARCH == "arm64" {
+		t.Skipf("skipping on %s/%s, no valid GOROOT", runtime.GOOS, runtime.GOARCH)
 	}
 
 	p, err := Import("cmd/internal/objfile", "", 0)
diff --git a/src/go/build/deps_test.go b/src/go/build/deps_test.go
index 91ecae8..6585855 100644
--- a/src/go/build/deps_test.go
+++ b/src/go/build/deps_test.go
@@ -517,7 +517,7 @@
 }
 
 func TestDependencies(t *testing.T) {
-	iOS := runtime.GOOS == "darwin" && (runtime.GOARCH == "arm" || runtime.GOARCH == "arm64")
+	iOS := runtime.GOOS == "darwin" && runtime.GOARCH == "arm64"
 	if iOS {
 		// Tests run in a limited file system and we do not
 		// provide access to every source file.
diff --git a/src/go/internal/gcimporter/gcimporter_test.go b/src/go/internal/gcimporter/gcimporter_test.go
index 0ccf60a..663753a 100644
--- a/src/go/internal/gcimporter/gcimporter_test.go
+++ b/src/go/internal/gcimporter/gcimporter_test.go
@@ -26,8 +26,7 @@
 // import.
 func skipSpecialPlatforms(t *testing.T) {
 	switch platform := runtime.GOOS + "-" + runtime.GOARCH; platform {
-	case "darwin-arm",
-		"darwin-arm64":
+	case "darwin-arm64":
 		t.Skipf("no compiled packages available for import on %s", platform)
 	}
 }
diff --git a/src/internal/testenv/testenv.go b/src/internal/testenv/testenv.go
index b036aa6..309b270 100644
--- a/src/internal/testenv/testenv.go
+++ b/src/internal/testenv/testenv.go
@@ -46,7 +46,7 @@
 	case "android", "js":
 		return false
 	case "darwin":
-		if strings.HasPrefix(runtime.GOARCH, "arm") {
+		if runtime.GOARCH == "arm64" {
 			return false
 		}
 	}
@@ -125,7 +125,7 @@
 	case "js":
 		return false
 	case "darwin":
-		if strings.HasPrefix(runtime.GOARCH, "arm") {
+		if runtime.GOARCH == "arm64" {
 			return false
 		}
 	}
@@ -136,7 +136,7 @@
 func HasSrc() bool {
 	switch runtime.GOOS {
 	case "darwin":
-		if strings.HasPrefix(runtime.GOARCH, "arm") {
+		if runtime.GOARCH == "arm64" {
 			return false
 		}
 	}
diff --git a/src/iostest.bash b/src/iostest.bash
index 1fc1666..5fa6744 100755
--- a/src/iostest.bash
+++ b/src/iostest.bash
@@ -3,7 +3,7 @@
 # Use of this source code is governed by a BSD-style
 # license that can be found in the LICENSE file.
 
-# For testing darwin/arm{,64} on iOS.
+# For testing darwin/arm64 on iOS.
 
 set -e
 ulimit -c 0 # no core files
@@ -20,13 +20,10 @@
 	echo "iostest.bash requires GOOS=darwin, got GOOS=$GOOS" 1>&2
 	exit 1
 fi
-if [ "$GOARCH" != "arm" ] && [ "$GOARCH" != "arm64" ]; then
-	echo "iostest.bash requires GOARCH=arm or GOARCH=arm64, got GOARCH=$GOARCH" 1>&2
+if [ "$GOARCH" != "arm64" ]; then
+	echo "iostest.bash requires GOARCH=arm64, got GOARCH=$GOARCH" 1>&2
 	exit 1
 fi
-if [ "$GOARCH" = "arm" ]; then
-	export GOARM=7
-fi
 
 if [ "$1" = "-restart" ]; then
 	# Reboot to make sure previous runs do not interfere with the current run.
diff --git a/src/log/syslog/syslog_test.go b/src/log/syslog/syslog_test.go
index b2cf8df..f778e96 100644
--- a/src/log/syslog/syslog_test.go
+++ b/src/log/syslog/syslog_test.go
@@ -53,7 +53,7 @@
 		switch runtime.GOOS {
 		case "darwin":
 			switch runtime.GOARCH {
-			case "arm", "arm64":
+			case "arm64":
 				return false
 			}
 		case "android":
diff --git a/src/net/dial_test.go b/src/net/dial_test.go
index 78feaae..aedf643 100644
--- a/src/net/dial_test.go
+++ b/src/net/dial_test.go
@@ -991,7 +991,7 @@
 // except that it won't skip testing on non-mobile builders.
 func mustHaveExternalNetwork(t *testing.T) {
 	t.Helper()
-	mobile := runtime.GOOS == "android" || runtime.GOOS == "darwin" && (runtime.GOARCH == "arm" || runtime.GOARCH == "arm64")
+	mobile := runtime.GOOS == "android" || runtime.GOOS == "darwin" && runtime.GOARCH == "arm64"
 	if testenv.Builder() == "" || mobile {
 		testenv.MustHaveExternalNetwork(t)
 	}
diff --git a/src/net/lookup_test.go b/src/net/lookup_test.go
index 2bc5592..4956037 100644
--- a/src/net/lookup_test.go
+++ b/src/net/lookup_test.go
@@ -74,7 +74,7 @@
 	t.Parallel()
 	mustHaveExternalNetwork(t)
 
-	if runtime.GOOS == "darwin" && (runtime.GOARCH == "arm" || runtime.GOARCH == "arm64") {
+	if iOS() {
 		t.Skip("no resolv.conf on iOS")
 	}
 
@@ -123,7 +123,7 @@
 	t.Parallel()
 	mustHaveExternalNetwork(t)
 
-	if runtime.GOOS == "darwin" && (runtime.GOARCH == "arm" || runtime.GOARCH == "arm64") {
+	if iOS() {
 		t.Skip("no resolv.conf on iOS")
 	}
 
@@ -169,7 +169,7 @@
 	t.Parallel()
 	mustHaveExternalNetwork(t)
 
-	if runtime.GOOS == "darwin" && (runtime.GOARCH == "arm" || runtime.GOARCH == "arm64") {
+	if iOS() {
 		t.Skip("no resolv.conf on iOS")
 	}
 
@@ -218,7 +218,7 @@
 	t.Parallel()
 	mustHaveExternalNetwork(t)
 
-	if runtime.GOOS == "darwin" && (runtime.GOARCH == "arm" || runtime.GOARCH == "arm64") {
+	if iOS() {
 		t.Skip("no resolv.conf on iOS")
 	}
 
@@ -637,7 +637,7 @@
 		t.Skip("IPv4 is required")
 	}
 
-	if runtime.GOOS == "darwin" && (runtime.GOARCH == "arm" || runtime.GOARCH == "arm64") {
+	if iOS() {
 		t.Skip("no resolv.conf on iOS")
 	}
 
diff --git a/src/net/platform_test.go b/src/net/platform_test.go
index d35dfaa..d3bb918 100644
--- a/src/net/platform_test.go
+++ b/src/net/platform_test.go
@@ -54,7 +54,7 @@
 			return unixEnabledOnAIX
 		}
 		// iOS does not support unix, unixgram.
-		if runtime.GOOS == "darwin" && (runtime.GOARCH == "arm" || runtime.GOARCH == "arm64") {
+		if iOS() {
 			return false
 		}
 	case "unixpacket":
@@ -81,6 +81,10 @@
 	return true
 }
 
+func iOS() bool {
+	return runtime.GOOS == "darwin" && runtime.GOARCH == "arm64"
+}
+
 // testableAddress reports whether address of network is testable on
 // the current platform configuration.
 func testableAddress(network, address string) bool {
diff --git a/src/net/timeout_test.go b/src/net/timeout_test.go
index f54c956..51123df 100644
--- a/src/net/timeout_test.go
+++ b/src/net/timeout_test.go
@@ -745,7 +745,7 @@
 	defer c.Close()
 
 	d := time.Second
-	if runtime.GOOS == "darwin" && (runtime.GOARCH == "arm" || runtime.GOARCH == "arm64") {
+	if iOS() {
 		d = 3 * time.Second // see golang.org/issue/10775
 	}
 	max := time.NewTimer(d)
diff --git a/src/os/file.go b/src/os/file.go
index 9f8c827..94341f9 100644
--- a/src/os/file.go
+++ b/src/os/file.go
@@ -482,7 +482,7 @@
 	case "android":
 		return "/sdcard", nil
 	case "darwin":
-		if runtime.GOARCH == "arm" || runtime.GOARCH == "arm64" {
+		if runtime.GOARCH == "arm64" {
 			return "/", nil
 		}
 	}
diff --git a/src/os/os_test.go b/src/os/os_test.go
index 44e1434..978e991 100644
--- a/src/os/os_test.go
+++ b/src/os/os_test.go
@@ -54,7 +54,7 @@
 		}
 	case "darwin":
 		switch runtime.GOARCH {
-		case "arm", "arm64":
+		case "arm64":
 			wd, err := syscall.Getwd()
 			if err != nil {
 				wd = err.Error()
@@ -146,7 +146,7 @@
 		return TempDir()
 	case "darwin":
 		switch runtime.GOARCH {
-		case "arm", "arm64":
+		case "arm64":
 			return TempDir()
 		}
 	}
@@ -483,7 +483,7 @@
 		dir = "/system/bin"
 	case "darwin":
 		switch runtime.GOARCH {
-		case "arm", "arm64":
+		case "arm64":
 			wd, err := Getwd()
 			if err != nil {
 				t.Fatal(err)
@@ -1297,7 +1297,7 @@
 		dirs = []string{"/", "/usr"}
 	case "darwin":
 		switch runtime.GOARCH {
-		case "arm", "arm64":
+		case "arm64":
 			dirs = nil
 			for _, d := range []string{"d1", "d2"} {
 				dir, err := ioutil.TempDir("", d)
diff --git a/src/os/path_test.go b/src/os/path_test.go
index 6cb25bc..d586daf 100644
--- a/src/os/path_test.go
+++ b/src/os/path_test.go
@@ -109,8 +109,8 @@
 		t.Skipf("skipping on %s", runtime.GOOS)
 	case "darwin":
 		switch runtime.GOARCH {
-		case "arm", "arm64":
-			t.Skipf("skipping on darwin/%s, mkdir returns EPERM", runtime.GOARCH)
+		case "arm64":
+			t.Skipf("skipping on darwin/arm64, mkdir returns EPERM")
 		}
 	}
 	RemoveAll("/_go_os_test")
diff --git a/src/os/wait_waitid.go b/src/os/wait_waitid.go
index 946c085..c57bace 100644
--- a/src/os/wait_waitid.go
+++ b/src/os/wait_waitid.go
@@ -24,7 +24,7 @@
 	// The waitid system call expects a pointer to a siginfo_t,
 	// which is 128 bytes on all GNU/Linux systems.
 	// On Darwin, it requires greater than or equal to 64 bytes
-	// for darwin/{386,arm} and 104 bytes for darwin/amd64.
+	// for darwin/386 and 104 bytes for darwin/amd64.
 	// We don't care about the values it returns.
 	var siginfo [16]uint64
 	psig := &siginfo[0]
diff --git a/src/path/filepath/path_test.go b/src/path/filepath/path_test.go
index 2d13149..d6f6805 100644
--- a/src/path/filepath/path_test.go
+++ b/src/path/filepath/path_test.go
@@ -431,12 +431,9 @@
 }
 
 func TestWalk(t *testing.T) {
-	if runtime.GOOS == "darwin" {
-		switch runtime.GOARCH {
-		case "arm", "arm64":
-			restore := chtmpdir(t)
-			defer restore()
-		}
+	if runtime.GOOS == "darwin" && runtime.GOARCH == "arm64" {
+		restore := chtmpdir(t)
+		defer restore()
 	}
 
 	tmpDir, err := ioutil.TempDir("", "TestWalk")
@@ -1281,11 +1278,8 @@
 }
 
 func TestBug3486(t *testing.T) { // https://golang.org/issue/3486
-	if runtime.GOOS == "darwin" {
-		switch runtime.GOARCH {
-		case "arm", "arm64":
-			t.Skipf("skipping on %s/%s", runtime.GOOS, runtime.GOARCH)
-		}
+	if runtime.GOOS == "darwin" && runtime.GOARCH == "arm64" {
+		t.Skipf("skipping on %s/%s", runtime.GOOS, runtime.GOARCH)
 	}
 	root, err := filepath.EvalSymlinks(runtime.GOROOT() + "/test")
 	if err != nil {
diff --git a/src/runtime/cgo/cgo.go b/src/runtime/cgo/cgo.go
index 5b3c701..c02b837 100644
--- a/src/runtime/cgo/cgo.go
+++ b/src/runtime/cgo/cgo.go
@@ -11,8 +11,7 @@
 
 /*
 
-#cgo darwin,!arm,!arm64 LDFLAGS: -lpthread
-#cgo darwin,arm LDFLAGS: -framework CoreFoundation
+#cgo darwin,!arm64 LDFLAGS: -lpthread
 #cgo darwin,arm64 LDFLAGS: -framework CoreFoundation
 #cgo dragonfly LDFLAGS: -lpthread
 #cgo freebsd LDFLAGS: -lpthread
diff --git a/src/runtime/cgo/gcc_darwin_arm64.c b/src/runtime/cgo/gcc_darwin_arm64.c
index e6e3057..fd7d408 100644
--- a/src/runtime/cgo/gcc_darwin_arm64.c
+++ b/src/runtime/cgo/gcc_darwin_arm64.c
@@ -94,7 +94,7 @@
 }
 
 // init_working_dir sets the current working directory to the app root.
-// By default darwin/arm processes start in "/".
+// By default darwin/arm64 processes start in "/".
 static void
 init_working_dir()
 {
diff --git a/src/runtime/os_darwin.go b/src/runtime/os_darwin.go
index c11fbec..01c40b4 100644
--- a/src/runtime/os_darwin.go
+++ b/src/runtime/os_darwin.go
@@ -289,9 +289,9 @@
 // Called to initialize a new m (including the bootstrap m).
 // Called on the new thread, cannot allocate memory.
 func minit() {
-	// The alternate signal stack is buggy on arm and arm64.
+	// The alternate signal stack is buggy on arm64.
 	// The signal handler handles it directly.
-	if GOARCH != "arm" && GOARCH != "arm64" {
+	if GOARCH != "arm64" {
 		minitSignalStack()
 	}
 	minitSignalMask()
@@ -301,9 +301,9 @@
 // Called from dropm to undo the effect of an minit.
 //go:nosplit
 func unminit() {
-	// The alternate signal stack is buggy on arm and arm64.
+	// The alternate signal stack is buggy on arm64.
 	// See minit.
-	if GOARCH != "arm" && GOARCH != "arm64" {
+	if GOARCH != "arm64" {
 		unminitSignals()
 	}
 }
diff --git a/src/runtime/pprof/pprof_test.go b/src/runtime/pprof/pprof_test.go
index 83b3152..e78f1a4 100644
--- a/src/runtime/pprof/pprof_test.go
+++ b/src/runtime/pprof/pprof_test.go
@@ -226,7 +226,7 @@
 	switch runtime.GOOS {
 	case "darwin":
 		switch runtime.GOARCH {
-		case "arm", "arm64":
+		case "arm64":
 			// nothing
 		default:
 			out, err := exec.Command("uname", "-a").CombinedOutput()
diff --git a/src/runtime/signal_arm.go b/src/runtime/signal_arm.go
index 1663d91..e1d1924 100644
--- a/src/runtime/signal_arm.go
+++ b/src/runtime/signal_arm.go
@@ -63,9 +63,7 @@
 	c.set_pc(uint32(funcPC(sigpanic)))
 }
 
-// TODO(issue 35439): enabling async preemption causes failures on darwin/arm.
-// Disable for now.
-const pushCallSupported = GOOS != "darwin"
+const pushCallSupported = true
 
 func (c *sigctxt) pushCall(targetPC uintptr) {
 	// Push the LR to stack, as we'll clobber it in order to
diff --git a/src/runtime/signal_unix.go b/src/runtime/signal_unix.go
index b8f27d1..5dbfbaf 100644
--- a/src/runtime/signal_unix.go
+++ b/src/runtime/signal_unix.go
@@ -350,8 +350,8 @@
 		// yet, so doSigPreempt won't work.
 		return
 	}
-	if GOOS == "darwin" && (GOARCH == "arm" || GOARCH == "arm64") && !iscgo {
-		// On darwin, we use libc calls, and cgo is required on ARM and ARM64
+	if GOOS == "darwin" && GOARCH == "arm64" && !iscgo {
+		// On darwin, we use libc calls, and cgo is required on ARM64
 		// so we have TLS set up to save/restore G during C calls. If cgo is
 		// absent, we cannot save/restore G in TLS, and if a signal is
 		// received during C execution we cannot get the G. Therefore don't
@@ -1191,7 +1191,7 @@
 	sigaltstack(&st, nil)
 }
 
-// setsigsegv is used on darwin/arm{,64} to fake a segmentation fault.
+// setsigsegv is used on darwin/arm64 to fake a segmentation fault.
 //
 // This is exported via linkname to assembly in runtime/cgo.
 //
diff --git a/src/runtime/tls_arm.s b/src/runtime/tls_arm.s
index bed7891..e42de8d 100644
--- a/src/runtime/tls_arm.s
+++ b/src/runtime/tls_arm.s
@@ -17,14 +17,11 @@
 // Note: both functions will clobber R0 and R11 and
 // can be called from 5c ABI code.
 
-// On android and darwin, runtime.tls_g is a normal variable.
+// On android, runtime.tls_g is a normal variable.
 // TLS offset is computed in x_cgo_inittls.
 #ifdef GOOS_android
 #define TLSG_IS_VARIABLE
 #endif
-#ifdef GOOS_darwin
-#define TLSG_IS_VARIABLE
-#endif
 
 // save_g saves the g register into pthread-provided
 // thread-local memory, so that we can call externally compiled
diff --git a/src/runtime/vlrt.go b/src/runtime/vlrt.go
index f790d3b..e4d1be5 100644
--- a/src/runtime/vlrt.go
+++ b/src/runtime/vlrt.go
@@ -132,7 +132,7 @@
 
 //go:nosplit
 // nosplit because division is used in syscall context in nanotime on darwin/386
-// and darwin/arm where stack splits are not allowed.
+// where stack splits are not allowed.
 func int64div(n, d int64) int64 {
 	// Check for 32 bit operands
 	if int64(int32(n)) == n && int64(int32(d)) == d {
diff --git a/src/syscall/mkall.sh b/src/syscall/mkall.sh
index aa6706c..7e624c5 100755
--- a/src/syscall/mkall.sh
+++ b/src/syscall/mkall.sh
@@ -142,13 +142,6 @@
 	mktypes="GOARCH=$GOARCH go tool cgo -godefs"
 	mkasm="go run mkasm_darwin.go"
 	;;
-darwin_arm)
-	mkerrors="$mkerrors -m32"
-	mksyscall="./mksyscall.pl -l32 -darwin"
-	mksysnum="./mksysnum_darwin.pl /usr/include/sys/syscall.h"
-	mktypes="GOARCH=$GOARCH go tool cgo -godefs"
-	mkasm="go run mkasm_darwin.go"
-	;;
 dragonfly_amd64)
 	mkerrors="$mkerrors -m64"
 	mksyscall="./mksyscall.pl -dragonfly"
diff --git a/src/syscall/syscall_unix_test.go b/src/syscall/syscall_unix_test.go
index ff47a0c..13b79ca 100644
--- a/src/syscall/syscall_unix_test.go
+++ b/src/syscall/syscall_unix_test.go
@@ -70,7 +70,7 @@
 // Thus this test also verifies that the Flock_t structure can be
 // roundtripped with F_SETLK and F_GETLK.
 func TestFcntlFlock(t *testing.T) {
-	if runtime.GOOS == "darwin" && (runtime.GOARCH == "arm" || runtime.GOARCH == "arm64") {
+	if runtime.GOOS == "darwin" && runtime.GOARCH == "arm64" {
 		t.Skip("skipping; no child processes allowed on iOS")
 	}
 	flock := syscall.Flock_t{