mirror of
https://github.com/golang/go
synced 2024-11-21 22:44:40 -07:00
debug/dwarf: Fail on reading incorrect offset due to skipped compilation unit
This commit is contained in:
parent
44d4b69942
commit
e1ed146af8
@ -541,6 +541,8 @@ func (b *buf) entry(cu *Entry, atab abbrevTable, ubase Offset, vers int) *Entry
|
|||||||
} else if a.tag == TagCompileUnit {
|
} else if a.tag == TagCompileUnit {
|
||||||
delay = append(delay, delayed{i, off, formAddrx})
|
delay = append(delay, delayed{i, off, formAddrx})
|
||||||
break
|
break
|
||||||
|
} else {
|
||||||
|
b.error("Can't adjust offset: compilation unit skipped")
|
||||||
}
|
}
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
@ -692,6 +694,8 @@ func (b *buf) entry(cu *Entry, atab abbrevTable, ubase Offset, vers int) *Entry
|
|||||||
} else if a.tag == TagCompileUnit {
|
} else if a.tag == TagCompileUnit {
|
||||||
delay = append(delay, delayed{i, off, formStrx})
|
delay = append(delay, delayed{i, off, formStrx})
|
||||||
break
|
break
|
||||||
|
} else {
|
||||||
|
b.error("Can't adjust offset: compilation unit skipped")
|
||||||
}
|
}
|
||||||
|
|
||||||
val = resolveStrx(uint64(strBase), off)
|
val = resolveStrx(uint64(strBase), off)
|
||||||
@ -752,6 +756,8 @@ func (b *buf) entry(cu *Entry, atab abbrevTable, ubase Offset, vers int) *Entry
|
|||||||
} else if a.tag == TagCompileUnit {
|
} else if a.tag == TagCompileUnit {
|
||||||
delay = append(delay, delayed{i, off, formRnglistx})
|
delay = append(delay, delayed{i, off, formRnglistx})
|
||||||
break
|
break
|
||||||
|
} else {
|
||||||
|
b.error("Can't adjust offset: compilation unit skipped")
|
||||||
}
|
}
|
||||||
|
|
||||||
val = resolveRnglistx(uint64(rnglistsBase), off)
|
val = resolveRnglistx(uint64(rnglistsBase), off)
|
||||||
@ -856,6 +862,15 @@ func (r *Reader) Seek(off Offset) {
|
|||||||
r.b = makeBuf(r.d, u, "info", off, u.data[off-u.off:])
|
r.b = makeBuf(r.d, u, "info", off, u.data[off-u.off:])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SeekAndSetCU positions the [Reader] at offset off in the encoded entry stream, and additionally sets the current
|
||||||
|
// CU for the reader.
|
||||||
|
func (r *Reader) SeekAndSetCU(off Offset) {
|
||||||
|
cuIdx := r.d.offsetToUnit(off)
|
||||||
|
r.Seek(r.d.unit[cuIdx].off)
|
||||||
|
r.Next()
|
||||||
|
r.Seek(off)
|
||||||
|
}
|
||||||
|
|
||||||
// maybeNextUnit advances to the next unit if this one is finished.
|
// maybeNextUnit advances to the next unit if this one is finished.
|
||||||
func (r *Reader) maybeNextUnit() {
|
func (r *Reader) maybeNextUnit() {
|
||||||
for len(r.b.data) == 0 && r.unit+1 < len(r.d.unit) {
|
for len(r.b.data) == 0 && r.unit+1 < len(r.d.unit) {
|
||||||
|
Loading…
Reference in New Issue
Block a user