From patchwork Mon Apr 22 03:44:13 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: liguang X-Patchwork-Id: 238304 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id BE9EE2C0120 for ; Mon, 22 Apr 2013 13:46:46 +1000 (EST) Received: from localhost ([::1]:41939 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UU7iH-0003gk-1r for incoming@patchwork.ozlabs.org; Sun, 21 Apr 2013 23:46:45 -0400 Received: from eggs.gnu.org ([208.118.235.92]:41143) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UU7ht-0003dR-E9 for qemu-devel@nongnu.org; Sun, 21 Apr 2013 23:46:23 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UU7hr-0001Sv-Bf for qemu-devel@nongnu.org; Sun, 21 Apr 2013 23:46:21 -0400 Received: from [222.73.24.84] (port=11182 helo=song.cn.fujitsu.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UU7hq-0001QZ-NI for qemu-devel@nongnu.org; Sun, 21 Apr 2013 23:46:19 -0400 X-IronPort-AV: E=Sophos;i="4.87,523,1363104000"; d="scan'208";a="7109132" Received: from unknown (HELO tang.cn.fujitsu.com) ([10.167.250.3]) by song.cn.fujitsu.com with ESMTP; 22 Apr 2013 11:43:34 +0800 Received: from fnstmail02.fnst.cn.fujitsu.com (tang.cn.fujitsu.com [127.0.0.1]) by tang.cn.fujitsu.com (8.14.3/8.13.1) with ESMTP id r3M3kGtp026759; Mon, 22 Apr 2013 11:46:16 +0800 Received: from liguang.fnst.cn.fujitsu.com ([10.167.233.147]) by fnstmail02.fnst.cn.fujitsu.com (Lotus Domino Release 8.5.3) with ESMTP id 2013042211444664-715882 ; Mon, 22 Apr 2013 11:44:46 +0800 From: liguang To: qemu-devel@nongnu.org Date: Mon, 22 Apr 2013 11:44:13 +0800 Message-Id: <1366602253-15974-2-git-send-email-lig.fnst@cn.fujitsu.com> X-Mailer: git-send-email 1.7.2.5 In-Reply-To: <1366602253-15974-1-git-send-email-lig.fnst@cn.fujitsu.com> References: <1366602253-15974-1-git-send-email-lig.fnst@cn.fujitsu.com> X-MIMETrack: Itemize by SMTP Server on mailserver/fnst(Release 8.5.3|September 15, 2011) at 2013/04/22 11:44:46, Serialize by Router on mailserver/fnst(Release 8.5.3|September 15, 2011) at 2013/04/22 11:44:46, Serialize complete at 2013/04/22 11:44:46 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 222.73.24.84 Cc: blauwirbel@gmail.com, pbonzini@redhat.com, afaerber@suse.de, lig.fnst@cn.fujitsu.com Subject: [Qemu-devel] [PATCH 2/2] target-i386/seg_helper: define names for code/data segment types X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Signed-off-by: liguang --- target-i386/seg_helper.c | 71 +++++++++++++++++++++++++++++++++------------ 1 files changed, 52 insertions(+), 19 deletions(-) diff --git a/target-i386/seg_helper.c b/target-i386/seg_helper.c index 419efd8..6b35b7c 100644 --- a/target-i386/seg_helper.c +++ b/target-i386/seg_helper.c @@ -2292,6 +2292,39 @@ void helper_sysexit(CPUX86State *env, int dflag) EIP = EDX; } +/* + * for data segment types + * RO -- read-only, A -- accessed, + * W -- write, E -- expand-down + */ +#define DESC_DSEG_RO 0 +#define DESC_DSEG_ROA 1 +#define DESC_DSEG_RW 2 +#define DESC_DSEG_RWA 3 +#define DESC_DSEG_ROE 4 +#define DESC_DSEG_ROEA 5 +#define DESC_DSEG_RWE 6 +#define DESC_DSEG_RWEA 7 + +/* + * for code segment types + * EO -- execute-only, A -- accessed, + * C -- conforming, E -- expand-down, R -- read + */ + +#define DESC_CSEG_EO 8 +#define DESC_CSEG_EOA 9 +#define DESC_CSEG_ER 10 +#define DESC_CSEG_ERA 11 +#define DESC_CSEG_EOC 12 +#define DESC_CSEG_EOCA 13 +#define DESC_CSEG_ERC 14 +#define DESC_CSEG_ERCA 15 + +#define FUNC_LSL 4 +#define FUNC_LAR 3 +#define FUNC_VERR 2 +#define FUNC_VERW 1 static target_ulong misc_check_helper(CPUX86State *env, target_ulong selector1, int inst) @@ -2317,15 +2350,15 @@ static target_ulong misc_check_helper(CPUX86State *env, target_ulong selector1, if (e2 & DESC_S_MASK) { if (e2 & DESC_CS_MASK) { switch (inst) { - case 1: + case FUNC_VERW: goto fail; - case 2: + case FUNC_VERR: if (!(e2 & (DESC_R_MASK | DESC_C_MASK))) { goto fail; } break; - case 3: - case 4: + case FUNC_LAR: + case FUNC_LSL: if (!(e2 & DESC_C_MASK)) { goto check_pl; } @@ -2337,17 +2370,17 @@ static target_ulong misc_check_helper(CPUX86State *env, target_ulong selector1, } else { type = (e2 >> DESC_TYPE_SHIFT) & 0xf; switch (type) { - case 1: - case 2: - case 3: - case 9: - case 11: - if (inst == 3) { + case DESC_DSEG_ROA: + case DESC_DSEG_RW: + case DESC_DSEG_RWA: + case DESC_CSEG_EOA: + case DESC_CSEG_ERA: + if (inst == FUNC_LAR) { break; } - case 5: - case 12: - if (inst == 4) { + case DESC_DSEG_ROEA: + case DESC_CSEG_EOC: + if (inst == FUNC_LSL) { break; } default: @@ -2356,10 +2389,10 @@ static target_ulong misc_check_helper(CPUX86State *env, target_ulong selector1, goto check_pl; } - if (inst == 3) { + if (inst == FUNC_LAR) { e2 &= 0x00f0ff00; } - if (inst == 4) { + if (inst == FUNC_LSL) { e2 = get_seg_limit(e1, e2); } @@ -2376,22 +2409,22 @@ fail: target_ulong helper_lsl(CPUX86State *env, target_ulong selector1) { - return misc_check_helper(env, selector1, 4); + return misc_check_helper(env, selector1, FUNC_LSL); } target_ulong helper_lar(CPUX86State *env, target_ulong selector1) { - return misc_check_helper(env, selector1, 3); + return misc_check_helper(env, selector1, FUNC_LAR); } void helper_verr(CPUX86State *env, target_ulong selector1) { - misc_check_helper(env, selector1, 2); + misc_check_helper(env, selector1, FUNC_VERR); } void helper_verw(CPUX86State *env, target_ulong selector1) { - misc_check_helper(env, selector1, 1); + misc_check_helper(env, selector1, FUNC_VERW); } #if defined(CONFIG_USER_ONLY)