From patchwork Fri Nov 30 21:52:21 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 152601 Delivered-To: patch@linaro.org Received: by 2002:a2e:299d:0:0:0:0:0 with SMTP id p29-v6csp4173184ljp; Fri, 30 Nov 2018 14:01:09 -0800 (PST) X-Google-Smtp-Source: AFSGD/VNnXcgrcizAyRCbWQjCaG4WtmAHq4QN5U6i5Qoo79Ao3MIsYwJfzGmNEVWn3yH/8PAk2c9 X-Received: by 2002:a25:c5c2:: with SMTP id v185-v6mr7147459ybe.110.1543615269005; Fri, 30 Nov 2018 14:01:09 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1543615269; cv=none; d=google.com; s=arc-20160816; b=okBgx3+W2ec5VcLfVfEVEwgCx8hmg40OCVOIMg2APhsZBAKv9E5bMneoRdqOf6dUU+ B7KkENq9YZh654Ugc4q341tt87o10oZSt909e3iQwCUVXL0I0YKKsjQvLEkHPjr56b3u Ya+hNvqe1+8j6SdKb26QtHpfsxd1fjwOk6B+RHJT15XjqxA9bI71jXL4MnSlqWpJ65Th nBMu2ksEjCYxLUG7AAgx3W1LHujwR2hSn9/xFwSjveEjpm4Ybe8z09ttzhrYdUYce3ES CT7nlU7SFbStfrViJahnzU9sAplgKYGfYv74UebZ4frohTkJYVGEKjUoxpNc/wGkj70X M7gA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject:references:in-reply-to :message-id:date:to:from:dkim-signature; bh=bdn6ft2Vb9uaum1Y6rFdWVXmAAedWixPu3DebQxWV5c=; b=naKN7O8fpW4jioHx6Ru1E7VaKNHnuiWbwHQ8JQC/76tSAuSWx0gIFMNgf5scL+bL+4 oErY1gpU3eS2IUnljgH7Kvlj38sRfvbp60g7NmtCXoyD/E1UxP2HoqQd1Im9QJWw9vfU wZOanYy4XXKA1Cz3M2FM4rv1hlTVcVWMi2tIZMPka1V7ZI9mwrCe32Cxx/QxYlW6gyVc PBsHijXFTE2rjHZ/GrIvyUs54WU5cvTriseo/urJGvzXUXzH4hHgxgUBdc4bM+KLqS6l TA18DW2kijBPAT5s2F73RGmW6QhZ6kBK09868nidLWJfEEVBqdJIMsyClmCaiGf4o7Uv M32Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=RN0E9CxH; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id x13-v6si3621903ybq.294.2018.11.30.14.01.08 for (version=TLS1 cipher=AES128-SHA bits=128/128); Fri, 30 Nov 2018 14:01:08 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=RN0E9CxH; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:34783 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gSqqS-00012K-EI for patch@linaro.org; Fri, 30 Nov 2018 17:01:08 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:52703) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gSqiL-0008Ba-US for qemu-devel@nongnu.org; Fri, 30 Nov 2018 16:52:46 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gSqiK-0007ib-Kb for qemu-devel@nongnu.org; Fri, 30 Nov 2018 16:52:45 -0500 Received: from mail-pf1-x442.google.com ([2607:f8b0:4864:20::442]:34160) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1gSqiK-0007eq-Ex for qemu-devel@nongnu.org; Fri, 30 Nov 2018 16:52:44 -0500 Received: by mail-pf1-x442.google.com with SMTP id h3so3443759pfg.1 for ; Fri, 30 Nov 2018 13:52:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=bdn6ft2Vb9uaum1Y6rFdWVXmAAedWixPu3DebQxWV5c=; b=RN0E9CxHim+2Gvl+OSSRIz426QSNxo/wTFIwBcIw7JJAbkb90m1s2tlUNOW2Dvn/Bi tWKniyA/rZS7FND6W17scFYmrwcIL6QAiApwdrf1SqG23nSGjqW4t3JEICB3bkexf1BW foVHcqgdMvO98/FE71hgZPBC0xglQz78vWecE= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=bdn6ft2Vb9uaum1Y6rFdWVXmAAedWixPu3DebQxWV5c=; b=DzFDmQQGFJu+A18z8cRQss77MxUgzXeiXrgiaRCQ3wqXsnMr3IK/3VnFUdJP5Wr0Y2 VhwzL4jd5x+VfPxhqmSJe+EsFZ49gxxnXNczWpEMD0+ZDQP03A/8PzG9RtS0oIJrKVE7 uoS1ecsOj/2A+N3l+x/QPPjvVl0MlG/oze5GVOaFjEPo5VMQyBUdmBCbxpJq3cvsFtjb TnnbCUc+NXG6i3T9DaKFGrL1lnkg8P5HHvWCrEmqjaRMSN05i5uJrqCjIyP+kiPX4oQZ VxYuYSuViMHbC9IQmznrJCVr1oDhC2n3ey9TG+SexjS8Vb9m6NLygoc9hDKz2vsonhzb sUyg== X-Gm-Message-State: AA+aEWYdyDS+6ePVdY3scinsJdyaRKrBUFwbvZA0AXvqQZ3OBdPwa9hL +Zr9wqn+xmoRM2eq9wS+HKShGv/P1FQ= X-Received: by 2002:a62:7796:: with SMTP id s144mr7199375pfc.26.1543614763258; Fri, 30 Nov 2018 13:52:43 -0800 (PST) Received: from cloudburst.twiddle.net (97-113-170-180.tukw.qwest.net. [97.113.170.180]) by smtp.gmail.com with ESMTPSA id a18sm6973967pgj.30.2018.11.30.13.52.42 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 30 Nov 2018 13:52:42 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Date: Fri, 30 Nov 2018 13:52:21 -0800 Message-Id: <20181130215221.20554-17-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.2 In-Reply-To: <20181130215221.20554-1-richard.henderson@linaro.org> References: <20181130215221.20554-1-richard.henderson@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::442 Subject: [Qemu-devel] [PATCH v3 16/16] tcg/s390x: Return false on failure from patch_reloc X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alex.bennee@linaro.org Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" This does require an extra two checks within the slow paths to replace the assert that we're moving. Also add two checks within existing functions that lacked any kind of assert for out of range branch. Signed-off-by: Richard Henderson --- tcg/s390/tcg-target.inc.c | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) -- 2.17.2 Reviewed-by: Alex Bennée diff --git a/tcg/s390/tcg-target.inc.c b/tcg/s390/tcg-target.inc.c index 68a4c60394..39ecf609a1 100644 --- a/tcg/s390/tcg-target.inc.c +++ b/tcg/s390/tcg-target.inc.c @@ -377,23 +377,29 @@ static bool patch_reloc(tcg_insn_unit *code_ptr, int type, switch (type) { case R_390_PC16DBL: - assert(pcrel2 == (int16_t)pcrel2); - tcg_patch16(code_ptr, pcrel2); + if (pcrel2 == (int16_t)pcrel2) { + tcg_patch16(code_ptr, pcrel2); + return true; + } break; case R_390_PC32DBL: - assert(pcrel2 == (int32_t)pcrel2); - tcg_patch32(code_ptr, pcrel2); + if (pcrel2 == (int32_t)pcrel2) { + tcg_patch32(code_ptr, pcrel2); + return true; + } break; case R_390_20: - assert(value == sextract64(value, 0, 20)); - old = *(uint32_t *)code_ptr & 0xf00000ff; - old |= ((value & 0xfff) << 16) | ((value & 0xff000) >> 4); - tcg_patch32(code_ptr, old); + if (value == sextract64(value, 0, 20)) { + old = *(uint32_t *)code_ptr & 0xf00000ff; + old |= ((value & 0xfff) << 16) | ((value & 0xff000) >> 4); + tcg_patch32(code_ptr, old); + return true; + } break; default: g_assert_not_reached(); } - return true; + return false; } /* parse target specific constraints */ @@ -1334,6 +1340,7 @@ static void tgen_compare_branch(TCGContext *s, S390Opcode opc, int cc, if (l->has_value) { off = l->u.value_ptr - s->code_ptr; + tcg_debug_assert(off == (int16_t)off); } else { tcg_out_reloc(s, s->code_ptr + 1, R_390_PC16DBL, l, 2); } @@ -1350,6 +1357,7 @@ static void tgen_compare_imm_branch(TCGContext *s, S390Opcode opc, int cc, if (l->has_value) { off = l->u.value_ptr - s->code_ptr; + tcg_debug_assert(off == (int16_t)off); } else { tcg_out_reloc(s, s->code_ptr + 1, R_390_PC16DBL, l, 2); } @@ -1615,7 +1623,9 @@ static void tcg_out_qemu_ld_slow_path(TCGContext *s, TCGLabelQemuLdst *lb) TCGMemOpIdx oi = lb->oi; TCGMemOp opc = get_memop(oi); - patch_reloc(lb->label_ptr[0], R_390_PC16DBL, (intptr_t)s->code_ptr, 2); + bool ok = patch_reloc(lb->label_ptr[0], R_390_PC16DBL, + (intptr_t)s->code_ptr, 2); + tcg_debug_assert(ok); tcg_out_mov(s, TCG_TYPE_PTR, TCG_REG_R2, TCG_AREG0); if (TARGET_LONG_BITS == 64) { @@ -1636,7 +1646,9 @@ static void tcg_out_qemu_st_slow_path(TCGContext *s, TCGLabelQemuLdst *lb) TCGMemOpIdx oi = lb->oi; TCGMemOp opc = get_memop(oi); - patch_reloc(lb->label_ptr[0], R_390_PC16DBL, (intptr_t)s->code_ptr, 2); + bool ok = patch_reloc(lb->label_ptr[0], R_390_PC16DBL, + (intptr_t)s->code_ptr, 2); + tcg_debug_assert(ok); tcg_out_mov(s, TCG_TYPE_PTR, TCG_REG_R2, TCG_AREG0); if (TARGET_LONG_BITS == 64) {