-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[ commit fc4a497e2990cc62ac8bef5ce8f41a906d990b73 ] See golang/go#65601
- Loading branch information
Showing
3 changed files
with
117 additions
and
0 deletions.
There are no files selected for viewing
40 changes: 40 additions & 0 deletions
40
universe/go/0004-runtime-internal-atomic-correct-GOARM-7-guard-at-a-D.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
From 2a4ec9681acb096a8d41337a209c8822922cd0a2 Mon Sep 17 00:00:00 2001 | ||
From: Cherry Mui <[email protected]> | ||
Date: Fri, 16 Feb 2024 07:45:25 -0500 | ||
Subject: [PATCH] runtime/internal/atomic: correct GOARM=7 guard at a DMB | ||
instruction | ||
|
||
CL 525637 changed to the guard of DMB instruction from the | ||
compiled-in runtime.goarm value to GOARM_7 macro and CPU feature | ||
detection. It missed a place where runtime.goarm is loaded to a | ||
register and reused later. This CL corrects the condition. | ||
|
||
Fixes #65601. | ||
|
||
Change-Id: I2ddefd03a1eb1048dbec0254c6e234c65b054279 | ||
Reviewed-on: https://go-review.googlesource.com/c/go/+/564855 | ||
Run-TryBot: Cherry Mui <[email protected]> | ||
TryBot-Result: Gopher Robot <[email protected]> | ||
Reviewed-by: Keith Randall <[email protected]> | ||
Reviewed-by: Keith Randall <[email protected]> | ||
--- | ||
src/runtime/internal/atomic/atomic_arm.s | 6 ++++-- | ||
1 file changed, 4 insertions(+), 2 deletions(-) | ||
|
||
diff --git a/src/runtime/internal/atomic/atomic_arm.s b/src/runtime/internal/atomic/atomic_arm.s | ||
index 662b5987f2..1cf7d8f6ef 100644 | ||
--- a/src/runtime/internal/atomic/atomic_arm.s | ||
+++ b/src/runtime/internal/atomic/atomic_arm.s | ||
@@ -41,8 +41,10 @@ casl: | ||
BNE casl | ||
MOVW $1, R0 | ||
|
||
- CMP $7, R8 | ||
- BLT 2(PC) | ||
+#ifndef GOARM_7 | ||
+ CMP $0, R11 | ||
+ BEQ 2(PC) | ||
+#endif | ||
DMB MB_ISH | ||
|
||
MOVB R0, ret+12(FP) |
73 changes: 73 additions & 0 deletions
73
universe/go/0005-cmd-dist-cmd-go-define-assembly-macros-handle-GOARM-.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
From b1a26c61c6f321bacfcf6d44950d759af1f926b0 Mon Sep 17 00:00:00 2001 | ||
From: Cherry Mui <[email protected]> | ||
Date: Fri, 9 Feb 2024 01:15:18 -0500 | ||
Subject: [PATCH] cmd/dist,cmd/go: define assembly macros, handle GOARM value | ||
with soft/hardfloat | ||
|
||
CL 525637 added GOARM_x assembly macros based on GOARM value. But | ||
it did not define the macro in cmd/dist, so the macro is not set | ||
during bootstrapping. This CL defines them. | ||
|
||
With CL 514907, cfg.GOARM can also take a soft/hardfloat suffix, | ||
like "7,hardfloat". Handle that case. | ||
|
||
For #65601. | ||
|
||
Change-Id: I60ffe7e8b623ae693d91d6e8595067a6f76565b3 | ||
Reviewed-on: https://go-review.googlesource.com/c/go/+/562995 | ||
Run-TryBot: Cherry Mui <[email protected]> | ||
Reviewed-by: Keith Randall <[email protected]> | ||
Reviewed-by: Keith Randall <[email protected]> | ||
TryBot-Result: Gopher Robot <[email protected]> | ||
--- | ||
src/cmd/dist/build.go | 14 ++++++++++++++ | ||
src/cmd/go/internal/work/gc.go | 9 +++++---- | ||
2 files changed, 19 insertions(+), 4 deletions(-) | ||
|
||
diff --git a/src/cmd/dist/build.go b/src/cmd/dist/build.go | ||
index 32e59b446a..04c950fcb2 100644 | ||
--- a/src/cmd/dist/build.go | ||
+++ b/src/cmd/dist/build.go | ||
@@ -891,6 +891,20 @@ func runInstall(pkg string, ch chan struct{}) { | ||
asmArgs = append(asmArgs, "-D", "GOPPC64_power8") | ||
} | ||
} | ||
+ if goarch == "arm" { | ||
+ // Define GOARM_value from goarm, which can be either a version | ||
+ // like "6", or a version and a FP mode, like "7,hardfloat". | ||
+ switch { | ||
+ case strings.Contains(goarm, "7"): | ||
+ asmArgs = append(asmArgs, "-D", "GOARM_7") | ||
+ fallthrough | ||
+ case strings.Contains(goarm, "6"): | ||
+ asmArgs = append(asmArgs, "-D", "GOARM_6") | ||
+ fallthrough | ||
+ default: | ||
+ asmArgs = append(asmArgs, "-D", "GOARM_5") | ||
+ } | ||
+ } | ||
goasmh := pathf("%s/go_asm.h", workdir) | ||
|
||
// Collect symabis from assembly code. | ||
diff --git a/src/cmd/go/internal/work/gc.go b/src/cmd/go/internal/work/gc.go | ||
index e2a5456bde..6971696adb 100644 | ||
--- a/src/cmd/go/internal/work/gc.go | ||
+++ b/src/cmd/go/internal/work/gc.go | ||
@@ -362,12 +362,13 @@ func asmArgs(a *Action, p *load.Package) []any { | ||
} | ||
|
||
if cfg.Goarch == "arm" { | ||
- // Define GOARM_value from cfg.GOARM. | ||
- switch cfg.GOARM { | ||
- case "7": | ||
+ // Define GOARM_value from cfg.GOARM, which can be either a version | ||
+ // like "6", or a version and a FP mode, like "7,hardfloat". | ||
+ switch { | ||
+ case strings.Contains(cfg.GOARM, "7"): | ||
args = append(args, "-D", "GOARM_7") | ||
fallthrough | ||
- case "6": | ||
+ case strings.Contains(cfg.GOARM, "6"): | ||
args = append(args, "-D", "GOARM_6") | ||
fallthrough | ||
default: |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters