From d00442aba8fc016aadce0a6e9133f03686db72a0 Mon Sep 17 00:00:00 2001 From: Andrew Gerrand Date: Mon, 2 Jun 2014 13:04:43 +1000 Subject: [PATCH] [release-branch.go1.3] remove package debug/goobj and copy functionality to cmd/nm https://golang.org/cl/103760043/ --- .../goobj/read.go => cmd/nm/debug_goobj.go} | 336 +++++++++--------- src/cmd/nm/goobj.go | 21 +- src/pkg/debug/goobj/read_test.go | 28 -- 3 files changed, 181 insertions(+), 204 deletions(-) rename src/{pkg/debug/goobj/read.go => cmd/nm/debug_goobj.go} (64%) delete mode 100644 src/pkg/debug/goobj/read_test.go diff --git a/src/pkg/debug/goobj/read.go b/src/cmd/nm/debug_goobj.go similarity index 64% rename from src/pkg/debug/goobj/read.go rename to src/cmd/nm/debug_goobj.go index c95fe1e47f..9a067e2b9d 100644 --- a/src/pkg/debug/goobj/read.go +++ b/src/cmd/nm/debug_goobj.go @@ -1,3 +1,8 @@ +// DO NOT EDIT. Generated by code.google.com/p/rsc/cmd/bundle +// bundle -p main -x goobj_ debug/goobj + +/* read.go */ + // Copyright 2013 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. @@ -7,7 +12,8 @@ // TODO(rsc): Decide where this package should live. (golang.org/issue/6932) // TODO(rsc): Decide the appropriate integer types for various fields. // TODO(rsc): Write tests. (File format still up in the air a little.) -package goobj + +package main import ( "bufio" @@ -20,7 +26,7 @@ import ( ) // A SymKind describes the kind of memory represented by a symbol. -type SymKind int +type goobj_SymKind int // This list is taken from include/link.h. @@ -28,108 +34,108 @@ type SymKind int // TODO(rsc): Give idiomatic Go names. // TODO(rsc): Reduce the number of symbol types in the object files. const ( - _ SymKind = iota + _ goobj_SymKind = iota // readonly, executable - STEXT - SELFRXSECT + goobj_STEXT + goobj_SELFRXSECT // readonly, non-executable - STYPE - SSTRING - SGOSTRING - SGOFUNC - SRODATA - SFUNCTAB - STYPELINK - SSYMTAB // TODO: move to unmapped section - SPCLNTAB - SELFROSECT + goobj_STYPE + goobj_SSTRING + goobj_SGOSTRING + goobj_SGOFUNC + goobj_SRODATA + goobj_SFUNCTAB + goobj_STYPELINK + goobj_SSYMTAB // TODO: move to unmapped section + goobj_SPCLNTAB + goobj_SELFROSECT // writable, non-executable - SMACHOPLT - SELFSECT - SMACHO // Mach-O __nl_symbol_ptr - SMACHOGOT - SNOPTRDATA - SINITARR - SDATA - SWINDOWS - SBSS - SNOPTRBSS - STLSBSS + goobj_SMACHOPLT + goobj_SELFSECT + goobj_SMACHO // Mach-O __nl_symbol_ptr + goobj_SMACHOGOT + goobj_SNOPTRDATA + goobj_SINITARR + goobj_SDATA + goobj_SWINDOWS + goobj_SBSS + goobj_SNOPTRBSS + goobj_STLSBSS // not mapped - SXREF - SMACHOSYMSTR - SMACHOSYMTAB - SMACHOINDIRECTPLT - SMACHOINDIRECTGOT - SFILE - SFILEPATH - SCONST - SDYNIMPORT - SHOSTOBJ + goobj_SXREF + goobj_SMACHOSYMSTR + goobj_SMACHOSYMTAB + goobj_SMACHOINDIRECTPLT + goobj_SMACHOINDIRECTGOT + goobj_SFILE + goobj_SFILEPATH + goobj_SCONST + goobj_SDYNIMPORT + goobj_SHOSTOBJ ) -var symKindStrings = []string{ - SBSS: "SBSS", - SCONST: "SCONST", - SDATA: "SDATA", - SDYNIMPORT: "SDYNIMPORT", - SELFROSECT: "SELFROSECT", - SELFRXSECT: "SELFRXSECT", - SELFSECT: "SELFSECT", - SFILE: "SFILE", - SFILEPATH: "SFILEPATH", - SFUNCTAB: "SFUNCTAB", - SGOFUNC: "SGOFUNC", - SGOSTRING: "SGOSTRING", - SHOSTOBJ: "SHOSTOBJ", - SINITARR: "SINITARR", - SMACHO: "SMACHO", - SMACHOGOT: "SMACHOGOT", - SMACHOINDIRECTGOT: "SMACHOINDIRECTGOT", - SMACHOINDIRECTPLT: "SMACHOINDIRECTPLT", - SMACHOPLT: "SMACHOPLT", - SMACHOSYMSTR: "SMACHOSYMSTR", - SMACHOSYMTAB: "SMACHOSYMTAB", - SNOPTRBSS: "SNOPTRBSS", - SNOPTRDATA: "SNOPTRDATA", - SPCLNTAB: "SPCLNTAB", - SRODATA: "SRODATA", - SSTRING: "SSTRING", - SSYMTAB: "SSYMTAB", - STEXT: "STEXT", - STLSBSS: "STLSBSS", - STYPE: "STYPE", - STYPELINK: "STYPELINK", - SWINDOWS: "SWINDOWS", - SXREF: "SXREF", +var goobj_symKindStrings = []string{ + goobj_SBSS: "SBSS", + goobj_SCONST: "SCONST", + goobj_SDATA: "SDATA", + goobj_SDYNIMPORT: "SDYNIMPORT", + goobj_SELFROSECT: "SELFROSECT", + goobj_SELFRXSECT: "SELFRXSECT", + goobj_SELFSECT: "SELFSECT", + goobj_SFILE: "SFILE", + goobj_SFILEPATH: "SFILEPATH", + goobj_SFUNCTAB: "SFUNCTAB", + goobj_SGOFUNC: "SGOFUNC", + goobj_SGOSTRING: "SGOSTRING", + goobj_SHOSTOBJ: "SHOSTOBJ", + goobj_SINITARR: "SINITARR", + goobj_SMACHO: "SMACHO", + goobj_SMACHOGOT: "SMACHOGOT", + goobj_SMACHOINDIRECTGOT: "SMACHOINDIRECTGOT", + goobj_SMACHOINDIRECTPLT: "SMACHOINDIRECTPLT", + goobj_SMACHOPLT: "SMACHOPLT", + goobj_SMACHOSYMSTR: "SMACHOSYMSTR", + goobj_SMACHOSYMTAB: "SMACHOSYMTAB", + goobj_SNOPTRBSS: "SNOPTRBSS", + goobj_SNOPTRDATA: "SNOPTRDATA", + goobj_SPCLNTAB: "SPCLNTAB", + goobj_SRODATA: "SRODATA", + goobj_SSTRING: "SSTRING", + goobj_SSYMTAB: "SSYMTAB", + goobj_STEXT: "STEXT", + goobj_STLSBSS: "STLSBSS", + goobj_STYPE: "STYPE", + goobj_STYPELINK: "STYPELINK", + goobj_SWINDOWS: "SWINDOWS", + goobj_SXREF: "SXREF", } -func (k SymKind) String() string { - if k < 0 || int(k) >= len(symKindStrings) { +func (k goobj_SymKind) String() string { + if k < 0 || int(k) >= len(goobj_symKindStrings) { return fmt.Sprintf("SymKind(%d)", k) } - return symKindStrings[k] + return goobj_symKindStrings[k] } // A Sym is a named symbol in an object file. -type Sym struct { - SymID // symbol identifier (name and version) - Kind SymKind // kind of symbol - DupOK bool // are duplicate definitions okay? - Size int // size of corresponding data - Type SymID // symbol for Go type information - Data Data // memory image of symbol - Reloc []Reloc // relocations to apply to Data - Func *Func // additional data for functions +type goobj_Sym struct { + goobj_SymID // symbol identifier (name and version) + Kind goobj_SymKind // kind of symbol + DupOK bool // are duplicate definitions okay? + Size int // size of corresponding data + Type goobj_SymID // symbol for Go type information + Data goobj_Data // memory image of symbol + Reloc []goobj_Reloc // relocations to apply to Data + Func *goobj_Func // additional data for functions } // A SymID - the combination of Name and Version - uniquely identifies // a symbol within a package. -type SymID struct { +type goobj_SymID struct { // Name is the name of a symbol. Name string @@ -141,7 +147,7 @@ type SymID struct { Version int } -func (s SymID) String() string { +func (s goobj_SymID) String() string { if s.Version == 0 { return s.Name } @@ -151,20 +157,20 @@ func (s SymID) String() string { // A Data is a reference to data stored in an object file. // It records the offset and size of the data, so that a client can // read the data only if necessary. -type Data struct { +type goobj_Data struct { Offset int64 Size int64 } // A Reloc describes a relocation applied to a memory image to refer // to an address within a particular symbol. -type Reloc struct { +type goobj_Reloc struct { // The bytes at [Offset, Offset+Size) within the memory image // should be updated to refer to the address Add bytes after the start // of the symbol Sym. Offset int Size int - Sym SymID + Sym goobj_SymID Add int // The Type records the form of address expected in the bytes @@ -175,7 +181,7 @@ type Reloc struct { // A Var describes a variable in a function stack frame: a declared // local variable, an input argument, or an output result. -type Var struct { +type goobj_Var struct { // The combination of Name, Kind, and Offset uniquely // identifies a variable in a function stack frame. // Using fewer of these - in particular, using only Name - does not. @@ -183,57 +189,57 @@ type Var struct { Kind int // TODO(rsc): Define meaning. Offset int // Frame offset. TODO(rsc): Define meaning. - Type SymID // Go type for variable. + Type goobj_SymID // Go type for variable. } // Func contains additional per-symbol information specific to functions. -type Func struct { - Args int // size in bytes of argument frame: inputs and outputs - Frame int // size in bytes of local variable frame - Leaf bool // function omits save of link register (ARM) - NoSplit bool // function omits stack split prologue - Var []Var // detail about local variables - PCSP Data // PC → SP offset map - PCFile Data // PC → file number map (index into File) - PCLine Data // PC → line number map - PCData []Data // PC → runtime support data map - FuncData []FuncData // non-PC-specific runtime support data - File []string // paths indexed by PCFile +type goobj_Func struct { + Args int // size in bytes of argument frame: inputs and outputs + Frame int // size in bytes of local variable frame + Leaf bool // function omits save of link register (ARM) + NoSplit bool // function omits stack split prologue + Var []goobj_Var // detail about local variables + PCSP goobj_Data // PC → SP offset map + PCFile goobj_Data // PC → file number map (index into File) + PCLine goobj_Data // PC → line number map + PCData []goobj_Data // PC → runtime support data map + FuncData []goobj_FuncData // non-PC-specific runtime support data + File []string // paths indexed by PCFile } // TODO: Add PCData []byte and PCDataIter (similar to liblink). // A FuncData is a single function-specific data value. -type FuncData struct { - Sym SymID // symbol holding data - Offset int64 // offset into symbol for funcdata pointer +type goobj_FuncData struct { + Sym goobj_SymID // symbol holding data + Offset int64 // offset into symbol for funcdata pointer } // A Package is a parsed Go object file or archive defining a Go package. -type Package struct { - ImportPath string // import path denoting this package - Imports []string // packages imported by this package - Syms []*Sym // symbols defined by this package - MaxVersion int // maximum Version in any SymID in Syms +type goobj_Package struct { + ImportPath string // import path denoting this package + Imports []string // packages imported by this package + Syms []*goobj_Sym // symbols defined by this package + MaxVersion int // maximum Version in any SymID in Syms } var ( - archiveHeader = []byte("!\n") - archiveMagic = []byte("`\n") - goobjHeader = []byte("go objec") // truncated to size of archiveHeader + goobj_archiveHeader = []byte("!\n") + goobj_archiveMagic = []byte("`\n") + goobj_goobjHeader = []byte("go objec") // truncated to size of archiveHeader - errCorruptArchive = errors.New("corrupt archive") - errTruncatedArchive = errors.New("truncated archive") - errNotArchive = errors.New("unrecognized archive format") + goobj_errCorruptArchive = errors.New("corrupt archive") + goobj_errTruncatedArchive = errors.New("truncated archive") + goobj_errNotArchive = errors.New("unrecognized archive format") - errCorruptObject = errors.New("corrupt object file") - errTruncatedObject = errors.New("truncated object file") - errNotObject = errors.New("unrecognized object file format") + goobj_errCorruptObject = errors.New("corrupt object file") + goobj_errTruncatedObject = errors.New("truncated object file") + goobj_errNotObject = errors.New("unrecognized object file format") ) // An objReader is an object file reader. -type objReader struct { - p *Package +type goobj_objReader struct { + p *goobj_Package b *bufio.Reader f io.ReadSeeker err error @@ -251,7 +257,7 @@ type objReader struct { // // See ../../../cmd/ld/lib.c:/^pathtoprefix and // ../../../cmd/gc/subr.c:/^pathtoprefix. -func importPathToPrefix(s string) string { +func goobj_importPathToPrefix(s string) string { // find index of last slash, if any, or else -1. // used for determining whether an index is after the last slash. slash := strings.LastIndex(s, "/") @@ -284,21 +290,21 @@ func importPathToPrefix(s string) string { } // init initializes r to read package p from f. -func (r *objReader) init(f io.ReadSeeker, p *Package) { +func (r *goobj_objReader) init(f io.ReadSeeker, p *goobj_Package) { r.f = f r.p = p r.offset, _ = f.Seek(0, 1) r.limit, _ = f.Seek(0, 2) f.Seek(r.offset, 0) r.b = bufio.NewReader(f) - r.pkgprefix = importPathToPrefix(p.ImportPath) + "." + r.pkgprefix = goobj_importPathToPrefix(p.ImportPath) + "." } // error records that an error occurred. // It returns only the first error, so that an error // caused by an earlier error does not discard information // about the earlier error. -func (r *objReader) error(err error) error { +func (r *goobj_objReader) error(err error) error { if r.err == nil { if err == io.EOF { err = io.ErrUnexpectedEOF @@ -314,7 +320,7 @@ func (r *objReader) error(err error) error { // A sequence of 0 bytes will eventually terminate any // parsing state in the object file. In particular, it ends the // reading of a varint. -func (r *objReader) readByte() byte { +func (r *goobj_objReader) readByte() byte { if r.err != nil { return 0 } @@ -339,7 +345,7 @@ func (r *objReader) readByte() byte { // If an error occurs, read returns the error but also // records it, so it is safe for callers to ignore the result // as long as delaying the report is not a problem. -func (r *objReader) readFull(b []byte) error { +func (r *goobj_objReader) readFull(b []byte) error { if r.err != nil { return r.err } @@ -355,12 +361,12 @@ func (r *objReader) readFull(b []byte) error { } // readInt reads a zigzag varint from the input file. -func (r *objReader) readInt() int { +func (r *goobj_objReader) readInt() int { var u uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - r.error(errCorruptObject) + r.error(goobj_errCorruptObject) return 0 } c := r.readByte() @@ -372,14 +378,14 @@ func (r *objReader) readInt() int { v := int64(u>>1) ^ (int64(u) << 63 >> 63) if int64(int(v)) != v { - r.error(errCorruptObject) // TODO + r.error(goobj_errCorruptObject) // TODO return 0 } return int(v) } // readString reads a length-delimited string from the input file. -func (r *objReader) readString() string { +func (r *goobj_objReader) readString() string { n := r.readInt() buf := make([]byte, n) r.readFull(buf) @@ -387,7 +393,7 @@ func (r *objReader) readString() string { } // readSymID reads a SymID from the input file. -func (r *objReader) readSymID() SymID { +func (r *goobj_objReader) readSymID() goobj_SymID { name, vers := r.readString(), r.readInt() // In a symbol name in an object file, "". denotes the @@ -403,19 +409,19 @@ func (r *objReader) readSymID() SymID { vers = r.p.MaxVersion } - return SymID{name, vers} + return goobj_SymID{name, vers} } // readData reads a data reference from the input file. -func (r *objReader) readData() Data { +func (r *goobj_objReader) readData() goobj_Data { n := r.readInt() - d := Data{Offset: r.offset, Size: int64(n)} + d := goobj_Data{Offset: r.offset, Size: int64(n)} r.skip(int64(n)) return d } // skip skips n bytes in the input. -func (r *objReader) skip(n int64) { +func (r *goobj_objReader) skip(n int64) { if n < 0 { r.error(fmt.Errorf("debug/goobj: internal error: misuse of skip")) } @@ -444,14 +450,14 @@ func (r *objReader) skip(n int64) { // Parse parses an object file or archive from r, // assuming that its import path is pkgpath. -func Parse(r io.ReadSeeker, pkgpath string) (*Package, error) { +func goobj_Parse(r io.ReadSeeker, pkgpath string) (*goobj_Package, error) { if pkgpath == "" { pkgpath = `""` } - p := new(Package) + p := new(goobj_Package) p.ImportPath = pkgpath - var rd objReader + var rd goobj_objReader rd.init(r, p) err := rd.readFull(rd.tmp[:8]) if err != nil { @@ -463,14 +469,14 @@ func Parse(r io.ReadSeeker, pkgpath string) (*Package, error) { switch { default: - return nil, errNotObject + return nil, goobj_errNotObject - case bytes.Equal(rd.tmp[:8], archiveHeader): + case bytes.Equal(rd.tmp[:8], goobj_archiveHeader): if err := rd.parseArchive(); err != nil { return nil, err } - case bytes.Equal(rd.tmp[:8], goobjHeader): - if err := rd.parseObject(goobjHeader); err != nil { + case bytes.Equal(rd.tmp[:8], goobj_goobjHeader): + if err := rd.parseObject(goobj_goobjHeader); err != nil { return nil, err } } @@ -480,7 +486,7 @@ func Parse(r io.ReadSeeker, pkgpath string) (*Package, error) { // trimSpace removes trailing spaces from b and returns the corresponding string. // This effectively parses the form used in archive headers. -func trimSpace(b []byte) string { +func goobj_trimSpace(b []byte) string { return string(bytes.TrimRight(b, " ")) } @@ -488,7 +494,7 @@ func trimSpace(b []byte) string { // TODO(rsc): Need to skip non-Go object files. // TODO(rsc): Maybe record table of contents in r.p so that // linker can avoid having code to parse archives too. -func (r *objReader) parseArchive() error { +func (r *goobj_objReader) parseArchive() error { for r.offset < r.limit { if err := r.readFull(r.tmp[:60]); err != nil { return err @@ -512,20 +518,20 @@ func (r *objReader) parseArchive() error { // The file data that follows is padded to an even number of bytes: // if size is odd, an extra padding byte is inserted betw the next header. if len(data) < 60 { - return errTruncatedArchive + return goobj_errTruncatedArchive } - if !bytes.Equal(data[58:60], archiveMagic) { - return errCorruptArchive + if !bytes.Equal(data[58:60], goobj_archiveMagic) { + return goobj_errCorruptArchive } - name := trimSpace(data[0:16]) - size, err := strconv.ParseInt(trimSpace(data[48:58]), 10, 64) + name := goobj_trimSpace(data[0:16]) + size, err := strconv.ParseInt(goobj_trimSpace(data[48:58]), 10, 64) if err != nil { - return errCorruptArchive + return goobj_errCorruptArchive } data = data[60:] fsize := size + size&1 if fsize < 0 || fsize < size { - return errCorruptArchive + return goobj_errCorruptArchive } switch name { case "__.SYMDEF", "__.GOSYMDEF", "__.PKGDEF": @@ -553,7 +559,7 @@ func (r *objReader) parseArchive() error { // and then the part we want to parse begins. // The format of that part is defined in a comment at the top // of src/liblink/objfile.c. -func (r *objReader) parseObject(prefix []byte) error { +func (r *goobj_objReader) parseObject(prefix []byte) error { // TODO(rsc): Maybe use prefix and the initial input to // record the header line from the file, which would // give the architecture and other version information. @@ -563,7 +569,7 @@ func (r *objReader) parseObject(prefix []byte) error { for { c1, c2, c3 = c2, c3, r.readByte() if c3 == 0 { // NUL or EOF, either is bad - return errCorruptObject + return goobj_errCorruptObject } if c1 == '\n' && c2 == '!' && c3 == '\n' { break @@ -572,12 +578,12 @@ func (r *objReader) parseObject(prefix []byte) error { r.readFull(r.tmp[:8]) if !bytes.Equal(r.tmp[:8], []byte("\x00\x00go13ld")) { - return r.error(errCorruptObject) + return r.error(goobj_errCorruptObject) } b := r.readByte() if b != 1 { - return r.error(errCorruptObject) + return r.error(goobj_errCorruptObject) } // Direct package dependencies. @@ -593,20 +599,20 @@ func (r *objReader) parseObject(prefix []byte) error { for { if b := r.readByte(); b != 0xfe { if b != 0xff { - return r.error(errCorruptObject) + return r.error(goobj_errCorruptObject) } break } typ := r.readInt() - s := &Sym{SymID: r.readSymID()} + s := &goobj_Sym{goobj_SymID: r.readSymID()} r.p.Syms = append(r.p.Syms, s) - s.Kind = SymKind(typ) + s.Kind = goobj_SymKind(typ) s.DupOK = r.readInt() != 0 s.Size = r.readInt() s.Type = r.readSymID() s.Data = r.readData() - s.Reloc = make([]Reloc, r.readInt()) + s.Reloc = make([]goobj_Reloc, r.readInt()) for i := range s.Reloc { rel := &s.Reloc[i] rel.Offset = r.readInt() @@ -618,14 +624,14 @@ func (r *objReader) parseObject(prefix []byte) error { r.readSymID() // Xsym - ignored } - if s.Kind == STEXT { - f := new(Func) + if s.Kind == goobj_STEXT { + f := new(goobj_Func) s.Func = f f.Args = r.readInt() f.Frame = r.readInt() f.Leaf = r.readInt() != 0 f.NoSplit = r.readInt() != 0 - f.Var = make([]Var, r.readInt()) + f.Var = make([]goobj_Var, r.readInt()) for i := range f.Var { v := &f.Var[i] v.Name = r.readSymID().Name @@ -637,11 +643,11 @@ func (r *objReader) parseObject(prefix []byte) error { f.PCSP = r.readData() f.PCFile = r.readData() f.PCLine = r.readData() - f.PCData = make([]Data, r.readInt()) + f.PCData = make([]goobj_Data, r.readInt()) for i := range f.PCData { f.PCData[i] = r.readData() } - f.FuncData = make([]FuncData, r.readInt()) + f.FuncData = make([]goobj_FuncData, r.readInt()) for i := range f.FuncData { f.FuncData[i].Sym = r.readSymID() } @@ -657,7 +663,7 @@ func (r *objReader) parseObject(prefix []byte) error { r.readFull(r.tmp[:7]) if !bytes.Equal(r.tmp[:7], []byte("\xffgo13ld")) { - return r.error(errCorruptObject) + return r.error(goobj_errCorruptObject) } return nil diff --git a/src/cmd/nm/goobj.go b/src/cmd/nm/goobj.go index b0de51db9c..5e0817d958 100644 --- a/src/cmd/nm/goobj.go +++ b/src/cmd/nm/goobj.go @@ -7,12 +7,11 @@ package main import ( - "debug/goobj" "fmt" "os" ) -func goobjName(id goobj.SymID) string { +func goobjName(id goobj_SymID) string { if id.Version == 0 { return id.Name } @@ -20,28 +19,28 @@ func goobjName(id goobj.SymID) string { } func goobjSymbols(f *os.File) []Sym { - pkg, err := goobj.Parse(f, `""`) + pkg, err := goobj_Parse(f, `""`) if err != nil { errorf("parsing %s: %v", f.Name(), err) return nil } - seen := make(map[goobj.SymID]bool) + seen := make(map[goobj_SymID]bool) var syms []Sym for _, s := range pkg.Syms { - seen[s.SymID] = true - sym := Sym{Addr: uint64(s.Data.Offset), Name: goobjName(s.SymID), Size: int64(s.Size), Type: s.Type.Name, Code: '?'} + seen[s.goobj_SymID] = true + sym := Sym{Addr: uint64(s.Data.Offset), Name: goobjName(s.goobj_SymID), Size: int64(s.Size), Type: s.Type.Name, Code: '?'} switch s.Kind { - case goobj.STEXT, goobj.SELFRXSECT: + case goobj_STEXT, goobj_SELFRXSECT: sym.Code = 'T' - case goobj.STYPE, goobj.SSTRING, goobj.SGOSTRING, goobj.SGOFUNC, goobj.SRODATA, goobj.SFUNCTAB, goobj.STYPELINK, goobj.SSYMTAB, goobj.SPCLNTAB, goobj.SELFROSECT: + case goobj_STYPE, goobj_SSTRING, goobj_SGOSTRING, goobj_SGOFUNC, goobj_SRODATA, goobj_SFUNCTAB, goobj_STYPELINK, goobj_SSYMTAB, goobj_SPCLNTAB, goobj_SELFROSECT: sym.Code = 'R' - case goobj.SMACHOPLT, goobj.SELFSECT, goobj.SMACHO, goobj.SMACHOGOT, goobj.SNOPTRDATA, goobj.SINITARR, goobj.SDATA, goobj.SWINDOWS: + case goobj_SMACHOPLT, goobj_SELFSECT, goobj_SMACHO, goobj_SMACHOGOT, goobj_SNOPTRDATA, goobj_SINITARR, goobj_SDATA, goobj_SWINDOWS: sym.Code = 'D' - case goobj.SBSS, goobj.SNOPTRBSS, goobj.STLSBSS: + case goobj_SBSS, goobj_SNOPTRBSS, goobj_STLSBSS: sym.Code = 'B' - case goobj.SXREF, goobj.SMACHOSYMSTR, goobj.SMACHOSYMTAB, goobj.SMACHOINDIRECTPLT, goobj.SMACHOINDIRECTGOT, goobj.SFILE, goobj.SFILEPATH, goobj.SCONST, goobj.SDYNIMPORT, goobj.SHOSTOBJ: + case goobj_SXREF, goobj_SMACHOSYMSTR, goobj_SMACHOSYMTAB, goobj_SMACHOINDIRECTPLT, goobj_SMACHOINDIRECTGOT, goobj_SFILE, goobj_SFILEPATH, goobj_SCONST, goobj_SDYNIMPORT, goobj_SHOSTOBJ: sym.Code = 'X' // should not see } if s.Version != 0 { diff --git a/src/pkg/debug/goobj/read_test.go b/src/pkg/debug/goobj/read_test.go deleted file mode 100644 index dee140533c..0000000000 --- a/src/pkg/debug/goobj/read_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package goobj - -import "testing" - -var importPathToPrefixTests = []struct { - in string - out string -}{ - {"runtime", "runtime"}, - {"sync/atomic", "sync/atomic"}, - {"code.google.com/p/go.tools/godoc", "code.google.com/p/go.tools/godoc"}, - {"foo.bar/baz.quux", "foo.bar/baz%2equux"}, - {"", ""}, - {"%foo%bar", "%25foo%25bar"}, - {"\x01\x00\x7F☺", "%01%00%7f%e2%98%ba"}, -} - -func TestImportPathToPrefix(t *testing.T) { - for _, tt := range importPathToPrefixTests { - if out := importPathToPrefix(tt.in); out != tt.out { - t.Errorf("importPathToPrefix(%q) = %q, want %q", tt.in, out, tt.out) - } - } -} -- 2.48.1