aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/cmd/link/internal/ld/dwarf.go12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/cmd/link/internal/ld/dwarf.go b/src/cmd/link/internal/ld/dwarf.go
index c90609feef..e06d1493e0 100644
--- a/src/cmd/link/internal/ld/dwarf.go
+++ b/src/cmd/link/internal/ld/dwarf.go
@@ -1249,9 +1249,15 @@ func writelines(ctxt *Link, lib *sym.Library, textp []*sym.Symbol, ls *sym.Symbo
pciterinit(ctxt, &pcline, &s.FuncInfo.Pcline)
pciterinit(ctxt, &pcstmt, &pctostmtData)
+ if pcstmt.done != 0 {
+ // Assembly files lack a pcstmt section, we assume that every instruction
+ // is a valid statement.
+ pcstmt.value = 1
+ }
+
var thispc uint32
// TODO this loop looks like it could exit with work remaining.
- for pcfile.done == 0 && pcline.done == 0 && pcstmt.done == 0 {
+ for pcfile.done == 0 && pcline.done == 0 {
// Only changed if it advanced
if int32(file) != pcfile.value {
ls.AddUint8(dwarf.DW_LNS_set_file)
@@ -1280,14 +1286,14 @@ func writelines(ctxt *Link, lib *sym.Library, textp []*sym.Symbol, ls *sym.Symbo
if pcline.nextpc < thispc {
thispc = pcline.nextpc
}
- if pcstmt.nextpc < thispc {
+ if pcstmt.done == 0 && pcstmt.nextpc < thispc {
thispc = pcstmt.nextpc
}
if pcfile.nextpc == thispc {
pciternext(&pcfile)
}
- if pcstmt.nextpc == thispc {
+ if pcstmt.done == 0 && pcstmt.nextpc == thispc {
pciternext(&pcstmt)
}
if pcline.nextpc == thispc {