From patchwork Fri Dec 14 03:19:07 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 153725 Delivered-To: patch@linaro.org Received: by 2002:a2e:299d:0:0:0:0:0 with SMTP id p29-v6csp1603474ljp; Thu, 13 Dec 2018 19:34:47 -0800 (PST) X-Google-Smtp-Source: AFSGD/Xo9h8HKYJl5SpJT4e0UoukrQgvL/5i5fua0V1AJDTQPLnDGX4Tuq5NXxAsivYe4sH/2z4k X-Received: by 2002:ac8:fd4:: with SMTP id f20mr1307874qtk.63.1544758487457; Thu, 13 Dec 2018 19:34:47 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1544758487; cv=none; d=google.com; s=arc-20160816; b=ajwGvNNPMaMPdOTmJMh8xqGmIUq6qhmCyZkoD2zxbztCKHntGH42TfhuGlYhbNd037 dE127P0Xr2o61KaSsssnPLZX9stvh7GqCXmsG/0a8Hu0LnFENc2d6EtQRa2CjBJqNcW1 NqRCsW/t3dg2bPJWuw1GCfd25ctAEsjWHlF9wvhzrSLarpntUDaDx1JLxd+zI9yrTKou q+IRDwdvRw7q/hVgvCJOC/OxDbxuj0W6Cm79nvF7H4lHg5HuN9elTqCS3fRwFDpK2zQi kSv1mcOU+gFG0yLcgVEj2ZKxCU+jWv2KbJgoMCdhrKWD/EhHKV6HJ5iWm6QZJ2TbK4Z/ yW1w== 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 :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature; bh=ROFG7TZHTA0dfs36r/Nwv/zpP8/0UI1AqpPTTpG4eqc=; b=DhX0FoCHPAZxXh9Q10csHUS61dcJFVFOYsnpvpBNL5i2OdlMO8b16osRlE0lbB16Fg 2CterH9p5If9RxQI4ezDGINm2FOkYBwFrOXVGK+uFO4bn7Kp5MJssK7kzieAIzAnyjrs 1IMr87TeguxwXHI2cAxRELWZN4MlZcSCI7KZHMkh/pRyl/Fb8/uAWDpZX2es1ZUWewsh cdRB/TcBiPF3D3LroizbfyNUDuVsOuOrp/lWPMQmA75DgOM00g+/Uo7pG6KmP9ogun8i crfVA7tBH4UoJflAWvgxzwmq6dba8dm27c99MvqO39Z99ypyw8f1DSIpELDISG5h/m9c OFSQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=ZKkFHlI3; 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 z54si1788093qtb.1.2018.12.13.19.34.47 for (version=TLS1 cipher=AES128-SHA bits=128/128); Thu, 13 Dec 2018 19:34:47 -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=ZKkFHlI3; 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]:59127 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gXeFS-0001Rf-Vl for patch@linaro.org; Thu, 13 Dec 2018 22:34:47 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58868) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gXe12-00067K-DK for qemu-devel@nongnu.org; Thu, 13 Dec 2018 22:19:55 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gXe0x-00076F-CH for qemu-devel@nongnu.org; Thu, 13 Dec 2018 22:19:50 -0500 Received: from mail-oi1-x229.google.com ([2607:f8b0:4864:20::229]:32912) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1gXe0v-0006zo-5X for qemu-devel@nongnu.org; Thu, 13 Dec 2018 22:19:46 -0500 Received: by mail-oi1-x229.google.com with SMTP id c206so3495243oib.0 for ; Thu, 13 Dec 2018 19:19:45 -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 :mime-version:content-transfer-encoding; bh=ROFG7TZHTA0dfs36r/Nwv/zpP8/0UI1AqpPTTpG4eqc=; b=ZKkFHlI3FXq8FiQvHfkPS0rWeeFJmlEq+BSxeUuZAyzITTkPU3SeDDhMoLZgiyJWbZ 2Gt4DjfKU5QGRVudOh7s/SsLUtu38pTPNh8zKXGPRMy0komTnsQmmMBrN1hKDWYvQ7Rh 6T8Dmq0iGK+AIrixMiZnU9n09ouROrKny6iO4= 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:mime-version:content-transfer-encoding; bh=ROFG7TZHTA0dfs36r/Nwv/zpP8/0UI1AqpPTTpG4eqc=; b=VeXvNtROsF3pSZi2UymEUxVPVDX9mdzYq40gzcz3l7DqulMcwN0Xkj8sea99QB3PrG 49FLp54lYuqGXmxMBZD8+KphfrlE1uagEMwrY0/qIpOfbAoTyh0DCYe0VjeYkD3vVrwg 2Dmx/APT1rbmROwyfhNG3qKQvs6ylovghMf+cyY4/mJ96FVXmczvDywdQyTFwp4nz1Es q5pHyrRsjvJL2ZSf74+oMBbHgaSfjHZ9T1yv09mR14XMx/1gxSYOnRsGYrv9kO2I9OAl dpWocY7+aYIhuBCiNxWKztnmnKrDiZC00nfcjS2WKL12uzR/r44+5X5mYx+zkQ+WWEyu RE6A== X-Gm-Message-State: AA+aEWbH6Bg+DetegoTYpieSzZdC0l02v+QJlsjD7iBnVKR3ClS4k+wW 3i4hdk1YF4FfTnnW1lS4ATKXp9g5mnoGgw== X-Received: by 2002:aca:b7c2:: with SMTP id h185mr852319oif.298.1544757584135; Thu, 13 Dec 2018 19:19:44 -0800 (PST) Received: from cloudburst.twiddle.net ([187.217.227.243]) by smtp.gmail.com with ESMTPSA id g138sm2367537oib.26.2018.12.13.19.19.43 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 13 Dec 2018 19:19:43 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Date: Thu, 13 Dec 2018 21:19:07 -0600 Message-Id: <20181214031923.29527-18-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.2 In-Reply-To: <20181214031923.29527-1-richard.henderson@linaro.org> References: <20181214031923.29527-1-richard.henderson@linaro.org> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::229 Subject: [Qemu-devel] [PULL 16/32] 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: peter.maydell@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. Reviewed-by: Alex Bennée Signed-off-by: Richard Henderson --- tcg/s390/tcg-target.inc.c | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) -- 2.17.2 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) {