]> Cypherpunks repositories - gostls13.git/commitdiff
[release-branch.go1.3] remove package debug/goobj and copy functionality to cmd/nm
authorAndrew Gerrand <adg@golang.org>
Mon, 2 Jun 2014 03:04:43 +0000 (13:04 +1000)
committerAndrew Gerrand <adg@golang.org>
Mon, 2 Jun 2014 03:04:43 +0000 (13:04 +1000)
https://golang.org/cl/103760043/

src/cmd/nm/debug_goobj.go [moved from src/pkg/debug/goobj/read.go with 64% similarity]
src/cmd/nm/goobj.go
src/pkg/debug/goobj/read_test.go [deleted file]

similarity index 64%
rename from src/pkg/debug/goobj/read.go
rename to src/cmd/nm/debug_goobj.go
index c95fe1e47f3e567755f62f07fa5ab1ce9a912a2a..9a067e2b9dada513bd2a6f029b7298d9ce6410c1 100644 (file)
@@ -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("!<arch>\n")
-       archiveMagic  = []byte("`\n")
-       goobjHeader   = []byte("go objec") // truncated to size of archiveHeader
+       goobj_archiveHeader = []byte("!<arch>\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
index b0de51db9c033b4c8d7b66e40189ffd9deb9c046..5e0817d958b6515d782d8c2453a0b793710dea79 100644 (file)
@@ -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 (file)
index dee1405..0000000
+++ /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)
-               }
-       }
-}