Commit 0ece9c4b authored by Alex Brainman's avatar Alex Brainman

debug/pe: revert CL 22720

CL 22720 hid all recently added functionality for go1.7.
Make everything exported again, so we could use it now.

Updates #15345

Change-Id: Id8ccba7199422b554407ec14c343d2c28fbb8f72
Reviewed-on: https://go-review.googlesource.com/27212
Run-TryBot: Alex Brainman <alex.brainman@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: default avatarDavid Crawshaw <crawshaw@golang.org>
parent e41b0e2b
...@@ -19,8 +19,8 @@ type File struct { ...@@ -19,8 +19,8 @@ type File struct {
OptionalHeader interface{} // of type *OptionalHeader32 or *OptionalHeader64 OptionalHeader interface{} // of type *OptionalHeader32 or *OptionalHeader64
Sections []*Section Sections []*Section
Symbols []*Symbol // COFF symbols with auxiliary symbol records removed Symbols []*Symbol // COFF symbols with auxiliary symbol records removed
_COFFSymbols []COFFSymbol // all COFF symbols (including auxiliary symbol records) COFFSymbols []COFFSymbol // all COFF symbols (including auxiliary symbol records)
_StringTable _StringTable StringTable StringTable
closer io.Closer closer io.Closer
} }
...@@ -93,17 +93,17 @@ func NewFile(r io.ReaderAt) (*File, error) { ...@@ -93,17 +93,17 @@ func NewFile(r io.ReaderAt) (*File, error) {
var err error var err error
// Read string table. // Read string table.
f._StringTable, err = readStringTable(&f.FileHeader, sr) f.StringTable, err = readStringTable(&f.FileHeader, sr)
if err != nil { if err != nil {
return nil, err return nil, err
} }
// Read symbol table. // Read symbol table.
f._COFFSymbols, err = readCOFFSymbols(&f.FileHeader, sr) f.COFFSymbols, err = readCOFFSymbols(&f.FileHeader, sr)
if err != nil { if err != nil {
return nil, err return nil, err
} }
f.Symbols, err = removeAuxSymbols(f._COFFSymbols, f._StringTable) f.Symbols, err = removeAuxSymbols(f.COFFSymbols, f.StringTable)
if err != nil { if err != nil {
return nil, err return nil, err
} }
...@@ -141,7 +141,7 @@ func NewFile(r io.ReaderAt) (*File, error) { ...@@ -141,7 +141,7 @@ func NewFile(r io.ReaderAt) (*File, error) {
if err := binary.Read(sr, binary.LittleEndian, sh); err != nil { if err := binary.Read(sr, binary.LittleEndian, sh); err != nil {
return nil, err return nil, err
} }
name, err := sh.fullName(f._StringTable) name, err := sh.fullName(f.StringTable)
if err != nil { if err != nil {
return nil, err return nil, err
} }
...@@ -168,7 +168,7 @@ func NewFile(r io.ReaderAt) (*File, error) { ...@@ -168,7 +168,7 @@ func NewFile(r io.ReaderAt) (*File, error) {
} }
for i := range f.Sections { for i := range f.Sections {
var err error var err error
f.Sections[i]._Relocs, err = readRelocs(&f.Sections[i].SectionHeader, sr) f.Sections[i].Relocs, err = readRelocs(&f.Sections[i].SectionHeader, sr)
if err != nil { if err != nil {
return nil, err return nil, err
} }
......
...@@ -28,7 +28,7 @@ type SectionHeader32 struct { ...@@ -28,7 +28,7 @@ type SectionHeader32 struct {
// fullName finds real name of section sh. Normally name is stored // fullName finds real name of section sh. Normally name is stored
// in sh.Name, but if it is longer then 8 characters, it is stored // in sh.Name, but if it is longer then 8 characters, it is stored
// in COFF string table st instead. // in COFF string table st instead.
func (sh *SectionHeader32) fullName(st _StringTable) (string, error) { func (sh *SectionHeader32) fullName(st StringTable) (string, error) {
if sh.Name[0] != '/' { if sh.Name[0] != '/' {
return cstring(sh.Name[:]), nil return cstring(sh.Name[:]), nil
} }
...@@ -41,15 +41,15 @@ func (sh *SectionHeader32) fullName(st _StringTable) (string, error) { ...@@ -41,15 +41,15 @@ func (sh *SectionHeader32) fullName(st _StringTable) (string, error) {
// TODO(brainman): copy all IMAGE_REL_* consts from ldpe.go here // TODO(brainman): copy all IMAGE_REL_* consts from ldpe.go here
// _Reloc represents a PE COFF relocation. // Reloc represents a PE COFF relocation.
// Each section contains its own relocation list. // Each section contains its own relocation list.
type _Reloc struct { type Reloc struct {
VirtualAddress uint32 VirtualAddress uint32
SymbolTableIndex uint32 SymbolTableIndex uint32
Type uint16 Type uint16
} }
func readRelocs(sh *SectionHeader, r io.ReadSeeker) ([]_Reloc, error) { func readRelocs(sh *SectionHeader, r io.ReadSeeker) ([]Reloc, error) {
if sh.NumberOfRelocations <= 0 { if sh.NumberOfRelocations <= 0 {
return nil, nil return nil, nil
} }
...@@ -57,7 +57,7 @@ func readRelocs(sh *SectionHeader, r io.ReadSeeker) ([]_Reloc, error) { ...@@ -57,7 +57,7 @@ func readRelocs(sh *SectionHeader, r io.ReadSeeker) ([]_Reloc, error) {
if err != nil { if err != nil {
return nil, fmt.Errorf("fail to seek to %q section relocations: %v", sh.Name, err) return nil, fmt.Errorf("fail to seek to %q section relocations: %v", sh.Name, err)
} }
relocs := make([]_Reloc, sh.NumberOfRelocations) relocs := make([]Reloc, sh.NumberOfRelocations)
err = binary.Read(r, binary.LittleEndian, relocs) err = binary.Read(r, binary.LittleEndian, relocs)
if err != nil { if err != nil {
return nil, fmt.Errorf("fail to read section relocations: %v", err) return nil, fmt.Errorf("fail to read section relocations: %v", err)
...@@ -83,7 +83,7 @@ type SectionHeader struct { ...@@ -83,7 +83,7 @@ type SectionHeader struct {
// Section provides access to PE COFF section. // Section provides access to PE COFF section.
type Section struct { type Section struct {
SectionHeader SectionHeader
_Relocs []_Reloc Relocs []Reloc
// Embed ReaderAt for ReadAt method. // Embed ReaderAt for ReadAt method.
// Do not embed SectionReader directly // Do not embed SectionReader directly
......
...@@ -19,10 +19,10 @@ func cstring(b []byte) string { ...@@ -19,10 +19,10 @@ func cstring(b []byte) string {
return string(b[:i]) return string(b[:i])
} }
// _StringTable is a COFF string table. // StringTable is a COFF string table.
type _StringTable []byte type StringTable []byte
func readStringTable(fh *FileHeader, r io.ReadSeeker) (_StringTable, error) { func readStringTable(fh *FileHeader, r io.ReadSeeker) (StringTable, error) {
// COFF string table is located right after COFF symbol table. // COFF string table is located right after COFF symbol table.
if fh.PointerToSymbolTable <= 0 { if fh.PointerToSymbolTable <= 0 {
return nil, nil return nil, nil
...@@ -47,13 +47,13 @@ func readStringTable(fh *FileHeader, r io.ReadSeeker) (_StringTable, error) { ...@@ -47,13 +47,13 @@ func readStringTable(fh *FileHeader, r io.ReadSeeker) (_StringTable, error) {
if err != nil { if err != nil {
return nil, fmt.Errorf("fail to read string table: %v", err) return nil, fmt.Errorf("fail to read string table: %v", err)
} }
return _StringTable(buf), nil return StringTable(buf), nil
} }
// TODO(brainman): decide if start parameter should be int instead of uint32 // TODO(brainman): decide if start parameter should be int instead of uint32
// String extracts string from COFF string table st at offset start. // String extracts string from COFF string table st at offset start.
func (st _StringTable) String(start uint32) (string, error) { func (st StringTable) String(start uint32) (string, error) {
// start includes 4 bytes of string table length // start includes 4 bytes of string table length
if start < 4 { if start < 4 {
return "", fmt.Errorf("offset %d is before the start of string table", start) return "", fmt.Errorf("offset %d is before the start of string table", start)
......
...@@ -46,17 +46,17 @@ func isSymNameOffset(name [8]byte) (bool, uint32) { ...@@ -46,17 +46,17 @@ func isSymNameOffset(name [8]byte) (bool, uint32) {
return false, 0 return false, 0
} }
// _FullName finds real name of symbol sym. Normally name is stored // FullName finds real name of symbol sym. Normally name is stored
// in sym.Name, but if it is longer then 8 characters, it is stored // in sym.Name, but if it is longer then 8 characters, it is stored
// in COFF string table st instead. // in COFF string table st instead.
func (sym *COFFSymbol) _FullName(st _StringTable) (string, error) { func (sym *COFFSymbol) FullName(st StringTable) (string, error) {
if ok, offset := isSymNameOffset(sym.Name); ok { if ok, offset := isSymNameOffset(sym.Name); ok {
return st.String(offset) return st.String(offset)
} }
return cstring(sym.Name[:]), nil return cstring(sym.Name[:]), nil
} }
func removeAuxSymbols(allsyms []COFFSymbol, st _StringTable) ([]*Symbol, error) { func removeAuxSymbols(allsyms []COFFSymbol, st StringTable) ([]*Symbol, error) {
if len(allsyms) == 0 { if len(allsyms) == 0 {
return nil, nil return nil, nil
} }
...@@ -67,7 +67,7 @@ func removeAuxSymbols(allsyms []COFFSymbol, st _StringTable) ([]*Symbol, error) ...@@ -67,7 +67,7 @@ func removeAuxSymbols(allsyms []COFFSymbol, st _StringTable) ([]*Symbol, error)
aux-- aux--
continue continue
} }
name, err := sym._FullName(st) name, err := sym.FullName(st)
if err != nil { if err != nil {
return nil, err return nil, err
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment