]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/link: do not directly embed Symbols in Link
authorMichael Hudson-Doyle <michael.hudson@canonical.com>
Tue, 20 Sep 2016 02:59:39 +0000 (14:59 +1200)
committerMichael Hudson-Doyle <michael.hudson@canonical.com>
Tue, 20 Sep 2016 04:12:28 +0000 (04:12 +0000)
Mostly done with sed.

Change-Id: Ic8c534a3fdd332b5420d062ee85bb77a30ad1efb
Reviewed-on: https://go-review.googlesource.com/29346
Run-TryBot: Michael Hudson-Doyle <michael.hudson@canonical.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
16 files changed:
src/cmd/link/internal/ld/ar.go
src/cmd/link/internal/ld/data.go
src/cmd/link/internal/ld/deadcode.go
src/cmd/link/internal/ld/elf.go
src/cmd/link/internal/ld/go.go
src/cmd/link/internal/ld/ldelf.go
src/cmd/link/internal/ld/ldmacho.go
src/cmd/link/internal/ld/ldpe.go
src/cmd/link/internal/ld/lib.go
src/cmd/link/internal/ld/link.go
src/cmd/link/internal/ld/macho.go
src/cmd/link/internal/ld/main.go
src/cmd/link/internal/ld/objfile.go
src/cmd/link/internal/ld/pe.go
src/cmd/link/internal/ld/sym.go
src/cmd/link/internal/ld/symtab.go

