aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThan McIntosh <thanm@google.com>2021-04-13 13:49:55 -0400
committerThan McIntosh <thanm@google.com>2021-04-14 16:59:24 +0000
commit4480c822ba37ea3795fa4dbb56d13578d7961d88 (patch)
treef265036f912bd77299979597b326842724e5b86e /src
parent25b25a9ed7fe8a543fd6c1f79c6a43d33f8eae68 (diff)
downloadgo-4480c822ba37ea3795fa4dbb56d13578d7961d88.tar.xz
cmd/internal/obj: don't emit args_stackmap for ABIInternal asm funcs
The compiler currently emits an "*.args_stackmap" symbol for all bodyless functions, so that asm functions will have the proper stack map. At the moment the code in the compiler that emits args_stackmap assumes ABI0; to avoid misleading stackmaps, turn off args_stackmap generation for non-ABI0 asm functions. Updates #40724. Change-Id: Ia5e3528d56da5fb107e799bd658e52496ba4a331 Reviewed-on: https://go-review.googlesource.com/c/go/+/309790 Trust: Than McIntosh <thanm@google.com> Run-TryBot: Than McIntosh <thanm@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Austin Clements <austin@google.com> Reviewed-by: Cherry Zhang <cherryyz@google.com>
Diffstat (limited to 'src')
-rw-r--r--src/cmd/internal/obj/plist.go8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/cmd/internal/obj/plist.go b/src/cmd/internal/obj/plist.go
index 9dbad20589..54b035bb96 100644
--- a/src/cmd/internal/obj/plist.go
+++ b/src/cmd/internal/obj/plist.go
@@ -85,6 +85,13 @@ func Flushplist(ctxt *Link, plist *Plist, newprog ProgAlloc, myimportpath string
// wrapper function
continue
}
+ // The current args_stackmap generation in the compiler assumes
+ // that the function in question is ABI0, so avoid introducing
+ // an args_stackmap reference if the func is not ABI0 (better to
+ // have no stackmap than an incorrect/lying stackmap).
+ if s.ABI() != ABI0 {
+ continue
+ }
found := false
for p := s.Func().Text; p != nil; p = p.Link {
if p.As == AFUNCDATA && p.From.Type == TYPE_CONST && p.From.Offset == objabi.FUNCDATA_ArgsPointerMaps {
@@ -92,7 +99,6 @@ func Flushplist(ctxt *Link, plist *Plist, newprog ProgAlloc, myimportpath string
break
}
}
-
if !found {
p := Appendp(s.Func().Text, newprog)
p.As = AFUNCDATA