// go-specific code shared across loaders (5l, 6l, 8l).
-// replace all "". with pkg.
-func expandpkg(t0 string, pkg string) string {
- return strings.Replace(t0, `"".`, pkg+".", -1)
-}
-
// TODO:
// generate debugging section in binary.
// once the dust settles, try to move some code to
continue
}
- local = expandpkg(local, pkg)
q := ""
if i := strings.Index(remote, "#"); i >= 0 {
remote, q = remote[:i], remote[i+1:]
if len(f) > 2 {
remote = f[2]
}
- local = expandpkg(local, pkg)
// The compiler adds a fourth argument giving
// the definition ABI of function symbols.
abi := obj.ABI0
i := Sym(len(l.objSyms))
l.start[r] = i
l.objs = append(l.objs, objIdx{r, i})
- if r.NeedNameExpansion() && !r.FromAssembly() {
- panic("object compiled without -p")
- }
return i
}
return l.attrReachable.Count()
}
-// Returns the raw (unpatched) name of the i-th symbol.
-func (l *Loader) RawSymName(i Sym) string {
- if l.IsExternal(i) {
- pp := l.getPayload(i)
- return pp.name
- }
- r, li := l.toLocal(i)
- return r.Sym(li).Name(r.Reader)
-}
-
-// Returns the (patched) name of the i-th symbol.
+// Returns the name of the i-th symbol.
func (l *Loader) SymName(i Sym) string {
if l.IsExternal(i) {
pp := l.getPayload(i)
if r == nil {
return "?"
}
- name := r.Sym(li).Name(r.Reader)
- if !r.NeedNameExpansion() {
- return name
- }
- return strings.Replace(name, "\"\".", r.pkgprefix, -1)
+ return r.Sym(li).Name(r.Reader)
}
// Returns the version of the i-th symbol.
// symbol (see AttrExternal).
func (l *Loader) SetAttrExternal(i Sym, v bool) {
if !l.IsExternal(i) {
- panic(fmt.Sprintf("tried to set external attr on non-external symbol %q", l.RawSymName(i)))
+ panic(fmt.Sprintf("tried to set external attr on non-external symbol %q", l.SymName(i)))
}
if v {
l.attrExternal.Set(l.extIndex(i))
panic("preloadSyms: bad kind")
}
l.growAttrBitmaps(len(l.objSyms) + int(end-start))
- needNameExpansion := r.NeedNameExpansion()
loadingRuntimePkg := r.unit.Lib.Pkg == "runtime"
for i := start; i < end; i++ {
osym := r.Sym(i)
var v int
if kind != hashed64Def && kind != hashedDef { // we don't need the name, etc. for hashed symbols
name = osym.Name(r.Reader)
- if needNameExpansion {
- name = strings.Replace(name, "\"\".", r.pkgprefix, -1)
- }
v = abiToVer(osym.ABI(), r.version)
}
gi := st.addSym(name, v, r, i, kind, osym)
func loadObjRefs(l *Loader, r *oReader, arch *sys.Arch) {
// load non-package refs
ndef := uint32(r.NAlldef())
- needNameExpansion := r.NeedNameExpansion()
for i, n := uint32(0), uint32(r.NNonpkgref()); i < n; i++ {
osym := r.Sym(ndef + i)
name := osym.Name(r.Reader)
- if needNameExpansion {
- name = strings.Replace(name, "\"\".", r.pkgprefix, -1)
- }
v := abiToVer(osym.ABI(), r.version)
r.syms[ndef+i] = l.LookupOrCreateSym(name, v)
gi := r.syms[ndef+i]
// anonymous aux or sub-symbol containing some sub-part or payload of
// another symbol.
func (l *Loader) TopLevelSym(s Sym) bool {
- return topLevelSym(l.RawSymName(s), l.SymType(s))
+ return topLevelSym(l.SymName(s), l.SymType(s))
}
// topLevelSym tests a symbol name and kind to determine whether
r, li := l.toLocal(symIdx)
osym := r.Sym(li)
sname := osym.Name(r.Reader)
- if r.NeedNameExpansion() {
- sname = strings.Replace(sname, "\"\".", r.pkgprefix, -1)
- }
sver := abiToVer(osym.ABI(), r.version)
skind := sym.AbiSymKindToSymKind[objabi.SymKind(osym.Type())]
for ri := 0; ri < relocs.Count(); ri++ {
r := relocs.At(ri)
rs := r.Sym()
- if rs != 0 && l.SymType(rs) == sym.SXREF && l.RawSymName(rs) != ".got" {
+ if rs != 0 && l.SymType(rs) == sym.SXREF && l.SymName(rs) != ".got" {
result = append(result, rs)
if limit != -1 && len(result) >= limit {
break