mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/internal/obj: move LSym.Func into LSym.Extra
This creates space for a different kind of extension field in LSym without making the struct any larger. (There are many LSym, so we care about keeping the struct small.) Change-Id: Ib16edb9e15f54c2a7351c8b875e19684058711e5 Reviewed-on: https://go-review.googlesource.com/c/go/+/243943 Trust: Russ Cox <rsc@golang.org> Run-TryBot: Russ Cox <rsc@golang.org> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Cherry Zhang <cherryyz@google.com>
This commit is contained in:
parent
59202c4204
commit
912262b806
30 changed files with 304 additions and 274 deletions
|
|
@ -182,14 +182,14 @@ func preprocess(ctxt *obj.Link, s *obj.LSym, newprog obj.ProgAlloc) {
|
|||
return p
|
||||
}
|
||||
|
||||
framesize := s.Func.Text.To.Offset
|
||||
framesize := s.Func().Text.To.Offset
|
||||
if framesize < 0 {
|
||||
panic("bad framesize")
|
||||
}
|
||||
s.Func.Args = s.Func.Text.To.Val.(int32)
|
||||
s.Func.Locals = int32(framesize)
|
||||
s.Func().Args = s.Func().Text.To.Val.(int32)
|
||||
s.Func().Locals = int32(framesize)
|
||||
|
||||
if s.Func.Text.From.Sym.Wrapper() {
|
||||
if s.Func().Text.From.Sym.Wrapper() {
|
||||
// if g._panic != nil && g._panic.argp == FP {
|
||||
// g._panic.argp = bottom-of-frame
|
||||
// }
|
||||
|
|
@ -222,7 +222,7 @@ func preprocess(ctxt *obj.Link, s *obj.LSym, newprog obj.ProgAlloc) {
|
|||
Offset: 0, // panic.argp
|
||||
}
|
||||
|
||||
p := s.Func.Text
|
||||
p := s.Func().Text
|
||||
p = appendp(p, AMOVD, gpanic, regAddr(REG_R0))
|
||||
|
||||
p = appendp(p, AGet, regAddr(REG_R0))
|
||||
|
|
@ -245,7 +245,7 @@ func preprocess(ctxt *obj.Link, s *obj.LSym, newprog obj.ProgAlloc) {
|
|||
}
|
||||
|
||||
if framesize > 0 {
|
||||
p := s.Func.Text
|
||||
p := s.Func().Text
|
||||
p = appendp(p, AGet, regAddr(REG_SP))
|
||||
p = appendp(p, AI32Const, constAddr(framesize))
|
||||
p = appendp(p, AI32Sub)
|
||||
|
|
@ -260,8 +260,8 @@ func preprocess(ctxt *obj.Link, s *obj.LSym, newprog obj.ProgAlloc) {
|
|||
pc := int64(0) // pc is only incremented when necessary, this avoids bloat of the BrTable instruction
|
||||
var tableIdxs []uint64
|
||||
tablePC := int64(0)
|
||||
base := ctxt.PosTable.Pos(s.Func.Text.Pos).Base()
|
||||
for p := s.Func.Text; p != nil; p = p.Link {
|
||||
base := ctxt.PosTable.Pos(s.Func().Text.Pos).Base()
|
||||
for p := s.Func().Text; p != nil; p = p.Link {
|
||||
prevBase := base
|
||||
base = ctxt.PosTable.Pos(p.Pos).Base()
|
||||
switch p.As {
|
||||
|
|
@ -313,8 +313,8 @@ func preprocess(ctxt *obj.Link, s *obj.LSym, newprog obj.ProgAlloc) {
|
|||
tableIdxs = append(tableIdxs, uint64(numResumePoints))
|
||||
s.Size = pc + 1
|
||||
|
||||
if !s.Func.Text.From.Sym.NoSplit() {
|
||||
p := s.Func.Text
|
||||
if !s.Func().Text.From.Sym.NoSplit() {
|
||||
p := s.Func().Text
|
||||
|
||||
if framesize <= objabi.StackSmall {
|
||||
// small stack: SP <= stackguard
|
||||
|
|
@ -352,7 +352,7 @@ func preprocess(ctxt *obj.Link, s *obj.LSym, newprog obj.ProgAlloc) {
|
|||
|
||||
p = appendp(p, AIf)
|
||||
p = appendp(p, obj.ACALL, constAddr(0))
|
||||
if s.Func.Text.From.Sym.NeedCtxt() {
|
||||
if s.Func().Text.From.Sym.NeedCtxt() {
|
||||
p.To = obj.Addr{Type: obj.TYPE_MEM, Name: obj.NAME_EXTERN, Sym: morestack}
|
||||
} else {
|
||||
p.To = obj.Addr{Type: obj.TYPE_MEM, Name: obj.NAME_EXTERN, Sym: morestackNoCtxt}
|
||||
|
|
@ -365,7 +365,7 @@ func preprocess(ctxt *obj.Link, s *obj.LSym, newprog obj.ProgAlloc) {
|
|||
var entryPointLoopBranches []*obj.Prog
|
||||
var unwindExitBranches []*obj.Prog
|
||||
currentDepth := 0
|
||||
for p := s.Func.Text; p != nil; p = p.Link {
|
||||
for p := s.Func().Text; p != nil; p = p.Link {
|
||||
switch p.As {
|
||||
case ABlock, ALoop, AIf:
|
||||
currentDepth++
|
||||
|
|
@ -562,7 +562,7 @@ func preprocess(ctxt *obj.Link, s *obj.LSym, newprog obj.ProgAlloc) {
|
|||
}
|
||||
}
|
||||
|
||||
for p := s.Func.Text; p != nil; p = p.Link {
|
||||
for p := s.Func().Text; p != nil; p = p.Link {
|
||||
switch p.From.Name {
|
||||
case obj.NAME_AUTO:
|
||||
p.From.Offset += int64(framesize)
|
||||
|
|
@ -712,7 +712,7 @@ func preprocess(ctxt *obj.Link, s *obj.LSym, newprog obj.ProgAlloc) {
|
|||
}
|
||||
|
||||
{
|
||||
p := s.Func.Text
|
||||
p := s.Func().Text
|
||||
if len(unwindExitBranches) > 0 {
|
||||
p = appendp(p, ABlock) // unwindExit, used to return 1 when unwinding the stack
|
||||
for _, b := range unwindExitBranches {
|
||||
|
|
@ -749,7 +749,7 @@ func preprocess(ctxt *obj.Link, s *obj.LSym, newprog obj.ProgAlloc) {
|
|||
|
||||
currentDepth = 0
|
||||
blockDepths := make(map[*obj.Prog]int)
|
||||
for p := s.Func.Text; p != nil; p = p.Link {
|
||||
for p := s.Func().Text; p != nil; p = p.Link {
|
||||
switch p.As {
|
||||
case ABlock, ALoop, AIf:
|
||||
currentDepth++
|
||||
|
|
@ -850,7 +850,7 @@ func assemble(ctxt *obj.Link, s *obj.LSym, newprog obj.ProgAlloc) {
|
|||
hasLocalSP = true
|
||||
|
||||
var regUsed [MAXREG - MINREG]bool
|
||||
for p := s.Func.Text; p != nil; p = p.Link {
|
||||
for p := s.Func().Text; p != nil; p = p.Link {
|
||||
if p.From.Reg != 0 {
|
||||
regUsed[p.From.Reg-MINREG] = true
|
||||
}
|
||||
|
|
@ -896,7 +896,7 @@ func assemble(ctxt *obj.Link, s *obj.LSym, newprog obj.ProgAlloc) {
|
|||
updateLocalSP(w)
|
||||
}
|
||||
|
||||
for p := s.Func.Text; p != nil; p = p.Link {
|
||||
for p := s.Func().Text; p != nil; p = p.Link {
|
||||
switch p.As {
|
||||
case AGet:
|
||||
if p.From.Type != obj.TYPE_REG {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue