diff options
| author | Josh Bleecher Snyder <josharian@gmail.com> | 2017-04-10 16:57:06 -0700 |
|---|---|---|
| committer | Josh Bleecher Snyder <josharian@gmail.com> | 2017-04-11 02:56:56 +0000 |
| commit | e367ba9eaea80917c877709da365ff8f13cc60bd (patch) | |
| tree | 372756a69f5289b4b6134a2dca9372dfffe97eb7 | |
| parent | 6c6f455f880ea560707348fcea9d4188782706e8 (diff) | |
| download | go-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.go | 1 | ||||
| -rw-r--r-- | src/cmd/compile/internal/gc/gsubr.go | 2 | ||||
| -rw-r--r-- | src/cmd/internal/obj/plist.go | 61 |
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) |
