From 69ea62fe95a14a04d6b2ba145aaf78e36f42e2eb Mon Sep 17 00:00:00 2001 From: Cherry Mui Date: Fri, 21 Mar 2025 08:46:14 -0700 Subject: [PATCH] Revert "cmd/compile/internal/abi: fix ComputePadding" This reverts CL 656736. Reason for revert: breaks many builders (all flavors of linux-amd64 builders). Change-Id: Ie7190d4078fada227391804c5cf10b9ce9cc9115 Reviewed-on: https://go-review.googlesource.com/c/go/+/659955 LUCI-TryBot-Result: Go LUCI Reviewed-by: Keith Randall --- src/cmd/compile/internal/abi/abiutils.go | 3 +- src/cmd/compile/internal/ssa/debug.go | 2 +- .../compile/internal/test/abiutils_test.go | 4 +- src/cmd/link/internal/ld/dwarf_test.go | 113 ------------------ 4 files changed, 5 insertions(+), 117 deletions(-) diff --git a/src/cmd/compile/internal/abi/abiutils.go b/src/cmd/compile/internal/abi/abiutils.go index c013aba19c..e88a80d564 100644 --- a/src/cmd/compile/internal/abi/abiutils.go +++ b/src/cmd/compile/internal/abi/abiutils.go @@ -673,9 +673,10 @@ func (pa *ABIParamAssignment) ComputePadding(storage []uint64) []uint64 { panic("internal error") } offsets, _ := appendParamOffsets([]int64{}, 0, pa.Type) + off := int64(0) for idx, t := range types { ts := t.Size() - off := offsets[idx] + ts + off += int64(ts) if idx < len(types)-1 { noff := offsets[idx+1] if noff != off { diff --git a/src/cmd/compile/internal/ssa/debug.go b/src/cmd/compile/internal/ssa/debug.go index 6faef7c255..59d0294264 100644 --- a/src/cmd/compile/internal/ssa/debug.go +++ b/src/cmd/compile/internal/ssa/debug.go @@ -557,7 +557,7 @@ func PopulateABIInRegArgOps(f *Func) { f.Entry.Values = append(newValues, f.Entry.Values...) } -// BuildFuncDebug builds debug information for f, placing the results +// BuildFuncDebug debug information for f, placing the results // in "rval". f must be fully processed, so that each Value is where it // will be when machine code is emitted. func BuildFuncDebug(ctxt *obj.Link, f *Func, loggingLevel int, stackOffset func(LocalSlot) int32, rval *FuncDebug) { diff --git a/src/cmd/compile/internal/test/abiutils_test.go b/src/cmd/compile/internal/test/abiutils_test.go index da807f5a0a..b500de9f18 100644 --- a/src/cmd/compile/internal/test/abiutils_test.go +++ b/src/cmd/compile/internal/test/abiutils_test.go @@ -390,9 +390,9 @@ func TestABIUtilsComputePadding(t *testing.T) { padding := make([]uint64, 32) parm := regRes.InParams()[1] padding = parm.ComputePadding(padding) - want := "[1 0 0 0]" + want := "[1 1 1 0]" got := fmt.Sprintf("%+v", padding) if got != want { - t.Errorf("padding mismatch: wanted %q got %q\n", want, got) + t.Errorf("padding mismatch: wanted %q got %q\n", got, want) } } diff --git a/src/cmd/link/internal/ld/dwarf_test.go b/src/cmd/link/internal/ld/dwarf_test.go index 99bf1a1778..28b5ddf74c 100644 --- a/src/cmd/link/internal/ld/dwarf_test.go +++ b/src/cmd/link/internal/ld/dwarf_test.go @@ -5,9 +5,7 @@ package ld import ( - "bytes" "debug/dwarf" - "debug/elf" "debug/pe" "fmt" "internal/platform" @@ -2044,114 +2042,3 @@ func TestConsistentGoKindAndRuntimeType(t *testing.T) { t.Logf("%d types checked\n", typesChecked) } } - -func TestIssue72053(t *testing.T) { - if runtime.GOOS != "linux" || runtime.GOARCH != "amd64" { - t.Skip("skipping test: requires ELF binary and amd64 arch") - } - - testenv.MustHaveGoBuild(t) - - mustHaveDWARF(t) - - t.Parallel() - - dir := t.TempDir() - - const prog = `package main - -import ( - "fmt" - "strings" -) - -func main() { - u := Address{Addr: "127.0.0.1"} - fmt.Println(u) // line 10 -} - -type Address struct { - TLS bool - Addr string -} - -func (a Address) String() string { - sb := new(strings.Builder) - sb.WriteString(a.Addr) - return sb.String() -} -` - - bf := gobuild(t, dir, prog, NoOpt) - - defer bf.Close() - - f, err := elf.Open(bf.path) - if err != nil { - t.Fatal(err) - } - - dwrf, err := f.DWARF() - if err != nil { - t.Fatal(err) - } - - rdr := dwrf.Reader() - - found := false - for { - e, err := rdr.Next() - if err != nil { - t.Fatal(err) - } - if e == nil { - break - } - - name, _ := e.Val(dwarf.AttrName).(string) - - if e.Tag == dwarf.TagSubprogram && name == "main.Address.String" { - found = true - continue - } - - if found && name == "a" { - loc := e.AttrField(dwarf.AttrLocation) - if loc != nil { - switch loc.Class { - case dwarf.ClassLocListPtr: - offset := loc.Val.(int64) - buf := make([]byte, 32) - s := f.Section(".debug_loc") - if s == nil { - t.Fatal("could not find debug_loc section") - } - d := s.Open() - // Seek past the first 16 bytes which establishes the base address and - // can be brittle and unreliable in the test due to compiler changes or DWARF - // version used. - d.Seek(offset+16, io.SeekStart) - d.Read(buf) - - // DW_OP_reg0 DW_OP_piece 0x1 DW_OP_piece 0x7 DW_OP_reg3 DW_OP_piece 0x8 DW_OP_reg2 DW_OP_piece 0x8 - expected := []byte{ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0x00, 0x50, 0x93, 0x01, 0x93, 0x07, 0x53, - 0x93, 0x08, 0x52, 0x93, 0x08, 0x1f, 0x00, 0x00, - } - - if !bytes.Equal(buf, expected) { - t.Fatalf("unexpected DWARF sequence found, expected:\n%#v\nfound:\n%#v\n", expected, buf) - } - } - } else { - t.Fatal("unable to find expected DWARF location list") - } - break - } - } - if !found { - t.Fatal("unable to find expected DWARF location list") - } -} -- 2.50.0