From nobody Tue Feb 10 19:09:50 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1543615218615549.2345990043517; Fri, 30 Nov 2018 14:00:18 -0800 (PST) Received: from localhost ([::1]:34768 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gSqpd-0008Gn-Dp for importer@patchew.org; Fri, 30 Nov 2018 17:00:17 -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) 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) 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-Google-Smtp-Source: AFSGD/VGpJnvlcwrQTBhRGvtWbtJPp2jlKvuGqlOW3olGlPBNpFabs24B2E1HgpMXbIirHO+IYeHbA== X-Received: by 2002:a62:7796:: with SMTP id s144mr7199375pfc.26.1543614763258; Fri, 30 Nov 2018 13:52:43 -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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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 Reviewed-by: Alex Benn=C3=A9e --- tcg/s390/tcg-target.inc.c | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) 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, =20 switch (type) { case R_390_PC16DBL: - assert(pcrel2 =3D=3D (int16_t)pcrel2); - tcg_patch16(code_ptr, pcrel2); + if (pcrel2 =3D=3D (int16_t)pcrel2) { + tcg_patch16(code_ptr, pcrel2); + return true; + } break; case R_390_PC32DBL: - assert(pcrel2 =3D=3D (int32_t)pcrel2); - tcg_patch32(code_ptr, pcrel2); + if (pcrel2 =3D=3D (int32_t)pcrel2) { + tcg_patch32(code_ptr, pcrel2); + return true; + } break; case R_390_20: - assert(value =3D=3D sextract64(value, 0, 20)); - old =3D *(uint32_t *)code_ptr & 0xf00000ff; - old |=3D ((value & 0xfff) << 16) | ((value & 0xff000) >> 4); - tcg_patch32(code_ptr, old); + if (value =3D=3D sextract64(value, 0, 20)) { + old =3D *(uint32_t *)code_ptr & 0xf00000ff; + old |=3D ((value & 0xfff) << 16) | ((value & 0xff000) >> 4); + tcg_patch32(code_ptr, old); + return true; + } break; default: g_assert_not_reached(); } - return true; + return false; } =20 /* parse target specific constraints */ @@ -1334,6 +1340,7 @@ static void tgen_compare_branch(TCGContext *s, S390Op= code opc, int cc, =20 if (l->has_value) { off =3D l->u.value_ptr - s->code_ptr; + tcg_debug_assert(off =3D=3D (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, S3= 90Opcode opc, int cc, =20 if (l->has_value) { off =3D l->u.value_ptr - s->code_ptr; + tcg_debug_assert(off =3D=3D (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 =3D lb->oi; TCGMemOp opc =3D get_memop(oi); =20 - patch_reloc(lb->label_ptr[0], R_390_PC16DBL, (intptr_t)s->code_ptr, 2); + bool ok =3D patch_reloc(lb->label_ptr[0], R_390_PC16DBL, + (intptr_t)s->code_ptr, 2); + tcg_debug_assert(ok); =20 tcg_out_mov(s, TCG_TYPE_PTR, TCG_REG_R2, TCG_AREG0); if (TARGET_LONG_BITS =3D=3D 64) { @@ -1636,7 +1646,9 @@ static void tcg_out_qemu_st_slow_path(TCGContext *s, = TCGLabelQemuLdst *lb) TCGMemOpIdx oi =3D lb->oi; TCGMemOp opc =3D get_memop(oi); =20 - patch_reloc(lb->label_ptr[0], R_390_PC16DBL, (intptr_t)s->code_ptr, 2); + bool ok =3D patch_reloc(lb->label_ptr[0], R_390_PC16DBL, + (intptr_t)s->code_ptr, 2); + tcg_debug_assert(ok); =20 tcg_out_mov(s, TCG_TYPE_PTR, TCG_REG_R2, TCG_AREG0); if (TARGET_LONG_BITS =3D=3D 64) { --=20 2.17.2