diff --git a/src/cmd/compile/internal/gc/pgen.go b/src/cmd/compile/internal/gc/pgen.go index 4d6f579928..b1f9bc9d55 100644 --- a/src/cmd/compile/internal/gc/pgen.go +++ b/src/cmd/compile/internal/gc/pgen.go @@ -384,13 +384,12 @@ func debuginfo(fnsym *obj.LSym, infosym *obj.LSym, curfn interface{}) ([]dwarf.S } } - var automDecls []*Node - // Populate Automs for fn. + var apdecls []*Node + // Populate decls for fn. for _, n := range fn.Func.Dcl { if n.Op != ONAME { // might be OTYPE or OLITERAL continue } - var name obj.AddrName switch n.Class() { case PAUTO: if !n.Name.Used() { @@ -400,24 +399,15 @@ func debuginfo(fnsym *obj.LSym, infosym *obj.LSym, curfn interface{}) ([]dwarf.S } continue } - name = obj.NAME_AUTO case PPARAM, PPARAMOUT: - name = obj.NAME_PARAM default: continue } - automDecls = append(automDecls, n) - gotype := ngotype(n).Linksym() - fnsym.Func.Autom = append(fnsym.Func.Autom, &obj.Auto{ - Asym: Ctxt.Lookup(n.Sym.Name), - Aoffset: int32(n.Xoffset), - Name: name, - Gotype: gotype, - }) - fnsym.Func.RecordAutoType(gotype) + apdecls = append(apdecls, n) + fnsym.Func.RecordAutoType(ngotype(n).Linksym()) } - decls, dwarfVars := createDwarfVars(fnsym, fn.Func, automDecls) + decls, dwarfVars := createDwarfVars(fnsym, fn.Func, apdecls) // For each type referenced by the functions auto vars, attach a // dummy relocation to the function symbol to insure that the type @@ -467,11 +457,11 @@ func debuginfo(fnsym *obj.LSym, infosym *obj.LSym, curfn interface{}) ([]dwarf.S // createSimpleVars creates a DWARF entry for every variable declared in the // function, claiming that they are permanently on the stack. -func createSimpleVars(automDecls []*Node) ([]*Node, []*dwarf.Var, map[*Node]bool) { +func createSimpleVars(apDecls []*Node) ([]*Node, []*dwarf.Var, map[*Node]bool) { var vars []*dwarf.Var var decls []*Node selected := make(map[*Node]bool) - for _, n := range automDecls { + for _, n := range apDecls { if n.IsAutoTmp() { continue } @@ -559,7 +549,7 @@ func createComplexVars(fn *Func) ([]*Node, []*dwarf.Var, map[*Node]bool) { // createDwarfVars process fn, returning a list of DWARF variables and the // Nodes they represent. -func createDwarfVars(fnsym *obj.LSym, fn *Func, automDecls []*Node) ([]*Node, []*dwarf.Var) { +func createDwarfVars(fnsym *obj.LSym, fn *Func, apDecls []*Node) ([]*Node, []*dwarf.Var) { // Collect a raw list of DWARF vars. var vars []*dwarf.Var var decls []*Node @@ -567,10 +557,10 @@ func createDwarfVars(fnsym *obj.LSym, fn *Func, automDecls []*Node) ([]*Node, [] if Ctxt.Flag_locationlists && Ctxt.Flag_optimize && fn.DebugInfo != nil { decls, vars, selected = createComplexVars(fn) } else { - decls, vars, selected = createSimpleVars(automDecls) + decls, vars, selected = createSimpleVars(apDecls) } - dcl := automDecls + dcl := apDecls if fnsym.WasInlined() { dcl = preInliningDcls(fnsym) } @@ -649,17 +639,8 @@ func createDwarfVars(fnsym *obj.LSym, fn *Func, automDecls []*Node) ([]*Node, [] InlIndex: int32(inlIndex), ChildIndex: -1, }) - // Append a "deleted auto" entry to the autom list so as to - // insure that the type in question is picked up by the linker. - // See issue 22941. - gotype := ngotype(n).Linksym() - fnsym.Func.Autom = append(fnsym.Func.Autom, &obj.Auto{ - Asym: Ctxt.Lookup(n.Sym.Name), - Aoffset: int32(-1), - Name: obj.NAME_DELETED_AUTO, - Gotype: gotype, - }) - fnsym.Func.RecordAutoType(gotype) + // Record go type of to insure that it gets emitted by the linker. + fnsym.Func.RecordAutoType(ngotype(n).Linksym()) } return decls, vars diff --git a/src/cmd/internal/obj/link.go b/src/cmd/internal/obj/link.go index 4ebfc1d14f..1c101bfc27 100644 --- a/src/cmd/internal/obj/link.go +++ b/src/cmd/internal/obj/link.go @@ -211,9 +211,6 @@ const ( // A reference to name@GOT(SB) is a reference to the entry in the global offset // table for 'name'. NAME_GOTREF - // Indicates auto that was optimized away, but whose type - // we want to preserve in the DWARF debug info. - NAME_DELETED_AUTO // Indicates that this is a reference to a TOC anchor. NAME_TOCREF ) @@ -398,7 +395,6 @@ type FuncInfo struct { Args int32 Locals int32 Text *Prog - Autom []*Auto Autot map[*LSym]struct{} Pcln Pcln InlMarks []InlMark diff --git a/src/cmd/internal/obj/objfile.go b/src/cmd/internal/obj/objfile.go index 165e618d53..ab5627c0dd 100644 --- a/src/cmd/internal/obj/objfile.go +++ b/src/cmd/internal/obj/objfile.go @@ -31,7 +31,6 @@ type objWriter struct { nData int nReloc int nPcdata int - nAutom int nFuncdata int nFile int @@ -60,7 +59,6 @@ func (w *objWriter) addLengths(s *LSym) { w.nData += data w.nPcdata += len(pc.Pcdata) - w.nAutom += len(s.Func.Autom) w.nFuncdata += len(pc.Funcdataoff) w.nFile += len(pc.File) } @@ -69,7 +67,7 @@ func (w *objWriter) writeLengths() { w.writeInt(int64(w.nData)) w.writeInt(int64(w.nReloc)) w.writeInt(int64(w.nPcdata)) - w.writeInt(int64(w.nAutom)) + w.writeInt(int64(0)) // TODO: remove at next object file rev w.writeInt(int64(w.nFuncdata)) w.writeInt(int64(w.nFile)) } @@ -206,10 +204,6 @@ func (w *objWriter) writeRefs(s *LSym) { } if s.Type == objabi.STEXT { - for _, a := range s.Func.Autom { - w.writeRef(a.Asym, false) - w.writeRef(a.Gotype, false) - } pc := &s.Func.Pcln for _, d := range pc.Funcdata { w.writeRef(d, false) @@ -364,21 +358,7 @@ func (w *objWriter) writeSym(s *LSym) { flags |= 1 << 4 } w.writeInt(flags) - w.writeInt(int64(len(s.Func.Autom))) - for _, a := range s.Func.Autom { - w.writeRefIndex(a.Asym) - w.writeInt(int64(a.Aoffset)) - if a.Name == NAME_AUTO { - w.writeInt(objabi.A_AUTO) - } else if a.Name == NAME_PARAM { - w.writeInt(objabi.A_PARAM) - } else if a.Name == NAME_DELETED_AUTO { - w.writeInt(objabi.A_DELETED_AUTO) - } else { - log.Fatalf("%s: invalid local variable type %d", s.Name, a.Name) - } - w.writeRefIndex(a.Gotype) - } + w.writeInt(int64(0)) // TODO: remove at next object file rev pc := &s.Func.Pcln w.writeInt(int64(len(pc.Pcsp.P)))