mirror of
https://github.com/golang/go
synced 2024-11-05 18:36:08 +00:00
cmd/7g: reserve registers R26 to R32
These registers are not available for programs to use. Prior to this change, the compiler would crash attempting to use ZR as a general purpose register. Other programs would compile but on execution would overwrite the G register and cause havoc. Fixes linux/arm64 build. Fixes #10304 Fixes #10320 Change-Id: I5cf51d3b77cfe3db7dd6377324950cafb02f8d8b Reviewed-on: https://go-review.googlesource.com/8456 Reviewed-by: Minux Ma <minux@golang.org>
This commit is contained in:
parent
a51d5f27e8
commit
ca0adeddd5
2 changed files with 60 additions and 0 deletions
|
@ -115,6 +115,11 @@ func excludedregs() uint64 {
|
|||
// Exclude registers with fixed functions
|
||||
regbits := uint64(RtoB(arm64.REGRT1) | RtoB(arm64.REGRT2) | RtoB(arm64.REGPR))
|
||||
|
||||
// Exclude R26 - R31.
|
||||
for r := arm64.REGMAX + 1; r <= arm64.REGZERO; r++ {
|
||||
regbits |= RtoB(r)
|
||||
}
|
||||
|
||||
// Also exclude floating point registers with fixed constants
|
||||
regbits |= RtoB(arm64.REG_F27) | RtoB(arm64.REG_F28) | RtoB(arm64.REG_F29) | RtoB(arm64.REG_F30) | RtoB(arm64.REG_F31)
|
||||
|
||||
|
|
55
test/fixedbugs/issue10320.go
Normal file
55
test/fixedbugs/issue10320.go
Normal file
|
@ -0,0 +1,55 @@
|
|||
// run
|
||||
|
||||
// Copyright 2015 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
// Issue 10320: 7g failed to compile a program because it attempted
|
||||
// to use ZR as register. Other programs compiled but failed to
|
||||
// execute correctly because they clobbered the g register.
|
||||
|
||||
package main
|
||||
|
||||
func main() {
|
||||
var x00, x01, x02, x03, x04, x05, x06, x07, x08, x09 int
|
||||
var x10, x11, x12, x13, x14, x15, x16, x17, x18, x19 int
|
||||
var x20, x21, x22, x23, x24, x25, x26, x27, x28, x29 int
|
||||
var x30, x31, x32 int
|
||||
|
||||
_ = x00
|
||||
_ = x01
|
||||
_ = x02
|
||||
_ = x03
|
||||
_ = x04
|
||||
_ = x05
|
||||
_ = x06
|
||||
_ = x07
|
||||
_ = x08
|
||||
_ = x09
|
||||
|
||||
_ = x10
|
||||
_ = x11
|
||||
_ = x12
|
||||
_ = x13
|
||||
_ = x14
|
||||
_ = x15
|
||||
_ = x16
|
||||
_ = x17
|
||||
_ = x18
|
||||
_ = x19
|
||||
|
||||
_ = x20
|
||||
_ = x21
|
||||
_ = x22
|
||||
_ = x23
|
||||
_ = x24
|
||||
_ = x25
|
||||
_ = x26
|
||||
_ = x27
|
||||
_ = x28
|
||||
_ = x29
|
||||
|
||||
_ = x30
|
||||
_ = x31
|
||||
_ = x32
|
||||
}
|
Loading…
Reference in a new issue