summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Gerrand <adg@golang.org>2014-06-02 13:04:43 +1000
committerAndrew Gerrand <adg@golang.org>2014-06-02 13:04:43 +1000
commit2540738537b58250b79123668ee763768a1dfe84 (patch)
tree9988f192041372e9b69711d7ca9a1972180fd2a0
parent52fe5bf4152afa6c8c286a6e5c7834c1adf2a4cf (diff)
downloadgo-2540738537b58250b79123668ee763768a1dfe84.tar.gz
[release-branch.go1.3] remove package debug/goobj and copy functionality to cmd/nm
https://codereview.appspot.com/103760043/
-rw-r--r--src/cmd/nm/debug_goobj.go (renamed from src/pkg/debug/goobj/read.go)336
-rw-r--r--src/cmd/nm/goobj.go21
-rw-r--r--src/pkg/debug/goobj/read_test.go28
3 files changed, 181 insertions, 204 deletions
diff --git a/src/pkg/debug/goobj/read.go b/src/cmd/nm/debug_goobj.go
index c95fe1e47..9a067e2b9 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("!<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
diff --git a/src/cmd/nm/goobj.go b/src/cmd/nm/goobj.go
index b0de51db9..5e0817d95 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 dee140533..000000000
--- 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)
- }
- }
-}