-
Notifications
You must be signed in to change notification settings - Fork 18.4k
Closed
Milestone
Description
What version of Go are you using (go version
)?
$ go version go version go1.17 windows/amd64
Does this issue reproduce with the latest release?
yes
What operating system and processor architecture are you using (go env
)?
go env
Output
$ go env set GO111MODULE= set GOARCH=amd64 set GOBIN= set GOCACHE=C:\Users\Michael.Obermueller\AppData\Local\go-build set GOENV=C:\Users\Michael.Obermueller\AppData\Roaming\go\env set GOEXE=.exe set GOEXPERIMENT= set GOFLAGS= set GOHOSTARCH=amd64 set GOHOSTOS=windows set GOINSECURE= set GOMODCACHE=C:\Users\Michael.Obermueller\go\pkg\mod set GONOPROXY=... set GONOSUMDB=... set GOOS=windows set GOPATH=C:\Users\Michael.Obermueller\go set GOPRIVATE=... set GOPROXY=https://proxy.golang.org,direct set GOROOT=C:\workspaces\devtools\go\go-master set GOSUMDB=sum.golang.org set GOTMPDIR= set GOTOOLDIR=C:\workspaces\devtools\go\go-master\pkg\tool\windows_amd64 set GOVCS= set GOVERSION=go1.17 set GCCGO=gccgo set AR=ar set CC=gcc set CXX=g++ set CGO_ENABLED=1 set GOMOD=C:\workspaces\repos\go-world\src\GoWorld\go.mod set CGO_CFLAGS=-g -O2 set CGO_CPPFLAGS= set CGO_CXXFLAGS=-g -O2 set CGO_FFLAGS=-g -O2 set CGO_LDFLAGS=-g -O2 set PKG_CONFIG=pkg-config set GOGCCFLAGS=-m64 -mthreads -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=C:\Users\MICHAE~1.OBE\AppData\Local\Temp\go-build2406948064=/tmp/go-build -gno-record-gcc-switches GOROOT/bin/go version: go version go1.17 windows/amd64 GOROOT/bin/go tool compile -V: compile version go1.17
What did you do?
Build an application with the Go 1.17 toolchain using command go build -gcflags=all="-N -l" HelloWorld.go
:
package main
import "fmt"
func main() {
fmt.Println("hello world")
}
The DWARF information for Go functions defined in the runtime package does not contain DW_TAG_formal_parameter
entries for return values. I have checked multiple runtime functions, for all of them I see the same problem. As an example let's check runtime.mapaccess2
which has the following signature:
func mapaccess2(t *maptype, h *hmap, key unsafe.Pointer) (unsafe.Pointer, bool)
What did you expect to see?
DW_TAG_formal_parameter
entries for the two return values of runtime.mapaccess2
If I build the program with Go 1.16.8 toolchain the return value entries exist:
DWARF Go 1.16.8
<1><be36>: Abbrev Number: 3 (DW_TAG_subprogram)
<be37> DW_AT_name : runtime.mapaccess2
<be4a> DW_AT_low_pc : 0x40f9c0
<be52> DW_AT_high_pc : 0x40fd2a
<be5a> DW_AT_frame_base : 1 byte block: 9c (DW_OP_call_frame_cfa)
<be5c> DW_AT_decl_file : 0x26
<be60> DW_AT_external : 1
<2><be9a>: Abbrev Number: 16 (DW_TAG_formal_parameter)
<be9b> DW_AT_name : t
<be9d> DW_AT_variable_parameter: 0
<be9e> DW_AT_decl_line : 452
<bea0> DW_AT_type : <0x39b60>
<bea4> DW_AT_location : 0xa10c (location list)
<2><bea8>: Abbrev Number: 16 (DW_TAG_formal_parameter)
<bea9> DW_AT_name : h
<beab> DW_AT_variable_parameter: 0
<beac> DW_AT_decl_line : 452
<beae> DW_AT_type : <0x39b7f>
<beb2> DW_AT_location : 0xa13f (location list)
<2><beb6>: Abbrev Number: 16 (DW_TAG_formal_parameter)
<beb7> DW_AT_name : key
<bebb> DW_AT_variable_parameter: 0
<bebc> DW_AT_decl_line : 452
<bebe> DW_AT_type : <0x34320>
<bec2> DW_AT_location : 0xa173 (location list)
<2><bec6>: Abbrev Number: 15 (DW_TAG_formal_parameter)
<bec7> DW_AT_name : ~r3
<becb> DW_AT_variable_parameter: 1
<becc> DW_AT_decl_line : 452
<bece> DW_AT_type : <0x34320>
<bed2> DW_AT_location : 0 byte block: ()
<2><bed3>: Abbrev Number: 15 (DW_TAG_formal_parameter)
<bed4> DW_AT_name : ~r4
<bed8> DW_AT_variable_parameter: 1
<bed9> DW_AT_decl_line : 452
<bedb> DW_AT_type : <0x344ba>
<bedf> DW_AT_location : 0 byte block: ()
...
What did you see instead?
With Go 1.17 toolchain the return value entries are missing:
DWARF Go 1.17
<1><f8bc>: Abbrev Number: 3 (DW_TAG_subprogram)
<f8bd> DW_AT_name : runtime.mapaccess2
<f8d0> DW_AT_low_pc : 0x40dc60
<f8d8> DW_AT_high_pc : 0x40df30
<f8e0> DW_AT_frame_base : 1 byte block: 9c (DW_OP_call_frame_cfa)
<f8e2> DW_AT_decl_file : 0x27
<f8e6> DW_AT_external : 1
<2><f8e7>: Abbrev Number: 16 (DW_TAG_formal_parameter)
<f8e8> DW_AT_name : t
<f8ea> DW_AT_variable_parameter: 0
<f8eb> DW_AT_decl_line : 452
<f8ed> DW_AT_type : <0x45c77>
<f8f1> DW_AT_location : 0xf86c (location list)
<2><f8f5>: Abbrev Number: 16 (DW_TAG_formal_parameter)
<f8f6> DW_AT_name : h
<f8f8> DW_AT_variable_parameter: 0
<f8f9> DW_AT_decl_line : 452
<f8fb> DW_AT_type : <0x45c96>
<f8ff> DW_AT_location : 0xf8b2 (location list)
<2><f903>: Abbrev Number: 16 (DW_TAG_formal_parameter)
<f904> DW_AT_name : key
<f908> DW_AT_variable_parameter: 0
<f909> DW_AT_decl_line : 452
<f90b> DW_AT_type : <0x3ffa9>
<f90f> DW_AT_location : 0xf920 (location list)
...
PeterFeicht and Hollerberg