diff options
author | Keith Randall <khr@golang.org> | 2022-12-05 16:26:26 -0800 |
---|---|---|
committer | Michael Pratt <mpratt@google.com> | 2022-12-09 20:02:17 +0000 |
commit | 156578067111742b55718066c91b8ec66d35e03d (patch) | |
tree | ad2f5ca4872f2dd9ecd86e3c7fbd5fe675da3ee5 | |
parent | dc04f3ba1f25313bc9c97e728620206c235db9ee (diff) | |
download | go-156578067111742b55718066c91b8ec66d35e03d.tar.gz go-156578067111742b55718066c91b8ec66d35e03d.zip |
[release-branch.go1.19] cmd/compile: turn off jump tables when spectre retpolines are on
Fixes #57100
Change-Id: I6ab659abbca1ae0ac8710674d39aec116fab0baa
Reviewed-on: https://go-review.googlesource.com/c/go/+/455336
Reviewed-by: Keith Randall <khr@google.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Keith Randall <khr@golang.org>
(cherry picked from commit 1eb0465fa596a2d6e9c1a632499989544f0d7e68)
Reviewed-on: https://go-review.googlesource.com/c/go/+/455416
Reviewed-by: Michael Pratt <mpratt@google.com>
-rw-r--r-- | src/cmd/compile/internal/walk/switch.go | 2 | ||||
-rw-r--r-- | test/codegen/retpoline.go | 28 |
2 files changed, 29 insertions, 1 deletions
diff --git a/src/cmd/compile/internal/walk/switch.go b/src/cmd/compile/internal/walk/switch.go index 6cac8f2937..05e6aa4a5c 100644 --- a/src/cmd/compile/internal/walk/switch.go +++ b/src/cmd/compile/internal/walk/switch.go @@ -289,7 +289,7 @@ func (s *exprSwitch) tryJumpTable(cc []exprClause, out *ir.Nodes) bool { const minCases = 8 // have at least minCases cases in the switch const minDensity = 4 // use at least 1 out of every minDensity entries - if !go119UseJumpTables || base.Flag.N != 0 || !ssagen.Arch.LinkArch.CanJumpTable { + if !go119UseJumpTables || base.Flag.N != 0 || !ssagen.Arch.LinkArch.CanJumpTable || base.Ctxt.Retpoline { return false } if len(cc) < minCases { diff --git a/test/codegen/retpoline.go b/test/codegen/retpoline.go index 15d6a26615..a04a005e2e 100644 --- a/test/codegen/retpoline.go +++ b/test/codegen/retpoline.go @@ -12,3 +12,31 @@ func CallInterface(x interface{ M() }) { // amd64:`CALL\truntime.retpoline` x.M() } + +// Check to make sure that jump tables are disabled +// when retpoline is on. See issue 57097. +func noJumpTables(x int) int { + switch x { + case 0: + return 0 + case 1: + return 1 + case 2: + return 2 + case 3: + return 3 + case 4: + return 4 + case 5: + return 5 + case 6: + return 6 + case 7: + return 7 + case 8: + return 8 + case 9: + return 9 + } + return 10 +} |