aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosh Bleecher Snyder <josharian@gmail.com>2017-04-10 16:57:06 -0700
committerJosh Bleecher Snyder <josharian@gmail.com>2017-04-11 02:56:56 +0000
commite367ba9eaea80917c877709da365ff8f13cc60bd (patch)
tree372756a69f5289b4b6134a2dca9372dfffe97eb7
parent6c6f455f880ea560707348fcea9d4188782706e8 (diff)
downloadgo-e367ba9eaea80917c877709da365ff8f13cc60bd.tar.xz
cmd/internal/obj: refactor ATEXT symbol initialization
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>
-rw-r--r--src/cmd/asm/internal/asm/asm.go1
-rw-r--r--src/cmd/compile/internal/gc/gsubr.go2
-rw-r--r--src/cmd/internal/obj/plist.go61
3 files changed, 38 insertions, 26 deletions
diff --git a/src/cmd/asm/internal/asm/asm.go b/src/cmd/asm/internal/asm/asm.go
index e83cd7286d..0e31677a3f 100644
--- a/src/cmd/asm/internal/asm/asm.go
+++ b/src/cmd/asm/internal/asm/asm.go
@@ -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)
}
diff --git a/src/cmd/compile/internal/gc/gsubr.go b/src/cmd/compile/internal/gc/gsubr.go
index b22828f2e5..2c628a521f 100644
--- a/src/cmd/compile/internal/gc/gsubr.go
+++ b/src/cmd/compile/internal/gc/gsubr.go
@@ -185,6 +185,8 @@ func (pp *Progs) settext(fn *Node) {
}
}
+ Ctxt.InitTextSym(ptxt)
+
pp.Text = ptxt
}
diff --git a/src/cmd/internal/obj/plist.go b/src/cmd/internal/obj/plist.go
index b79b39de8d..6614f7d74e 100644
--- a/src/cmd/internal/obj/plist.go
+++ b/src/cmd/internal/obj/plist.go
@@ -6,7 +6,6 @@ package obj
import (
"fmt"
- "log"
"strings"
)
@@ -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
@@ -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)