From 95b4498ac0c70a2c3c2a0c60d66aa74b10bca76d Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Wed, 11 Apr 2018 14:16:52 -0700 Subject: [PATCH] cmd/internal/obj/arm64: don't crash on trailing NOP MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Fixes #20348 Change-Id: I831aeeee8e20d55b3e47dea67786e883b213cd58 Reviewed-on: https://go-review.googlesource.com/106457 Run-TryBot: Ian Lance Taylor Reviewed-by: Brad Fitzpatrick Reviewed-by: Aram Hăvărneanu TryBot-Result: Gobot Gobot --- src/cmd/internal/obj/arm64/asm_test.go | 18 ++++++++++++++++++ src/cmd/internal/obj/arm64/obj7.go | 8 +++++--- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/cmd/internal/obj/arm64/asm_test.go b/src/cmd/internal/obj/arm64/asm_test.go index 3e0c9c13a6..68f5b0b346 100644 --- a/src/cmd/internal/obj/arm64/asm_test.go +++ b/src/cmd/internal/obj/arm64/asm_test.go @@ -61,3 +61,21 @@ func gen(buf *bytes.Buffer) { fmt.Fprintln(buf, "label:") fmt.Fprintln(buf, "RET") } + +// Issue 20348. +func TestNoRet(t *testing.T) { + dir, err := ioutil.TempDir("", "testnoret") + if err != nil { + t.Fatal(err) + } + defer os.RemoveAll(dir) + tmpfile := filepath.Join(dir, "x.s") + if err := ioutil.WriteFile(tmpfile, []byte("TEXT ·stub(SB),$0-0\nNOP\n"), 0644); err != nil { + t.Fatal(err) + } + cmd := exec.Command(testenv.GoToolPath(t), "tool", "asm", "-o", filepath.Join(dir, "x.o"), tmpfile) + cmd.Env = []string{"GOARCH=arm64", "GOOS=linux"} + if out, err := cmd.CombinedOutput(); err != nil { + t.Errorf("%v\n%s", err, out) + } +} diff --git a/src/cmd/internal/obj/arm64/obj7.go b/src/cmd/internal/obj/arm64/obj7.go index 1bd4a5d7b1..9c3d22050e 100644 --- a/src/cmd/internal/obj/arm64/obj7.go +++ b/src/cmd/internal/obj/arm64/obj7.go @@ -476,9 +476,11 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym, newprog obj.ProgAlloc) { break case obj.ANOP: - q1 = p.Link - q.Link = q1 /* q is non-nop */ - q1.Mark |= p.Mark + if p.Link != nil { + q1 = p.Link + q.Link = q1 /* q is non-nop */ + q1.Mark |= p.Mark + } continue case ABL, -- 2.48.1