This patch to libgo fixes the DWARF line lookup when one function has different types of lines. This happens when the line info includes, e.g., discriminators. Bootstrapped and ran Go testsuite on x86_64-unknown-linux-gnu and power64-unknown-linux-gnu. Committed to mainline and 4.7 branch.
Ian
diff -r 28ec41c37bcf libgo/go/debug/dwarf/line.go --- a/libgo/go/debug/dwarf/line.go Fri Apr 20 11:38:11 2012 -0700 +++ b/libgo/go/debug/dwarf/line.go Fri Apr 20 11:40:46 2012 -0700 @@ -415,6 +415,10 @@ if newLineInfo { if len(lines) > 0 { sort.Sort(lines[len(lines)-1].addrs) + p := &lines[len(lines)-1] + if len(p.addrs) > 0 && address > p.addrs[len(p.addrs)-1].pc { + p.addrs = append(p.addrs, oneLineInfo{address, p.addrs[len(p.addrs)-1].line}) + } } lines = append(lines, mapLineInfo{line: lineInfo}) }