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>
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] {
}
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
// 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
}
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())
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)
}
buckets := make([]uint32, nbucket)
var b int
- for _, sy := range ctxt.Allsym {
+ for _, sy := range ctxt.Syms.Allsym {
if sy.Dynid <= 0 {
continue
}
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
ctxt.Logf("%5.2f ldelf %s\n", obj.Cputime(), pn)
}
- ctxt.IncVersion()
+ ctxt.Syms.IncVersion()
base := f.Offset()
var add uint64
}
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:
// 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
}
// 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
}
var rp *Reloc
var name string
- ctxt.IncVersion()
+ ctxt.Syms.IncVersion()
base := f.Offset()
if _, err := io.ReadFull(f, hdr[:]); err != nil {
goto bad
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
}
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 {
}
var sect *PeSect
- ctxt.IncVersion()
+ ctxt.Syms.IncVersion()
base := f.Offset()
peobj := new(PeObj)
}
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
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:
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,
// 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
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
}
// 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
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)
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)
}
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
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)
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
}
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
}
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
}
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)
}
// 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
}