var dwarfp2 []loader.Sym
func (d *dwctxt2) writeabbrev() loader.Sym {
- abrvs := d.ldr.AddExtSym(".debug_abbrev", 0)
+ abrvs := d.ldr.LookupOrCreateSym(".debug_abbrev", 0)
u := d.ldr.MakeSymbolUpdater(abrvs)
u.SetType(sym.SDWARFSECT)
u.AddBytes(dwarf.GetAbbrev())
}
func (d *dwctxt2) writeframes(syms []loader.Sym) []loader.Sym {
- fs := d.ldr.AddExtSym(".debug_frame", 0)
+ fs := d.ldr.LookupOrCreateSym(".debug_frame", 0)
fsd := dwSym(fs)
fsu := d.ldr.MakeSymbolUpdater(fs)
fsu.SetType(sym.SDWARFSECT)
func (d *dwctxt2) writeinfo(syms []loader.Sym, units []*sym.CompilationUnit, abbrevsym loader.Sym, pubNames, pubTypes *pubWriter2) []loader.Sym {
- infosec := d.ldr.AddExtSym(".debug_info", 0)
+ infosec := d.ldr.LookupOrCreateSym(".debug_info", 0)
disu := d.ldr.MakeSymbolUpdater(infosec)
disu.SetType(sym.SDWARFINFO)
d.ldr.SetAttrReachable(infosec, true)
}
func newPubWriter2(d *dwctxt2, sname string) *pubWriter2 {
- s := d.ldr.AddExtSym(sname, 0)
+ s := d.ldr.LookupOrCreateSym(sname, 0)
u := d.ldr.MakeSymbolUpdater(s)
u.SetType(sym.SDWARFSECT)
return &pubWriter2{d: d, s: s, su: u, sname: sname}
}
if gdbscript != "" {
- gs := d.ldr.AddExtSym(".debug_gdb_scripts", 0)
+ gs := d.ldr.LookupOrCreateSym(".debug_gdb_scripts", 0)
u := d.ldr.MakeSymbolUpdater(gs)
u.SetType(sym.SDWARFSECT)
sort.Sort(compilationUnitByStartPC(d.linkctxt.compUnits))
// Create .debug_line and .debug_ranges section symbols
- debugLine := d.ldr.AddExtSym(".debug_line", 0)
+ debugLine := d.ldr.LookupOrCreateSym(".debug_line", 0)
dlu := d.ldr.MakeSymbolUpdater(debugLine)
dlu.SetType(sym.SDWARFSECT)
d.ldr.SetAttrReachable(debugLine, true)
syms = append(syms, debugLine)
- debugRanges := d.ldr.AddExtSym(".debug_ranges", 0)
+ debugRanges := d.ldr.LookupOrCreateSym(".debug_ranges", 0)
dru := d.ldr.MakeSymbolUpdater(debugRanges)
dru.SetType(sym.SDWARFRANGE)
d.ldr.SetAttrReachable(debugRanges, true)
// Don't emit .debug_loc if it's empty -- it makes the ARM linker mad.
if !empty {
- locsym := d.ldr.AddExtSym(".debug_loc", 0)
+ locsym := d.ldr.LookupOrCreateSym(".debug_loc", 0)
u := d.ldr.MakeSymbolUpdater(locsym)
u.SetType(sym.SDWARFLOC)
d.ldr.SetAttrReachable(locsym, true)
// If the symbol already exist, it returns the index of that symbol.
func (l *Loader) AddSym(name string, ver int, r *oReader, li int, kind int, dupok bool, typ sym.SymKind) (Sym, bool) {
if l.extStart != 0 {
- panic("AddSym called after AddExtSym is called")
+ panic("AddSym called after external symbol is created")
}
i := Sym(len(l.objSyms))
addToGlobal := func() {
return i
}
-// Add an external symbol (without index). Return the index of newly added
-// symbol, or 0 if not added.
-func (l *Loader) AddExtSym(name string, ver int) Sym {
- i := l.Lookup(name, ver)
- if i != 0 {
- return i
- }
- i = l.newExtSym(name, ver)
- static := ver >= sym.SymVerStatic || ver < 0
- if static {
- l.extStaticSyms[nameVer{name, ver}] = i
- } else {
- l.symsByName[ver][name] = i
- }
- return i
-}
-
// LookupOrCreateSym looks up the symbol with the specified name/version,
// returning its Sym index if found. If the lookup fails, a new external
// Sym will be created, entered into the lookup tables, and returned.
osym.Read(r.Reader, r.SymOff(ndef+i))
name := strings.Replace(osym.Name, "\"\".", r.pkgprefix, -1)
v := abiToVer(osym.ABI, r.version)
- r.syms[ndef+i] = l.AddExtSym(name, v)
+ r.syms[ndef+i] = l.LookupOrCreateSym(name, v)
}
}
ts3 := addDummyObjSym(t, ldr, or, "type.string")
// Create some external symbols.
- es1 := ldr.AddExtSym("extnew1", 0)
+ es1 := ldr.LookupOrCreateSym("extnew1", 0)
if es1 == 0 {
- t.Fatalf("AddExtSym failed for extnew1")
+ t.Fatalf("LookupOrCreateSym failed for extnew1")
}
- es1x := ldr.AddExtSym("extnew1", 0)
+ es1x := ldr.LookupOrCreateSym("extnew1", 0)
if es1x != es1 {
- t.Fatalf("AddExtSym lookup: expected %d got %d for second lookup", es1, es1x)
+ t.Fatalf("LookupOrCreateSym lookup: expected %d got %d for second lookup", es1, es1x)
}
- es2 := ldr.AddExtSym("go.info.type.uint8", 0)
+ es2 := ldr.LookupOrCreateSym("go.info.type.uint8", 0)
if es2 == 0 {
- t.Fatalf("AddExtSym failed for go.info.type.uint8")
+ t.Fatalf("LookupOrCreateSym failed for go.info.type.uint8")
}
// Create a nameless symbol
es3 := ldr.CreateExtSym("")
// Test expansion of attr bitmaps
for idx := 0; idx < 36; idx++ {
- es := ldr.AddExtSym(fmt.Sprintf("zext%d", idx), 0)
+ es := ldr.LookupOrCreateSym(fmt.Sprintf("zext%d", idx), 0)
if ldr.AttrOnList(es) {
t.Errorf("expected OnList after creation")
}
// Populate loader with some symbols.
addDummyObjSym(t, ldr, or, "type.uint8")
- ldr.AddExtSym("hello", 0)
+ ldr.LookupOrCreateSym("hello", 0)
arch := sys.ArchAMD64
var testpoints = []struct {
var pmi Sym
for k, tp := range testpoints {
name := fmt.Sprintf("new%d", k+1)
- mi := ldr.AddExtSym(name, 0)
+ mi := ldr.LookupOrCreateSym(name, 0)
if mi == 0 {
- t.Fatalf("AddExtSym failed for '" + name + "'")
+ t.Fatalf("LookupOrCreateSym failed for '" + name + "'")
}
mi = tp.addDataFunc(ldr, mi, pmi)
if ldr.SymType(mi) != tp.expKind {
// Populate loader with some symbols.
addDummyObjSym(t, ldr, or, "type.uint8")
- es1 := ldr.AddExtSym("outer", 0)
- es2 := ldr.AddExtSym("sub1", 0)
- es3 := ldr.AddExtSym("sub2", 0)
- es4 := ldr.AddExtSym("sub3", 0)
- es5 := ldr.AddExtSym("sub4", 0)
- es6 := ldr.AddExtSym("sub5", 0)
+ es1 := ldr.LookupOrCreateSym("outer", 0)
+ es2 := ldr.LookupOrCreateSym("sub1", 0)
+ es3 := ldr.LookupOrCreateSym("sub2", 0)
+ es4 := ldr.LookupOrCreateSym("sub3", 0)
+ es5 := ldr.LookupOrCreateSym("sub4", 0)
+ es6 := ldr.LookupOrCreateSym("sub5", 0)
// Should not have an outer sym initially
if ldr.OuterSym(es1) != 0 {