From 4480c822ba37ea3795fa4dbb56d13578d7961d88 Mon Sep 17 00:00:00 2001 From: Than McIntosh Date: Tue, 13 Apr 2021 13:49:55 -0400 Subject: [PATCH] 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 Run-TryBot: Than McIntosh TryBot-Result: Go Bot Reviewed-by: Austin Clements Reviewed-by: Cherry Zhang --- src/cmd/internal/obj/plist.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) 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 -- 2.48.1