]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/internal/obj: hoist fieldtrack code out of x86 back end
authorRuss Cox <rsc@golang.org>
Thu, 4 Feb 2016 19:16:58 +0000 (14:16 -0500)
committerRuss Cox <rsc@golang.org>
Fri, 19 Feb 2016 01:37:46 +0000 (01:37 +0000)
Change-Id: I38e59088c37426d914ce2b4dfc79f3d476e06f49
Reviewed-on: https://go-review.googlesource.com/19617
Reviewed-by: David Crawshaw <crawshaw@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/cmd/internal/obj/obj.go
src/cmd/internal/obj/objfile.go
src/cmd/internal/obj/x86/asm6.go

index 30ab54912ed28f32e7ca0f8716420a9425ebcefe..343c93a6ee13ab3fe38384240a8391f692a6ff29 100644 (file)
@@ -281,3 +281,21 @@ func linkgetline(ctxt *Link, lineno int32, f **LSym, l *int32) {
 func Linkprfile(ctxt *Link, line int) {
        fmt.Printf("%s ", ctxt.LineHist.LineString(line))
 }
+
+func fieldtrack(ctxt *Link, cursym *LSym) {
+       p := cursym.Text
+       if p == nil || p.Link == nil { // handle external functions and ELF section symbols
+               return
+       }
+       ctxt.Cursym = cursym
+
+       for ; p != nil; p = p.Link {
+               if p.As == AUSEFIELD {
+                       r := Addrel(ctxt.Cursym)
+                       r.Off = 0
+                       r.Siz = 0
+                       r.Sym = p.From.Sym
+                       r.Type = R_USEFIELD
+               }
+       }
+}
index 8d4a506843ea8b96639f351bd006b9d4307e7f51..bae64f4a29bc077ca91b8f7c0456c27927b4000f 100644 (file)
@@ -298,6 +298,7 @@ func Flushplist(ctxt *Link) {
                ctxt.Arch.Follow(ctxt, s)
                ctxt.Arch.Preprocess(ctxt, s)
                ctxt.Arch.Assemble(ctxt, s)
+               fieldtrack(ctxt, s)
                linkpcln(ctxt, s)
        }
 
index 2b71822799c2093f8e0e7ccbc685a93c60bc1aa6..115350637f18a4d444a1778d124231fd9f8011b2 100644 (file)
@@ -4556,15 +4556,6 @@ func asmins(ctxt *obj.Link, p *obj.Prog) {
        ctxt.Andptr = ctxt.And[:]
        ctxt.Asmode = int(p.Mode)
 
-       if p.As == obj.AUSEFIELD {
-               r := obj.Addrel(ctxt.Cursym)
-               r.Off = 0
-               r.Siz = 0
-               r.Sym = p.From.Sym
-               r.Type = obj.R_USEFIELD
-               return
-       }
-
        if ctxt.Headtype == obj.Hnacl && p.Mode == 32 {
                switch p.As {
                case obj.ARET: