Skip to content

Commit

Permalink
cmd/internal/obj: refactor ATEXT symbol initialization
Browse files Browse the repository at this point in the history
This makes the core Flushplist loop clearer.

We may also want to move the Sym initialization
much earlier in the compiler (see discussion on
CL 40254), for which this paves the way.

While we're here, eliminate package log in favor of ctxt.Diag.

Passes toolstash-check -all.

Updates #15756

Change-Id: Ieaf848d196764a5aa82578b689af7bc6638c385a
Reviewed-on: https://go-review.googlesource.com/40313
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Michael Hudson-Doyle <michael.hudson@canonical.com>
  • Loading branch information
josharian committed Apr 11, 2017
1 parent 6c6f455 commit e367ba9
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 26 deletions.
1 change: 1 addition & 0 deletions src/cmd/asm/internal/asm/asm.go
Expand Up @@ -176,6 +176,7 @@ func (p *Parser) asmText(word string, operands [][]lex.Token) {
},
}
prog.To.Val = int32(argSize)
p.ctxt.InitTextSym(prog)

p.append(prog, "", true)
}
Expand Down
2 changes: 2 additions & 0 deletions src/cmd/compile/internal/gc/gsubr.go
Expand Up @@ -185,6 +185,8 @@ func (pp *Progs) settext(fn *Node) {
}
}

Ctxt.InitTextSym(ptxt)

pp.Text = ptxt
}

Expand Down
61 changes: 35 additions & 26 deletions src/cmd/internal/obj/plist.go
Expand Up @@ -6,7 +6,6 @@ package obj

import (
"fmt"
"log"
"strings"
)

Expand Down Expand Up @@ -42,33 +41,9 @@ func Flushplist(ctxt *Link, plist *Plist, newprog ProgAlloc) {
if s == nil {
// func _() { }
curtext = nil

continue
}
if s.FuncInfo == nil {
s.FuncInfo = new(FuncInfo)
}

if s.Text != nil {
log.Fatalf("duplicate TEXT for %s", s.Name)
}
if s.OnList() {
log.Fatalf("symbol %s listed multiple times", s.Name)
}
s.Set(AttrOnList, true)
text = append(text, s)
flag := int(p.From3Offset())
if flag&DUPOK != 0 {
s.Set(AttrDuplicateOK, true)
}
if flag&NOSPLIT != 0 {
s.Set(AttrNoSplit, true)
}
if flag&REFLECTMETHOD != 0 {
s.Set(AttrReflectMethod, true)
}
s.Type = STEXT
s.Text = p
etext = p
curtext = s
continue
Expand Down Expand Up @@ -137,13 +112,47 @@ func Flushplist(ctxt *Link, plist *Plist, newprog ProgAlloc) {
ctxt.Text = append(ctxt.Text, text...)
}

func (ctxt *Link) InitTextSym(p *Prog) {
if p.As != ATEXT {
ctxt.Diag("InitTextSym non-ATEXT: %v", p)
}
s := p.From.Sym
if s == nil {
// func _() { }
return
}
if s.FuncInfo != nil {
ctxt.Diag("InitTextSym double init for %s", s.Name)
}
s.FuncInfo = new(FuncInfo)
if s.Text != nil {
ctxt.Diag("duplicate TEXT for %s", s.Name)
}
if s.OnList() {
ctxt.Diag("symbol %s listed multiple times", s.Name)
}
s.Set(AttrOnList, true)
flag := int(p.From3Offset())
if flag&DUPOK != 0 {
s.Set(AttrDuplicateOK, true)
}
if flag&NOSPLIT != 0 {
s.Set(AttrNoSplit, true)
}
if flag&REFLECTMETHOD != 0 {
s.Set(AttrReflectMethod, true)
}
s.Type = STEXT
s.Text = p
}

func (ctxt *Link) Globl(s *LSym, size int64, flag int) {
if s.SeenGlobl() {
fmt.Printf("duplicate %v\n", s)
}
s.Set(AttrSeenGlobl, true)
if s.OnList() {
log.Fatalf("symbol %s listed multiple times", s.Name)
ctxt.Diag("symbol %s listed multiple times", s.Name)
}
s.Set(AttrOnList, true)
ctxt.Data = append(ctxt.Data, s)
Expand Down

0 comments on commit e367ba9

Please sign in to comment.