index ba5f2ef759f9df80d5b2fe2b953d86e774e0df1d..c6391729af7e39a004d17a5732dd696d783c7ad6 100644 (file)
@@ -99,7 +99,7 @@ func hostArchive(ctxt *Link, name string) {
        any := true
        for any {
                var load []uint64
-               for _, s := range ctxt.Allsym {
+               for _, s := range ctxt.Syms.Allsym {
                        for _, r := range s.R {
                                if r.Sym != nil && r.Sym.Type&obj.SMASK == obj.SXREF {
                                        if off := armap[r.Sym.Name]; off != 0 && !loaded[off] {
index c9a2e13f2ef04a328e11382b87dadbfcd5ae7b1c..f84e959d809aee7a80ab31649ed8fd1581a5d6f5 100644 (file)
@@ -1060,7 +1060,7 @@ func addinitarrdata(ctxt *Link, s *Symbol) {
 }
 
 func dosymtype(ctxt *Link) {
-       for _, s := range ctxt.Allsym {
+       for _, s := range ctxt.Syms.Allsym {
                if len(s.P) > 0 {
                        if s.Type == obj.SBSS {
                                s.Type = obj.SDATA
@@ -1208,7 +1208,7 @@ func (ctxt *Link) dodata() {
 
        // Collect data symbols by type into data.
        var data [obj.SXREF][]*Symbol
-       for _, s := range ctxt.Allsym {
+       for _, s := range ctxt.Syms.Allsym {
                if !s.Attr.Reachable() || s.Attr.Special() {
                        continue
                }
index 6d3f74a039c81d8749494851314427333d7868be..0494479bcde1d693e0af44ec99599ff32ec69b8d 100644 (file)
@@ -110,7 +110,7 @@ func deadcode(ctxt *Link) {
        if Buildmode != BuildmodeShared {
                // Keep a typelink or itablink if the symbol it points at is being kept.
                // (When BuildmodeShared, always keep typelinks and itablinks.)
-               for _, s := range ctxt.Allsym {
+               for _, s := range ctxt.Syms.Allsym {
                        if strings.HasPrefix(s.Name, "go.typelink.") ||
                                strings.HasPrefix(s.Name, "go.itablink.") {
                                s.Attr.Set(AttrReachable, len(s.R) == 1 && s.R[0].Sym.Attr.Reachable())
@@ -232,7 +232,7 @@ func (d *deadcodepass) init() {
        if Buildmode == BuildmodeShared {
                // Mark all symbols defined in this library as reachable when
                // building a shared library.
-               for _, s := range d.ctxt.Allsym {
+               for _, s := range d.ctxt.Syms.Allsym {
                        if s.Type != 0 && s.Type != obj.SDYNIMPORT {
                                d.mark(s, nil)
                        }
index a3d3360c7e1ed06d25b0b62f390d1285ea8f720d..9d0b5ce325cf9423854909c59610164356a3d481 100644 (file)
@@ -1462,7 +1462,7 @@ func elfdynhash(ctxt *Link) {
        buckets := make([]uint32, nbucket)
 
        var b int
-       for _, sy := range ctxt.Allsym {
+       for _, sy := range ctxt.Syms.Allsym {
                if sy.Dynid <= 0 {
                        continue
                }
index 7309f99dbfeb0922c7c4ddb70cd86123355c67cd..935beb6648deec38ef590b6fd7b54f591f08ea81 100644 (file)
@@ -334,7 +334,7 @@ func Adddynsym(ctxt *Link, s *Symbol) {
 func fieldtrack(ctxt *Link) {
        // record field tracking references
        var buf bytes.Buffer
-       for _, s := range ctxt.Allsym {
+       for _, s := range ctxt.Syms.Allsym {
                if strings.HasPrefix(s.Name, "go.track.") {
                        s.Attr |= AttrSpecial // do not lay out in data segment
                        s.Attr |= AttrHidden
index f6799e2e7100f9d658812354b7fd199fadc95114..8468a9102eae45c63544a42e2ee03a12562a4b31 100644 (file)
@@ -445,7 +445,7 @@ func ldelf(ctxt *Link, f *bio.Reader, pkg string, length int64, pn string) {
                ctxt.Logf("%5.2f ldelf %s\n", obj.Cputime(), pn)
        }
 
-       ctxt.IncVersion()
+       ctxt.Syms.IncVersion()
        base := f.Offset()
 
        var add uint64
@@ -702,7 +702,7 @@ func ldelf(ctxt *Link, f *bio.Reader, pkg string, length int64, pn string) {
                }
 
                name = fmt.Sprintf("%s(%s)", pkg, sect.name)
-               s = Linklookup(ctxt, name, ctxt.Version)
+               s = Linklookup(ctxt, name, ctxt.Syms.Version)
 
                switch int(sect.flags) & (ElfSectFlagAlloc | ElfSectFlagWrite | ElfSectFlagExec) {
                default:
@@ -1059,7 +1059,7 @@ func readelfsym(ctxt *Link, elfobj *ElfObj, i int, sym *ElfSym, needSym int) (er
                                // We need to be able to look this up,
                                // so put it in the hash table.
                                if needSym != 0 {
-                                       s = Linklookup(ctxt, sym.name, ctxt.Version)
+                                       s = Linklookup(ctxt, sym.name, ctxt.Syms.Version)
                                        s.Type |= obj.SHIDDEN
                                }
 
@@ -1070,7 +1070,7 @@ func readelfsym(ctxt *Link, elfobj *ElfObj, i int, sym *ElfSym, needSym int) (er
                                // local names and hidden global names are unique
                                // and should only be referenced by their index, not name, so we
                                // don't bother to add them into the hash table
-                               s = linknewsym(ctxt, sym.name, ctxt.Version)
+                               s = linknewsym(ctxt, sym.name, ctxt.Syms.Version)
 
                                s.Type |= obj.SHIDDEN
                        }
index 0c07edf57d0b35b56ac1dec289b0ab78f940c5d2..e78711014c22f8a393e6f19bbf6b176c67ca06e6 100644 (file)
@@ -444,7 +444,7 @@ func ldmacho(ctxt *Link, f *bio.Reader, pkg string, length int64, pn string) {
        var rp *Reloc
        var name string
 
-       ctxt.IncVersion()
+       ctxt.Syms.IncVersion()
        base := f.Offset()
        if _, err := io.ReadFull(f, hdr[:]); err != nil {
                goto bad
@@ -587,7 +587,7 @@ func ldmacho(ctxt *Link, f *bio.Reader, pkg string, length int64, pn string) {
                        continue
                }
                name = fmt.Sprintf("%s(%s/%s)", pkg, sect.segname, sect.name)
-               s = Linklookup(ctxt, name, ctxt.Version)
+               s = Linklookup(ctxt, name, ctxt.Syms.Version)
                if s.Type != 0 {
                        err = fmt.Errorf("duplicate %s/%s", sect.segname, sect.name)
                        goto bad
@@ -634,7 +634,7 @@ func ldmacho(ctxt *Link, f *bio.Reader, pkg string, length int64, pn string) {
                }
                v := 0
                if sym.type_&N_EXT == 0 {
-                       v = ctxt.Version
+                       v = ctxt.Syms.Version
                }
                s = Linklookup(ctxt, name, v)
                if sym.type_&N_EXT == 0 {
index d7e98e142e9016d41865bf8d77b2ca817511c4f4..56f225f50a1bd196c70450e5106e34d772ed75d6 100644 (file)
@@ -136,7 +136,7 @@ func ldpe(ctxt *Link, f *bio.Reader, pkg string, length int64, pn string) {
        }
 
        var sect *PeSect
-       ctxt.IncVersion()
+       ctxt.Syms.IncVersion()
        base := f.Offset()
 
        peobj := new(PeObj)
@@ -246,7 +246,7 @@ func ldpe(ctxt *Link, f *bio.Reader, pkg string, length int64, pn string) {
                }
 
                name = fmt.Sprintf("%s(%s)", pkg, sect.name)
-               s = Linklookup(ctxt, name, ctxt.Version)
+               s = Linklookup(ctxt, name, ctxt.Syms.Version)
 
                switch sect.sh.Characteristics & (IMAGE_SCN_CNT_UNINITIALIZED_DATA | IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_WRITE | IMAGE_SCN_CNT_CODE | IMAGE_SCN_MEM_EXECUTE) {
                case IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ: //.rdata
@@ -514,7 +514,7 @@ func readpesym(ctxt *Link, peobj *PeObj, i int, y **PeSym) (err error) {
                        s = Linklookup(ctxt, name, 0)
 
                case IMAGE_SYM_CLASS_NULL, IMAGE_SYM_CLASS_STATIC, IMAGE_SYM_CLASS_LABEL:
-                       s = Linklookup(ctxt, name, ctxt.Version)
+                       s = Linklookup(ctxt, name, ctxt.Syms.Version)
                        s.Attr |= AttrDuplicateOK
 
                default:
index 552f08e7e4c4fd22301ef9d0d1757bb0aa69d6d4..0a524a934a2e4e81918ffa1e634d9c4fadeffadf 100644 (file)
@@ -461,7 +461,7 @@ func (ctxt *Link) loadlib() {
        if Linkmode == LinkInternal {
                // Drop all the cgo_import_static declarations.
                // Turns out we won't be needing them.
-               for _, s := range ctxt.Allsym {
+               for _, s := range ctxt.Syms.Allsym {
                        if s.Type == obj.SHOSTOBJ {
                                // If a symbol was marked both
                                // cgo_import_static and cgo_import_dynamic,
@@ -553,7 +553,7 @@ func (ctxt *Link) loadlib() {
                // If we have any undefined symbols in external
                // objects, try to read them from the libgcc file.
                any := false
-               for _, s := range ctxt.Allsym {
+               for _, s := range ctxt.Syms.Allsym {
                        for _, r := range s.R {
                                if r.Sym != nil && r.Sym.Type&obj.SMASK == obj.SXREF && r.Sym.Name != ".got" {
                                        any = true
@@ -1817,7 +1817,7 @@ func genasmsym(ctxt *Link, put func(*Link, *Symbol, string, SymbolType, int64, *
                put(ctxt, s, s.Name, TextSym, s.Value, nil)
        }
 
-       for _, s := range ctxt.Allsym {
+       for _, s := range ctxt.Syms.Allsym {
                if s.Attr.Hidden() {
                        continue
                }
index ccb8493737cf5c89da203f9fec4d9e4073e8c24e..0bec88e082799a050a1db2cc206a0a633026a27a 100644 (file)
@@ -173,7 +173,7 @@ type Shlib struct {
 // Link holds the context for writing object code from a compiler
 // or for reading that input into the linker.
 type Link struct {
-       Symbols
+       Syms *Symbols
 
        Arch      *sys.Arch
        Debugvlog int
index f2f767faf8dcd944749c97be69999669c489f452..cc4f15a6ff701fd20d03dfe8103adcdbbd155820 100644 (file)
@@ -658,7 +658,7 @@ func (x machoscmp) Less(i, j int) bool {
 
 func machogenasmsym(ctxt *Link) {
        genasmsym(ctxt, addsym)
-       for _, s := range ctxt.Allsym {
+       for _, s := range ctxt.Syms.Allsym {
                if s.Type == obj.SDYNIMPORT || s.Type == obj.SHOSTOBJ {
                        if s.Attr.Reachable() {
                                addsym(ctxt, s, "", DataSym, 0, nil)
index a0486e6cd608ae70977873f6d019c77dfb03122c..522fcfb9c7ea9dcbe8608a56b8e11e60e85b202c 100644 (file)
@@ -210,7 +210,7 @@ func Main() {
        ctxt.archive()
        if ctxt.Debugvlog != 0 {
                ctxt.Logf("%5.2f cpu time\n", obj.Cputime())
-               ctxt.Logf("%d symbols\n", len(ctxt.Allsym))
+               ctxt.Logf("%d symbols\n", len(ctxt.Syms.Allsym))
                ctxt.Logf("%d liveness data\n", liveness)
        }
 
index ee48252867560fec9fabe049857ca063161ab7b9..8b49aac7cbe06625b556de9c819d5080a6eaed64 100644 (file)
@@ -167,7 +167,7 @@ func LoadObjFile(ctxt *Link, f *bio.Reader, pkg string, length int64, pn string)
 
 func (r *objReader) loadObjFile() {
        // Increment context version, versions are used to differentiate static files in different packages
-       r.ctxt.IncVersion()
+       r.ctxt.Syms.IncVersion()
 
        // Magic header
        var buf [8]uint8
@@ -452,7 +452,7 @@ func (r *objReader) readRef() {
                log.Fatalf("invalid symbol version %d", v)
        }
        if v == 1 {
-               v = r.ctxt.Version
+               v = r.ctxt.Syms.Version
        }
        s := Linklookup(r.ctxt, name, v)
        r.refs = append(r.refs, s)
index 6f23592e656d359f05f92c26a37e5aaa3e8c3a12..ca0fc7557330f718bd1816e1d794e7bf0d99a433 100644 (file)
@@ -477,7 +477,7 @@ func initdynimport(ctxt *Link) *Dll {
 
        dr = nil
        var m *Imp
-       for _, s := range ctxt.Allsym {
+       for _, s := range ctxt.Syms.Allsym {
                if !s.Attr.Reachable() || s.Type != obj.SDYNIMPORT {
                        continue
                }
@@ -681,7 +681,7 @@ func (s byExtname) Less(i, j int) bool { return s[i].Extname < s[j].Extname }
 
 func initdynexport(ctxt *Link) {
        nexport = 0
-       for _, s := range ctxt.Allsym {
+       for _, s := range ctxt.Syms.Allsym {
                if !s.Attr.Reachable() || !s.Attr.CgoExportDynamic() {
                        continue
                }
index 4cdbac49df166f8baa5ac168e4f62878fcb0d1f9..7d3797d769434bdaef32d98861a9521003ce5bb6 100644 (file)
@@ -39,7 +39,7 @@ import (
 
 func linknew(arch *sys.Arch) *Link {
        ctxt := &Link{
-               Symbols: Symbols{
+               Syms: &Symbols{
                        hash: []map[string]*Symbol{
                                // preallocate about 2mb for hash of
                                // non static symbols
@@ -134,14 +134,14 @@ func (ctxt *Link) computeTLSOffset() {
 }
 
 func linknewsym(ctxt *Link, name string, v int) *Symbol {
-       return ctxt.newsym(name, v)
+       return ctxt.Syms.newsym(name, v)
 }
 
 func Linklookup(ctxt *Link, name string, v int) *Symbol {
-       return ctxt.Lookup(name, v)
+       return ctxt.Syms.Lookup(name, v)
 }
 
 // read-only lookup
 func Linkrlookup(ctxt *Link, name string, v int) *Symbol {
-       return ctxt.ROLookup(name, v)
+       return ctxt.Syms.ROLookup(name, v)
 }
index 1a3d6f16df1cbfb4588b3f4a5dfea19fd643bfe4..06394cb4971a194360fdd11d6d4ee07f771b17d2 100644 (file)
@@ -413,7 +413,7 @@ func (ctxt *Link) symtab() {
        // within a type they sort by size, so the .* symbols
        // just defined above will be first.
        // hide the specific symbols.
-       for _, s := range ctxt.Allsym {
+       for _, s := range ctxt.Syms.Allsym {
                if !s.Attr.Reachable() || s.Attr.Special() || s.Type != obj.SRODATA {
                        continue
                }