go-delve/delve · error
LocationCovers does not support DWARFv5
Error message
LocationCovers does not support DWARFv5
What it means
LocationCovers only implements DWARF v2-v4 location list parsing (via loclist2). When the owning compile unit is DWARF version 5 and the image has a loclist5 section, Delve refuses to run the legacy parser and returns this error instead of producing wrong ranges. It is an explicit capability limitation, not corruption.
Source
Thrown at pkg/proc/bininfo.go:1379
func (bi *BinaryInfo) LocationCovers(entry *dwarf.Entry, attr dwarf.Attr) ([][2]uint64, error) {
a := entry.Val(attr)
if a == nil {
return nil, fmt.Errorf("attribute %s not found", attr)
}
if _, isblock := a.([]byte); isblock {
return [][2]uint64{{0, ^uint64(0)}}, nil
}
off, ok := a.(int64)
if !ok {
return nil, fmt.Errorf("attribute %s of unsupported type %T", attr, a)
}
cu := bi.Images[0].findCompileUnitForOffset(entry.Offset)
if cu == nil {
return nil, errors.New("could not find compile unit")
}
if cu.Version >= 5 && cu.image.loclist5 != nil {
return nil, errors.New("LocationCovers does not support DWARFv5")
}
image := cu.image
base := cu.lowPC
if image == nil || image.loclist2.Empty() {
return nil, errors.New("malformed executable")
}
r := [][2]uint64{}
var e loclist.Entry
image.loclist2.Seek(int(off))
for image.loclist2.Next(&e) {
if e.BaseAddressSelection() {
base = e.HighPC
continue
}
r = append(r, [2]uint64{e.LowPC + base, e.HighPC + base})
}View on GitHub (pinned to a23773e6c3)
Solutions
- Rebuild the target with an older DWARF version (e.g. gcc -gdwarf-4, or older Go toolchain)
- Use Delve APIs that support DWARFv5 (regular variable evaluation) instead of LocationCovers
- Upgrade Delve to a version with DWARFv5 loclist support if available
- Downgrade the compiler's debug flags: -gdwarf-4 / GO's -gcflags=dwarf=false alternatives
Example fix
// before gcc -gdwarf-5 -c app.c // LocationCovers fails // after gcc -gdwarf-4 -c app.c // legacy loclists, LocationCovers works
Defensive patterns
Strategy: fallback
Validate before calling
// detect DWARF version of the relevant CU before calling LocationCovers
if cu.Version >= 5 {
// skip LocationCovers, use DWARFv5-aware range computation
} Try / catch
ranges, err := LocationCovers(...)
if err != nil && strings.Contains(err.Error(), "DWARFv5") {
// fallback: rebuild target with -gdwarf-4 or use another API
} Prevention
- Build targets with -gdwarf-4 when legacy loclist tooling is required
- Check CU version (cu.Version) before invoking legacy loclist APIs
- Prefer Delve APIs that support DWARFv5 for modern toolchains
When it happens
Trigger: Calling LocationCovers for a symbol whose compile unit was emitted as DWARF v5 (Go 1.11+ defaults / GNU -gdwarf-5) with .debug_loclists present.
Common situations: Debugging binaries built with recent GCC/Clang -gdwarf-5 or newer Go toolchains; tooling built on pkg/proc that calls LocationCovers on modern binaries.
Related errors
AI-assisted analysis of go-delve/delve@a23773e6c3 (2026-08-31).
Data as JSON: /api/errors/e6ac9e5bff45fca2.
Report an issue: GitHub.