[dev.link] cmd/link: remove more of unused sym.Symbol based DWARF code

Remove another set of unused functions, no longer needed now that
loader.Sym based DWARF type generation is the default.

Change-Id: Ie3e63551d75acf559c550768ba6c95fe4d6e67ba
Reviewed-on: https://go-review.googlesource.com/c/go/+/222021
Run-TryBot: Than McIntosh <thanm@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
Reviewed-by: Jeremy Faller <jeremy@golang.org>
This commit is contained in:
Than McIntosh 2020-03-02 14:05:01 -05:00
parent 8db73599d3
commit cb2843704e
1 changed files with 0 additions and 140 deletions

View File

@ -148,32 +148,6 @@ func newdie(ctxt *Link, parent *dwarf.DWDie, abbrev int, name string, version in
return die
}
func walksymtypedef(ctxt *Link, s *sym.Symbol) *sym.Symbol {
if t := ctxt.Syms.ROLookup(s.Name+"..def", int(s.Version)); t != nil {
return t
}
return s
}
func find(ctxt *Link, name string) *sym.Symbol {
n := append(prefixBuf, name...)
// The string allocation below is optimized away because it is only used in a map lookup.
s := ctxt.Syms.ROLookup(string(n), 0)
prefixBuf = n[:len(dwarf.InfoPrefix)]
if s != nil && s.Type == sym.SDWARFINFO {
return s
}
return nil
}
func mustFind(ctxt *Link, name string) *sym.Symbol {
r := find(ctxt, name)
if r == nil {
Exitf("dwarf find: cannot find %s", name)
}
return r
}
func adddwarfref(ctxt *Link, s *sym.Symbol, t *sym.Symbol, size int) int64 {
var result int64
switch size {
@ -226,23 +200,6 @@ func putdie(linkctxt *Link, ctxt dwarf.Context, syms []*sym.Symbol, die *dwarf.D
return syms
}
// GDB doesn't like FORM_addr for AT_location, so emit a
// location expression that evals to a const.
func newabslocexprattr(die *dwarf.DWDie, addr int64, sym *sym.Symbol) {
newattr(die, dwarf.DW_AT_location, dwarf.DW_CLS_ADDRESS, addr, sym)
// below
}
// Lookup predefined types
func lookupOrDiag(ctxt *Link, n string) *sym.Symbol {
s := ctxt.Syms.ROLookup(n, 0)
if s == nil || s.Size == 0 {
Exitf("dwarf: missing type: %s", n)
}
return s
}
// dwarfFuncSym looks up a DWARF metadata symbol for function symbol s.
// If the symbol does not exist, it creates it if create is true,
// or returns nil otherwise.
@ -263,103 +220,6 @@ func dwarfFuncSym(ctxt *Link, s *sym.Symbol, meta string, create bool) *sym.Symb
return ctxt.Syms.ROLookup(meta+s.Name, ver)
}
func dotypedef(ctxt *Link, parent *dwarf.DWDie, name string, def *dwarf.DWDie) *dwarf.DWDie {
// Only emit typedefs for real names.
if strings.HasPrefix(name, "map[") {
return nil
}
if strings.HasPrefix(name, "struct {") {
return nil
}
if strings.HasPrefix(name, "chan ") {
return nil
}
if name[0] == '[' || name[0] == '*' {
return nil
}
if def == nil {
Errorf(nil, "dwarf: bad def in dotypedef")
}
s := ctxt.Syms.Lookup(dtolsym(def.Sym).Name+"..def", 0)
s.Attr |= sym.AttrNotInSymbolTable
s.Type = sym.SDWARFINFO
def.Sym = s
// The typedef entry must be created after the def,
// so that future lookups will find the typedef instead
// of the real definition. This hooks the typedef into any
// circular definition loops, so that gdb can understand them.
die := newdie(ctxt, parent, dwarf.DW_ABRV_TYPEDECL, name, 0)
newrefattr(die, dwarf.DW_AT_type, s)
return die
}
func nameFromDIESym(dwtype *sym.Symbol) string {
return strings.TrimSuffix(dwtype.Name[len(dwarf.InfoPrefix):], "..def")
}
// Find or construct *T given T.
func defptrto(ctxt *Link, dwtype *sym.Symbol) *sym.Symbol {
ptrname := "*" + nameFromDIESym(dwtype)
if die := find(ctxt, ptrname); die != nil {
return die
}
pdie := newdie(ctxt, &dwtypes, dwarf.DW_ABRV_PTRTYPE, ptrname, 0)
newrefattr(pdie, dwarf.DW_AT_type, dwtype)
// The DWARF info synthesizes pointer types that don't exist at the
// language level, like *hash<...> and *bucket<...>, and the data
// pointers of slices. Link to the ones we can find.
gotype := ctxt.Syms.ROLookup("type."+ptrname, 0)
if gotype != nil && gotype.Attr.Reachable() {
newattr(pdie, dwarf.DW_AT_go_runtime_type, dwarf.DW_CLS_GO_TYPEREF, 0, gotype)
}
return dtolsym(pdie.Sym)
}
// Copies src's children into dst. Copies attributes by value.
// DWAttr.data is copied as pointer only. If except is one of
// the top-level children, it will not be copied.
func copychildrenexcept(ctxt *Link, dst *dwarf.DWDie, src *dwarf.DWDie, except *dwarf.DWDie) {
for src = src.Child; src != nil; src = src.Link {
if src == except {
continue
}
c := newdie(ctxt, dst, src.Abbrev, getattr(src, dwarf.DW_AT_name).Data.(string), 0)
for a := src.Attr; a != nil; a = a.Link {
newattr(c, a.Atr, int(a.Cls), a.Value, a.Data)
}
copychildrenexcept(ctxt, c, src, nil)
}
reverselist(&dst.Child)
}
func copychildren(ctxt *Link, dst *dwarf.DWDie, src *dwarf.DWDie) {
copychildrenexcept(ctxt, dst, src, nil)
}
// Search children (assumed to have TAG_member) for the one named
// field and set its AT_type to dwtype
func substitutetype(structdie *dwarf.DWDie, field string, dwtype *sym.Symbol) {
child := findchild(structdie, field)
if child == nil {
Exitf("dwarf substitutetype: %s does not have member %s",
getattr(structdie, dwarf.DW_AT_name).Data, field)
return
}
a := getattr(child, dwarf.DW_AT_type)
if a != nil {
a.Data = dwtype
} else {
newrefattr(child, dwarf.DW_AT_type, dwtype)
}
}
// createUnitLength creates the initial length field with value v and update
// offset of unit_length if needed.
func createUnitLength(ctxt *Link, s *sym.Symbol, v uint64) {