mirror of
https://github.com/golang/go.git
synced 2025-05-15 20:34:38 +00:00
cmd/link: in stack bound check, don't check a call repetitively
In stack bound check pass, check a call once, not over and over again. Fix an accidental quadratic behavior... In particular, switching to the new linker caused MIPS builders noticeably slower. This CL fixes it. Change-Id: Idd00c79e80af6278652c92a1d9d7bb2d194e9490 Reviewed-on: https://go-review.googlesource.com/c/go/+/227078 Reviewed-by: Than McIntosh <thanm@google.com> Reviewed-by: Austin Clements <austin@google.com>
This commit is contained in:
parent
5dde10c304
commit
e18a5ba0ca
@ -2360,6 +2360,7 @@ func (sc *stkChk) check(up *chain, depth int) int {
|
|||||||
relocs := ldr.Relocs(s)
|
relocs := ldr.Relocs(s)
|
||||||
var ch1 chain
|
var ch1 chain
|
||||||
pcsp := obj.NewPCIter(uint32(ctxt.Arch.MinLC))
|
pcsp := obj.NewPCIter(uint32(ctxt.Arch.MinLC))
|
||||||
|
ri := 0
|
||||||
for pcsp.Init(info.Pcsp()); !pcsp.Done; pcsp.Next() {
|
for pcsp.Init(info.Pcsp()); !pcsp.Done; pcsp.Next() {
|
||||||
// pcsp.value is in effect for [pcsp.pc, pcsp.nextpc).
|
// pcsp.value is in effect for [pcsp.pc, pcsp.nextpc).
|
||||||
|
|
||||||
@ -2370,8 +2371,8 @@ func (sc *stkChk) check(up *chain, depth int) int {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Process calls in this span.
|
// Process calls in this span.
|
||||||
for i := 0; i < relocs.Count(); i++ {
|
for ; ri < relocs.Count(); ri++ {
|
||||||
r := relocs.At2(i)
|
r := relocs.At2(ri)
|
||||||
if uint32(r.Off()) >= pcsp.NextPC {
|
if uint32(r.Off()) >= pcsp.NextPC {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user