mirror of https://github.com/golang/go.git
cmd/internal/obj: add opcode space safety check
This CL adds a safety mechanism for changing the number of opcodes available per architecture. A subsequent CL will actually make the change. Change-Id: I6332ed5514f2f153c54d11b7da0cc8a6be1c8066 Reviewed-on: https://go-review.googlesource.com/24222 Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
parent
496174e32e
commit
0cd8faf744
|
|
@ -308,7 +308,8 @@ const (
|
|||
ABaseMIPS64
|
||||
ABaseS390X
|
||||
|
||||
AMask = 1<<12 - 1 // AND with this to use the opcode as an array index.
|
||||
AllowedOpCodes = 1 << 12 // The number of opcodes available for any given architecture.
|
||||
AMask = AllowedOpCodes - 1 // AND with this to use the opcode as an array index.
|
||||
)
|
||||
|
||||
// An LSym is the sort of symbol that is written to an object file.
|
||||
|
|
|
|||
|
|
@ -462,6 +462,9 @@ var aSpace []opSet
|
|||
// RegisterOpcode binds a list of instruction names
|
||||
// to a given instruction number range.
|
||||
func RegisterOpcode(lo As, Anames []string) {
|
||||
if len(Anames) > AllowedOpCodes {
|
||||
panic(fmt.Sprintf("too many instructions, have %d max %d", len(Anames), AllowedOpCodes))
|
||||
}
|
||||
aSpace = append(aSpace, opSet{lo, Anames})
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue