aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/internal
diff options
context:
space:
mode:
authorKeith Randall <khr@golang.org>2022-12-05 11:19:51 -0800
committerGopher Robot <gobot@golang.org>2022-12-05 23:21:07 +0000
commit9dde2de454b78e681dd7318dbf3ef68d6a3df2d1 (patch)
treef53cf14f5a8d76a04c1f385a99212645b96e6ba2 /src/cmd/internal
parent0b323a3c1690050340fc8e39730a07bb01373f0a (diff)
downloadgo-9dde2de454b78e681dd7318dbf3ef68d6a3df2d1.tar.xz
cmd/asm: improve assembler error messages
Provide file/line numbers for errors when we have them. Make the assembler error text closer to the equivalent errors from the compiler. Abort further processing when we come across errors. Fixes #53994 Change-Id: I4d6a037d6d713c1329923fce4c1189b5609f3660 Reviewed-on: https://go-review.googlesource.com/c/go/+/455276 Reviewed-by: Keith Randall <khr@google.com> Run-TryBot: Keith Randall <khr@google.com> Auto-Submit: Keith Randall <khr@google.com> Reviewed-by: Cherry Mui <cherryyz@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
Diffstat (limited to 'src/cmd/internal')
-rw-r--r--src/cmd/internal/obj/plist.go16
1 files changed, 11 insertions, 5 deletions
diff --git a/src/cmd/internal/obj/plist.go b/src/cmd/internal/obj/plist.go
index 751d231100..fe9d2e1fb7 100644
--- a/src/cmd/internal/obj/plist.go
+++ b/src/cmd/internal/obj/plist.go
@@ -58,12 +58,12 @@ func Flushplist(ctxt *Link, plist *Plist, newprog ProgAlloc, myimportpath string
switch p.To.Sym.Name {
case "go_args_stackmap":
if p.From.Type != TYPE_CONST || p.From.Offset != objabi.FUNCDATA_ArgsPointerMaps {
- ctxt.Diag("FUNCDATA use of go_args_stackmap(SB) without FUNCDATA_ArgsPointerMaps")
+ ctxt.Diag("%s: FUNCDATA use of go_args_stackmap(SB) without FUNCDATA_ArgsPointerMaps", p.Pos)
}
p.To.Sym = ctxt.LookupDerived(curtext, curtext.Name+".args_stackmap")
case "no_pointers_stackmap":
if p.From.Type != TYPE_CONST || p.From.Offset != objabi.FUNCDATA_LocalsPointerMaps {
- ctxt.Diag("FUNCDATA use of no_pointers_stackmap(SB) without FUNCDATA_LocalsPointerMaps")
+ ctxt.Diag("%s: FUNCDATA use of no_pointers_stackmap(SB) without FUNCDATA_LocalsPointerMaps", p.Pos)
}
// funcdata for functions with no local variables in frame.
// Define two zero-length bitmaps, because the same index is used
@@ -166,11 +166,13 @@ func (ctxt *Link) InitTextSym(s *LSym, flag int, start src.XPos) {
return
}
if s.Func() != nil {
- ctxt.Diag("InitTextSym double init for %s", s.Name)
+ ctxt.Diag("%s: symbol %s redeclared\n\t%s: other declaration of symbol %s", ctxt.PosTable.Pos(start), s.Name, ctxt.PosTable.Pos(s.Func().Text.Pos), s.Name)
+ return
}
s.NewFuncInfo()
if s.OnList() {
- ctxt.Diag("symbol %s listed multiple times", s.Name)
+ ctxt.Diag("%s: symbol %s redeclared", ctxt.PosTable.Pos(start), s.Name)
+ return
}
// startLine should be the same line number that would be displayed via
@@ -210,8 +212,12 @@ func (ctxt *Link) toFuncFlag(flag int) objabi.FuncFlag {
}
func (ctxt *Link) Globl(s *LSym, size int64, flag int) {
+ ctxt.GloblPos(s, size, flag, src.NoXPos)
+}
+func (ctxt *Link) GloblPos(s *LSym, size int64, flag int, pos src.XPos) {
if s.OnList() {
- ctxt.Diag("symbol %s listed multiple times", s.Name)
+ // TODO: print where the first declaration was.
+ ctxt.Diag("%s: symbol %s redeclared", ctxt.PosTable.Pos(pos), s.Name)
}
s.Set(AttrOnList, true)
ctxt.Data = append(ctxt.Data, s)