From 0aede73917c89d048211b3731fb19157acfe4431 Mon Sep 17 00:00:00 2001 From: Cherry Zhang Date: Wed, 7 Jun 2017 10:00:58 -0400 Subject: [PATCH] cmd/internal/obj/arm: don't split instructions on NaCl We insert guard instructions after each "dangerous" instruction to make NaCl's validator happy. This happens before asmout. If in asmout an instruction is split to two dangerous instructions, but only one guard instruction is inserted, the validation fails. Therefore don't split instructions on NaCl. Fixes #20595. Change-Id: Ie34f209bc7d907d6d16ecef6721f88420981ac01 Reviewed-on: https://go-review.googlesource.com/45021 Run-TryBot: Cherry Zhang TryBot-Result: Gobot Gobot Reviewed-by: Brad Fitzpatrick --- src/cmd/internal/obj/arm/asm5.go | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/cmd/internal/obj/arm/asm5.go b/src/cmd/internal/obj/arm/asm5.go index e17d312987..cee3709eec 100644 --- a/src/cmd/internal/obj/arm/asm5.go +++ b/src/cmd/internal/obj/arm/asm5.go @@ -1262,11 +1262,15 @@ func (c *ctxt5) aclass(a *obj.Addr) int { if uint32(c.instoffset) <= 0xffff && objabi.GOARM == 7 { return C_SCON } - if x, y := immrot2a(uint32(c.instoffset)); x != 0 && y != 0 { - return C_RCON2A - } - if y, x := immrot2s(uint32(c.instoffset)); x != 0 && y != 0 { - return C_RCON2S + if c.ctxt.Headtype != objabi.Hnacl { + // Don't split instructions on NaCl. The validator is not + // happy with it. See Issue 20595. + if x, y := immrot2a(uint32(c.instoffset)); x != 0 && y != 0 { + return C_RCON2A + } + if y, x := immrot2s(uint32(c.instoffset)); x != 0 && y != 0 { + return C_RCON2S + } } return C_LCON -- 2.50.0