proc/dwarf: Move util functions to dwarf package (#3252)

This commit is contained in:
Oleksandr Redko
2023-01-16 19:20:20 +02:00
committed by GitHub
parent 13143680f7
commit 58fc3931e8
13 changed files with 60 additions and 103 deletions

View File

@ -9,8 +9,8 @@ import (
"fmt" "fmt"
"io" "io"
"github.com/go-delve/delve/pkg/dwarf"
"github.com/go-delve/delve/pkg/dwarf/leb128" "github.com/go-delve/delve/pkg/dwarf/leb128"
"github.com/go-delve/delve/pkg/dwarf/util"
) )
type parsefunc func(*parseContext) parsefunc type parsefunc func(*parseContext) parsefunc
@ -154,7 +154,7 @@ func parseCIE(ctx *parseContext) parsefunc {
ctx.common.Version, _ = buf.ReadByte() ctx.common.Version, _ = buf.ReadByte()
// parse augmentation // parse augmentation
ctx.common.Augmentation, _ = util.ParseString(buf) ctx.common.Augmentation, _ = dwarf.ReadString(buf)
if ctx.parsingEHFrame() { if ctx.parsingEHFrame() {
if ctx.common.Augmentation == "eh" { if ctx.common.Augmentation == "eh" {
@ -241,21 +241,21 @@ func (ctx *parseContext) readEncodedPtr(addr uint64, buf leb128.Reader, ptrEnc p
switch ptrEnc & 0xf { switch ptrEnc & 0xf {
case ptrEncAbs, ptrEncSigned: case ptrEncAbs, ptrEncSigned:
ptr, _ = util.ReadUintRaw(buf, binary.LittleEndian, ctx.ptrSize) ptr, _ = dwarf.ReadUintRaw(buf, binary.LittleEndian, ctx.ptrSize)
case ptrEncUleb: case ptrEncUleb:
ptr, _ = leb128.DecodeUnsigned(buf) ptr, _ = leb128.DecodeUnsigned(buf)
case ptrEncUdata2: case ptrEncUdata2:
ptr, _ = util.ReadUintRaw(buf, binary.LittleEndian, 2) ptr, _ = dwarf.ReadUintRaw(buf, binary.LittleEndian, 2)
case ptrEncSdata2: case ptrEncSdata2:
ptr, _ = util.ReadUintRaw(buf, binary.LittleEndian, 2) ptr, _ = dwarf.ReadUintRaw(buf, binary.LittleEndian, 2)
ptr = uint64(int16(ptr)) ptr = uint64(int16(ptr))
case ptrEncUdata4: case ptrEncUdata4:
ptr, _ = util.ReadUintRaw(buf, binary.LittleEndian, 4) ptr, _ = dwarf.ReadUintRaw(buf, binary.LittleEndian, 4)
case ptrEncSdata4: case ptrEncSdata4:
ptr, _ = util.ReadUintRaw(buf, binary.LittleEndian, 4) ptr, _ = dwarf.ReadUintRaw(buf, binary.LittleEndian, 4)
ptr = uint64(int32(ptr)) ptr = uint64(int32(ptr))
case ptrEncUdata8, ptrEncSdata8: case ptrEncUdata8, ptrEncSdata8:
ptr, _ = util.ReadUintRaw(buf, binary.LittleEndian, 8) ptr, _ = dwarf.ReadUintRaw(buf, binary.LittleEndian, 8)
case ptrEncSleb: case ptrEncSleb:
n, _ := leb128.DecodeSigned(buf) n, _ := leb128.DecodeSigned(buf)
ptr = uint64(n) ptr = uint64(n)

View File

@ -5,7 +5,7 @@ import (
"encoding/binary" "encoding/binary"
"errors" "errors"
"github.com/go-delve/delve/pkg/dwarf/util" "github.com/go-delve/delve/pkg/dwarf"
) )
// DebugAddrSection represents the debug_addr section of DWARFv5. // DebugAddrSection represents the debug_addr section of DWARFv5.
@ -22,7 +22,7 @@ func ParseAddr(data []byte) *DebugAddrSection {
return nil return nil
} }
r := &DebugAddrSection{data: data} r := &DebugAddrSection{data: data}
_, dwarf64, _, byteOrder := util.ReadDwarfLengthVersion(data) _, dwarf64, _, byteOrder := dwarf.ReadDwarfLengthVersion(data)
r.byteOrder = byteOrder r.byteOrder = byteOrder
data = data[6:] data = data[6:]
if dwarf64 { if dwarf64 {
@ -56,5 +56,5 @@ func (addr *DebugAddr) Get(idx uint64) (uint64, error) {
return 0, errors.New("debug_addr section not present") return 0, errors.New("debug_addr section not present")
} }
off := idx*uint64(addr.ptrSz) + addr.addrBase off := idx*uint64(addr.ptrSz) + addr.addrBase
return util.ReadUintRaw(bytes.NewReader(addr.data[off:]), addr.byteOrder, addr.ptrSz) return dwarf.ReadUintRaw(bytes.NewReader(addr.data[off:]), addr.byteOrder, addr.ptrSz)
} }

View File

@ -2,18 +2,16 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
// Buffered reading and decoding of DWARF data streams.
//lint:file-ignore ST1021 imported file //lint:file-ignore ST1021 imported file
package util package godwarf
import ( import (
"debug/dwarf" "debug/dwarf"
"fmt" "fmt"
) )
// Data buffer being decoded. // buf is data buffer being decoded.
type buf struct { type buf struct {
dwarf *dwarf.Data dwarf *dwarf.Data
format dataFormat format dataFormat
@ -23,7 +21,7 @@ type buf struct {
Err error Err error
} }
// Data format, other than byte order. This affects the handling of // Data format, other than byte order. This affects the handling of
// certain field formats. // certain field formats.
type dataFormat interface { type dataFormat interface {
// DWARF version number. Zero means unknown. // DWARF version number. Zero means unknown.
@ -36,25 +34,27 @@ type dataFormat interface {
addrsize() int addrsize() int
} }
// UnknownFormat is a struct for some parts of DWARF that have no data format, e.g., abbrevs. // unknownFormat is a struct for some parts of DWARF that have no data format, e.g., abbrevs.
type UnknownFormat struct{} type unknownFormat struct{}
func (u UnknownFormat) version() int { func (u unknownFormat) version() int {
return 0 return 0
} }
func (u UnknownFormat) dwarf64() (bool, bool) { func (u unknownFormat) dwarf64() (bool, bool) {
return false, false return false, false
} }
func (u UnknownFormat) addrsize() int { func (u unknownFormat) addrsize() int {
return 0 return 0
} }
func MakeBuf(d *dwarf.Data, format dataFormat, name string, off dwarf.Offset, data []byte) buf { // makeBuf creates buf for reading and decoding of DWARF data streams.
func makeBuf(d *dwarf.Data, format dataFormat, name string, off dwarf.Offset, data []byte) buf {
return buf{d, format, name, off, data, nil} return buf{d, format, name, off, data, nil}
} }
// Uint8 reads an uint8.
func (b *buf) Uint8() uint8 { func (b *buf) Uint8() uint8 {
if len(b.data) < 1 { if len(b.data) < 1 {
b.error("underflow") b.error("underflow")

View File

@ -17,7 +17,6 @@ import (
"strconv" "strconv"
"github.com/go-delve/delve/pkg/dwarf/op" "github.com/go-delve/delve/pkg/dwarf/op"
"github.com/go-delve/delve/pkg/dwarf/util"
) )
const ( const (
@ -827,7 +826,7 @@ func readType(d *dwarf.Data, name string, r *dwarf.Reader, off dwarf.Offset, typ
// Empty exprloc. f.ByteOffset=0. // Empty exprloc. f.ByteOffset=0.
break break
} }
b := util.MakeBuf(d, util.UnknownFormat{}, "location", 0, loc) b := makeBuf(d, unknownFormat{}, "location", 0, loc)
op_ := op.Opcode(b.Uint8()) op_ := op.Opcode(b.Uint8())
switch op_ { switch op_ {
case op.DW_OP_plus_uconst: case op.DW_OP_plus_uconst:

View File

@ -6,8 +6,8 @@ import (
"path" "path"
"strings" "strings"
"github.com/go-delve/delve/pkg/dwarf"
"github.com/go-delve/delve/pkg/dwarf/leb128" "github.com/go-delve/delve/pkg/dwarf/leb128"
"github.com/go-delve/delve/pkg/dwarf/util"
) )
// DebugLinePrologue prologue of .debug_line data. // DebugLinePrologue prologue of .debug_line data.
@ -152,7 +152,7 @@ func parseDebugLinePrologue(dbl *DebugLineInfo, buf *bytes.Buffer) {
// parseIncludeDirs2 parses the directory table for DWARF version 2 through 4. // parseIncludeDirs2 parses the directory table for DWARF version 2 through 4.
func parseIncludeDirs2(info *DebugLineInfo, buf *bytes.Buffer) bool { func parseIncludeDirs2(info *DebugLineInfo, buf *bytes.Buffer) bool {
for { for {
str, err := util.ParseString(buf) str, err := dwarf.ReadString(buf)
if err != nil { if err != nil {
if info.Logf != nil { if info.Logf != nil {
info.Logf("error reading string: %v", err) info.Logf("error reading string: %v", err)
@ -186,7 +186,7 @@ func parseIncludeDirs5(info *DebugLineInfo, buf *bytes.Buffer) bool {
info.IncludeDirs = append(info.IncludeDirs, dirEntryFormReader.str) info.IncludeDirs = append(info.IncludeDirs, dirEntryFormReader.str)
case _DW_FORM_line_strp: case _DW_FORM_line_strp:
buf := bytes.NewBuffer(info.debugLineStr[dirEntryFormReader.u64:]) buf := bytes.NewBuffer(info.debugLineStr[dirEntryFormReader.u64:])
dir, _ := util.ParseString(buf) dir, _ := dwarf.ReadString(buf)
info.IncludeDirs = append(info.IncludeDirs, dir) info.IncludeDirs = append(info.IncludeDirs, dir)
default: default:
info.Logf("unsupported string form %#x", dirEntryFormReader.formCode) info.Logf("unsupported string form %#x", dirEntryFormReader.formCode)
@ -228,7 +228,7 @@ func readFileEntry(info *DebugLineInfo, buf *bytes.Buffer, exitOnEmptyPath bool)
entry := new(FileEntry) entry := new(FileEntry)
var err error var err error
entry.Path, err = util.ParseString(buf) entry.Path, err = dwarf.ReadString(buf)
if err != nil { if err != nil {
if info.Logf != nil { if info.Logf != nil {
info.Logf("error reading file entry: %v", err) info.Logf("error reading file entry: %v", err)
@ -299,7 +299,7 @@ func parseFileEntries5(info *DebugLineInfo, buf *bytes.Buffer) bool {
p = fileEntryFormReader.str p = fileEntryFormReader.str
case _DW_FORM_line_strp: case _DW_FORM_line_strp:
buf := bytes.NewBuffer(info.debugLineStr[fileEntryFormReader.u64:]) buf := bytes.NewBuffer(info.debugLineStr[fileEntryFormReader.u64:])
p, _ = util.ParseString(buf) p, _ = dwarf.ReadString(buf)
default: default:
info.Logf("unsupported string form %#x", fileEntryFormReader.formCode) info.Logf("unsupported string form %#x", fileEntryFormReader.formCode)
} }

View File

@ -5,8 +5,8 @@ import (
"encoding/binary" "encoding/binary"
"errors" "errors"
"github.com/go-delve/delve/pkg/dwarf"
"github.com/go-delve/delve/pkg/dwarf/leb128" "github.com/go-delve/delve/pkg/dwarf/leb128"
"github.com/go-delve/delve/pkg/dwarf/util"
) )
const ( const (
@ -157,7 +157,7 @@ func (rdr *formReader) next(buf *bytes.Buffer) bool {
rdr.u64, _ = leb128.DecodeUnsigned(buf) rdr.u64, _ = leb128.DecodeUnsigned(buf)
case _DW_FORM_string: case _DW_FORM_string:
rdr.str, _ = util.ParseString(buf) rdr.str, _ = dwarf.ReadString(buf)
case _DW_FORM_strx3: case _DW_FORM_strx3:
if buf.Len() < 3 { if buf.Len() < 3 {

View File

@ -7,8 +7,8 @@ import (
"fmt" "fmt"
"io" "io"
"github.com/go-delve/delve/pkg/dwarf"
"github.com/go-delve/delve/pkg/dwarf/leb128" "github.com/go-delve/delve/pkg/dwarf/leb128"
"github.com/go-delve/delve/pkg/dwarf/util"
) )
type Location struct { type Location struct {
@ -503,7 +503,7 @@ func endsequence(sm *StateMachine, buf *bytes.Buffer) {
} }
func setaddress(sm *StateMachine, buf *bytes.Buffer) { func setaddress(sm *StateMachine, buf *bytes.Buffer) {
addr, err := util.ReadUintRaw(buf, binary.LittleEndian, sm.ptrSize) addr, err := dwarf.ReadUintRaw(buf, binary.LittleEndian, sm.ptrSize)
if err != nil { if err != nil {
panic(err) panic(err)
} }

View File

@ -13,8 +13,8 @@ import (
"runtime" "runtime"
"testing" "testing"
pdwarf "github.com/go-delve/delve/pkg/dwarf"
"github.com/go-delve/delve/pkg/dwarf/leb128" "github.com/go-delve/delve/pkg/dwarf/leb128"
"github.com/go-delve/delve/pkg/dwarf/util"
) )
func slurpGzip(path string) ([]byte, error) { func slurpGzip(path string) ([]byte, error) {
@ -139,7 +139,7 @@ func TestMultipleSequences(t *testing.T) {
instr.WriteByte(0) instr.WriteByte(0)
leb128.EncodeUnsigned(instr, 9) // 1 + ptr_size leb128.EncodeUnsigned(instr, 9) // 1 + ptr_size
instr.WriteByte(DW_LINE_set_address) instr.WriteByte(DW_LINE_set_address)
util.WriteUint(instr, binary.LittleEndian, ptrSize, addr) pdwarf.WriteUint(instr, binary.LittleEndian, ptrSize, addr)
} }
write_DW_LNS_copy := func() { write_DW_LNS_copy := func() {

View File

@ -5,9 +5,9 @@ import (
"encoding/binary" "encoding/binary"
"fmt" "fmt"
"github.com/go-delve/delve/pkg/dwarf"
"github.com/go-delve/delve/pkg/dwarf/godwarf" "github.com/go-delve/delve/pkg/dwarf/godwarf"
"github.com/go-delve/delve/pkg/dwarf/leb128" "github.com/go-delve/delve/pkg/dwarf/leb128"
"github.com/go-delve/delve/pkg/dwarf/util"
) )
// Dwarf5Reader parses and presents DWARF loclist information for DWARF version 5 and later. // Dwarf5Reader parses and presents DWARF loclist information for DWARF version 5 and later.
@ -24,7 +24,7 @@ func NewDwarf5Reader(data []byte) *Dwarf5Reader {
} }
r := &Dwarf5Reader{data: data} r := &Dwarf5Reader{data: data}
_, dwarf64, _, byteOrder := util.ReadDwarfLengthVersion(data) _, dwarf64, _, byteOrder := dwarf.ReadDwarfLengthVersion(data)
r.byteOrder = byteOrder r.byteOrder = byteOrder
data = data[6:] data = data[6:]
@ -161,18 +161,18 @@ func (it *loclistsIterator) next() bool {
it.onRange = false it.onRange = false
case _DW_LLE_base_address: case _DW_LLE_base_address:
it.base, it.err = util.ReadUintRaw(it.buf, it.rdr.byteOrder, it.rdr.ptrSz) it.base, it.err = dwarf.ReadUintRaw(it.buf, it.rdr.byteOrder, it.rdr.ptrSz)
it.base += it.staticBase it.base += it.staticBase
it.onRange = false it.onRange = false
case _DW_LLE_start_end: case _DW_LLE_start_end:
it.start, it.err = util.ReadUintRaw(it.buf, it.rdr.byteOrder, it.rdr.ptrSz) it.start, it.err = dwarf.ReadUintRaw(it.buf, it.rdr.byteOrder, it.rdr.ptrSz)
it.end, it.err = util.ReadUintRaw(it.buf, it.rdr.byteOrder, it.rdr.ptrSz) it.end, it.err = dwarf.ReadUintRaw(it.buf, it.rdr.byteOrder, it.rdr.ptrSz)
it.readInstr() it.readInstr()
it.onRange = true it.onRange = true
case _DW_LLE_start_length: case _DW_LLE_start_length:
it.start, it.err = util.ReadUintRaw(it.buf, it.rdr.byteOrder, it.rdr.ptrSz) it.start, it.err = dwarf.ReadUintRaw(it.buf, it.rdr.byteOrder, it.rdr.ptrSz)
length, _ := leb128.DecodeUnsigned(it.buf) length, _ := leb128.DecodeUnsigned(it.buf)
it.readInstr() it.readInstr()
it.end = it.start + length it.end = it.start + length

View File

@ -8,7 +8,7 @@ import (
"io" "io"
"github.com/go-delve/delve/pkg/dwarf/leb128" "github.com/go-delve/delve/pkg/dwarf/leb128"
"github.com/go-delve/delve/pkg/dwarf/util" "github.com/go-delve/delve/pkg/dwarf"
) )
// Opcode represent a DWARF stack program instruction. // Opcode represent a DWARF stack program instruction.
@ -213,7 +213,7 @@ func callframecfa(opcode Opcode, ctxt *context) error {
func addr(opcode Opcode, ctxt *context) error { func addr(opcode Opcode, ctxt *context) error {
buf := ctxt.buf.Next(ctxt.ptrSize) buf := ctxt.buf.Next(ctxt.ptrSize)
stack, err := util.ReadUintRaw(bytes.NewReader(buf), binary.LittleEndian, ctxt.ptrSize) stack, err := dwarf.ReadUintRaw(bytes.NewReader(buf), binary.LittleEndian, ctxt.ptrSize)
if err != nil { if err != nil {
return err return err
} }
@ -297,11 +297,11 @@ func constnu(opcode Opcode, ctxt *context) error {
b, err = ctxt.buf.ReadByte() b, err = ctxt.buf.ReadByte()
n = uint64(b) n = uint64(b)
case DW_OP_const2u: case DW_OP_const2u:
n, err = util.ReadUintRaw(ctxt.buf, binary.LittleEndian, 2) n, err = dwarf.ReadUintRaw(ctxt.buf, binary.LittleEndian, 2)
case DW_OP_const4u: case DW_OP_const4u:
n, err = util.ReadUintRaw(ctxt.buf, binary.LittleEndian, 4) n, err = dwarf.ReadUintRaw(ctxt.buf, binary.LittleEndian, 4)
case DW_OP_const8u: case DW_OP_const8u:
n, err = util.ReadUintRaw(ctxt.buf, binary.LittleEndian, 8) n, err = dwarf.ReadUintRaw(ctxt.buf, binary.LittleEndian, 8)
default: default:
panic("internal error") panic("internal error")
} }
@ -323,13 +323,13 @@ func constns(opcode Opcode, ctxt *context) error {
b, err = ctxt.buf.ReadByte() b, err = ctxt.buf.ReadByte()
n = uint64(int64(int8(b))) n = uint64(int64(int8(b)))
case DW_OP_const2s: case DW_OP_const2s:
n, err = util.ReadUintRaw(ctxt.buf, binary.LittleEndian, 2) n, err = dwarf.ReadUintRaw(ctxt.buf, binary.LittleEndian, 2)
n = uint64(int64(int16(n))) n = uint64(int64(int16(n)))
case DW_OP_const4s: case DW_OP_const4s:
n, err = util.ReadUintRaw(ctxt.buf, binary.LittleEndian, 4) n, err = dwarf.ReadUintRaw(ctxt.buf, binary.LittleEndian, 4)
n = uint64(int64(int32(n))) n = uint64(int64(int32(n)))
case DW_OP_const8s: case DW_OP_const8s:
n, err = util.ReadUintRaw(ctxt.buf, binary.LittleEndian, 8) n, err = dwarf.ReadUintRaw(ctxt.buf, binary.LittleEndian, 8)
default: default:
panic("internal error") panic("internal error")
} }
@ -561,7 +561,7 @@ func deref(op Opcode, ctxt *context) error {
return err return err
} }
x, err := util.ReadUintRaw(bytes.NewReader(buf), binary.LittleEndian, sz) x, err := dwarf.ReadUintRaw(bytes.NewReader(buf), binary.LittleEndian, sz)
if err != nil { if err != nil {
return err return err
} }

View File

@ -1,4 +1,4 @@
package util package dwarf
import ( import (
"bytes" "bytes"
@ -6,54 +6,10 @@ import (
"encoding/binary" "encoding/binary"
"fmt" "fmt"
"io" "io"
"github.com/go-delve/delve/pkg/dwarf/leb128"
) )
// ByteReaderWithLen is a io.ByteReader with a Len method. This interface is // ReadString reads a null-terminated string from data.
// satisfied by both bytes.Buffer and bytes.Reader. func ReadString(data *bytes.Buffer) (string, error) {
//
// Deprecated: use leb128.Reader.
type ByteReaderWithLen interface {
io.ByteReader
io.Reader
Len() int
}
// DecodeULEB128 decodes an unsigned Little Endian Base 128
// represented number.
//
// Deprecated: use leb128.DecodeUnsigned.
func DecodeULEB128(buf ByteReaderWithLen) (uint64, uint32) {
return leb128.DecodeUnsigned(buf)
}
// DecodeSLEB128 decodes a signed Little Endian Base 128
// represented number.
//
// Deprecated: use leb128.DecodeUnsigned.
func DecodeSLEB128(buf ByteReaderWithLen) (int64, uint32) {
return leb128.DecodeSigned(buf)
}
// EncodeULEB128 encodes x to the unsigned Little Endian Base 128 format
// into out.
//
// Deprecated: use leb128.EncodeUnsigned.
func EncodeULEB128(out io.ByteWriter, x uint64) {
leb128.EncodeUnsigned(out, x)
}
// EncodeSLEB128 encodes x to the signed Little Endian Base 128 format
// into out.
//
// Deprecated: use leb128.EncodeSigned.
func EncodeSLEB128(out io.ByteWriter, x int64) {
leb128.EncodeSigned(out, x)
}
// ParseString reads a null-terminated string from data.
func ParseString(data *bytes.Buffer) (string, error) {
str, err := data.ReadString(0x0) str, err := data.ReadString(0x0)
if err != nil { if err != nil {
return "", err return "", err

View File

@ -1,13 +1,15 @@
package util package dwarf_test
import ( import (
"bytes" "bytes"
"testing" "testing"
"github.com/go-delve/delve/pkg/dwarf"
) )
func TestParseString(t *testing.T) { func TestReadString(t *testing.T) {
bstr := bytes.NewBuffer([]byte{'h', 'i', 0x0, 0xFF, 0xCC}) bstr := bytes.NewBuffer([]byte{'h', 'i', 0x0, 0xFF, 0xCC})
str, _ := ParseString(bstr) str, _ := dwarf.ReadString(bstr)
if str != "hi" { if str != "hi" {
t.Fatalf("String was not parsed correctly %#v", str) t.Fatalf("String was not parsed correctly %#v", str)

View File

@ -23,13 +23,13 @@ import (
"sync" "sync"
"time" "time"
pdwarf "github.com/go-delve/delve/pkg/dwarf"
"github.com/go-delve/delve/pkg/dwarf/frame" "github.com/go-delve/delve/pkg/dwarf/frame"
"github.com/go-delve/delve/pkg/dwarf/godwarf" "github.com/go-delve/delve/pkg/dwarf/godwarf"
"github.com/go-delve/delve/pkg/dwarf/line" "github.com/go-delve/delve/pkg/dwarf/line"
"github.com/go-delve/delve/pkg/dwarf/loclist" "github.com/go-delve/delve/pkg/dwarf/loclist"
"github.com/go-delve/delve/pkg/dwarf/op" "github.com/go-delve/delve/pkg/dwarf/op"
"github.com/go-delve/delve/pkg/dwarf/reader" "github.com/go-delve/delve/pkg/dwarf/reader"
"github.com/go-delve/delve/pkg/dwarf/util"
"github.com/go-delve/delve/pkg/goversion" "github.com/go-delve/delve/pkg/goversion"
"github.com/go-delve/delve/pkg/logflags" "github.com/go-delve/delve/pkg/logflags"
"github.com/go-delve/delve/pkg/proc/debuginfod" "github.com/go-delve/delve/pkg/proc/debuginfod"
@ -2029,7 +2029,7 @@ func (bi *BinaryInfo) loadDebugInfoMaps(image *Image, debugInfoBytes, debugLineB
image.runtimeTypeToDIE = make(map[uint64]runtimeTypeDIE) image.runtimeTypeToDIE = make(map[uint64]runtimeTypeDIE)
ctxt := newLoadDebugInfoMapsContext(bi, image, util.ReadUnitVersions(debugInfoBytes)) ctxt := newLoadDebugInfoMapsContext(bi, image, pdwarf.ReadUnitVersions(debugInfoBytes))
reader := image.DwarfReader() reader := image.DwarfReader()
@ -2217,7 +2217,7 @@ func (bi *BinaryInfo) loadDebugInfoMapsCompileUnit(ctxt *loadDebugInfoMapsContex
var addr uint64 var addr uint64
if loc, ok := entry.Val(dwarf.AttrLocation).([]byte); ok { if loc, ok := entry.Val(dwarf.AttrLocation).([]byte); ok {
if len(loc) == bi.Arch.PtrSize()+1 && op.Opcode(loc[0]) == op.DW_OP_addr { if len(loc) == bi.Arch.PtrSize()+1 && op.Opcode(loc[0]) == op.DW_OP_addr {
addr, _ = util.ReadUintRaw(bytes.NewReader(loc[1:]), binary.LittleEndian, bi.Arch.PtrSize()) addr, _ = pdwarf.ReadUintRaw(bytes.NewReader(loc[1:]), binary.LittleEndian, bi.Arch.PtrSize())
} }
} }
if !cu.isgo { if !cu.isgo {