aboutsummaryrefslogtreecommitdiff
path: root/src/cmd
diff options
context:
space:
mode:
authorCherry Mui <cherryyz@google.com>2025-03-21 08:46:14 -0700
committerCherry Mui <cherryyz@google.com>2025-03-21 09:29:02 -0700
commit69ea62fe95a14a04d6b2ba145aaf78e36f42e2eb (patch)
tree5f69cda72bd66af90d098014179e7f16b3f8d930 /src/cmd
parentc386ed107e65f495acb6aacb0efcaade27da6a15 (diff)
downloadgo-69ea62fe95a14a04d6b2ba145aaf78e36f42e2eb.tar.xz
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 <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Keith Randall <khr@google.com>
Diffstat (limited to 'src/cmd')
-rw-r--r--src/cmd/compile/internal/abi/abiutils.go3
-rw-r--r--src/cmd/compile/internal/ssa/debug.go2
-rw-r--r--src/cmd/compile/internal/test/abiutils_test.go4
-rw-r--r--src/cmd/link/internal/ld/dwarf_test.go113
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")
- }
-}