From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by mx.groups.io with SMTP id smtpd.web11.20514.1684424212385077829 for ; Thu, 18 May 2023 08:36:52 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=XUgWvSty; spf=pass (domain: intel.com, ip: 192.55.52.88, mailfrom: michael.d.kinney@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1684424212; x=1715960212; h=from:to:cc:subject:date:message-id:references: in-reply-to:mime-version; bh=VXhyEeW7WDhf2f+4wjHcemvY2GnJFDqFFHkc0+NUh1g=; b=XUgWvStyhEbcL52BmkCxH7CwedPVMFAg4neR8aFVXypjn5YzxuC5moo4 YXiWaVvJPkb9SbVoSRhwrmYt2M0YNBQKXtB58zUutkAwuKyssqDhGMoRE dRglQEbKGNLSBIjm54K95r8nSCFyOg8bxaptPSYDnzhMwHlaavMlyWKp4 40+gl81CIMMtmmL9FJvP5/jrs/LU+5xLwLpamZp9zdcIFbPJq6uz5MCBo 82G1H88Qxmf703UL3uB1Eud+KXuEQZfDeS6Z9s8tEumBvxoxTNms1Gpto q7GKrbU8Qk7yhLSvMlCxl/rJtqeLxvc1k0FCrch9tbCqbf9hkRxa6ToQf g==; X-IronPort-AV: E=McAfee;i="6600,9927,10714"; a="380312354" X-IronPort-AV: E=Sophos;i="5.99,285,1677571200"; d="scan'208,217";a="380312354" Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 May 2023 08:36:27 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10714"; a="876468447" X-IronPort-AV: E=Sophos;i="5.99,285,1677571200"; d="scan'208,217";a="876468447" Received: from orsmsx603.amr.corp.intel.com ([10.22.229.16]) by orsmga005.jf.intel.com with ESMTP; 18 May 2023 08:36:27 -0700 Received: from orsmsx612.amr.corp.intel.com (10.22.229.25) by ORSMSX603.amr.corp.intel.com (10.22.229.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Thu, 18 May 2023 08:36:26 -0700 Received: from ORSEDG602.ED.cps.intel.com (10.7.248.7) by orsmsx612.amr.corp.intel.com (10.22.229.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23 via Frontend Transport; Thu, 18 May 2023 08:36:26 -0700 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (104.47.55.101) by edgegateway.intel.com (134.134.137.103) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.23; Thu, 18 May 2023 08:36:26 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KrwF2JC7S6wevKJOu398h31+GVpPcVVoDny7TDETu0MIs/OnxvlkJEtN3ZQauVzIR6U4y22IUZ6LobfbF7n3GaGKMmwEyIMpFIgK59MiDhjLZ0c2+pQLm27FFEByVGCnle1ekXu2qkMwStXJucFGySRuXNpyivXuGFlMhOF4FD+BnemvgYIdJbbYIVdTNXgbU/R/XhGHANo6BC/Pn5PEKDsFwEtHpqXUUQhYdtplz++niV049p3HTR89i3yoPaClAmYBOV5VEPSazoTJr9Nk0noXzFi7D9P6HSnKWz9Gco+EcxJhpdpDk9NXHELfj2siBkOawKSx4DJPFgUVuLPHaQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=E08BgFeiUsZi4uhMWyHD82EM0wFL9+S1AQ5lL6t2auQ=; b=Llbb83yWFGLC50lmkYEGEr/h3pKLlWqmV8wQC2aIh3GXDXKKHE/JdWRC7P2UM3E/KknmRls78u8MexEkSgxOTJUkvPZkC3cCz9WlAdKu3pj53W7AnFrqWHDO9ncEipdpv+xuFoxRETOKp7Owzjez84RCi+LKZ/yM7wUQibnsQ8P1c/rGUbokuFsmSU1tIZYcH7P3rY8bRm2kuwzC6H6wAF85ybX/WE73uhAh8TPqUuJtCn+7Dnj5GiYCptpt5Tk9EL2W9EctRN7grjIFSCCmwCWhEwr2UO/wt0F5VIGFUPaxzkG815cYlsqfIzgr9xJxaDUhG1hav/XkR2juNo7aGA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from CO1PR11MB4929.namprd11.prod.outlook.com (2603:10b6:303:6d::19) by PH0PR11MB5111.namprd11.prod.outlook.com (2603:10b6:510:3c::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6411.19; Thu, 18 May 2023 15:36:24 +0000 Received: from CO1PR11MB4929.namprd11.prod.outlook.com ([fe80::4752:67f2:9956:b277]) by CO1PR11MB4929.namprd11.prod.outlook.com ([fe80::4752:67f2:9956:b277%4]) with mapi id 15.20.6411.017; Thu, 18 May 2023 15:36:24 +0000 From: "Michael D Kinney" To: "Ni, Ray" , "devel@edk2.groups.io" CC: Rebecca Cran , "Kinney, Michael D" Subject: Re: CpuDeadLoop() is optimized by compiler Thread-Topic: CpuDeadLoop() is optimized by compiler Thread-Index: AdmJbt4CNBNeb1syQVC5/ttKEmOvqQALzAcw Date: Thu, 18 May 2023 15:36:24 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: CO1PR11MB4929:EE_|PH0PR11MB5111:EE_ x-ms-office365-filtering-correlation-id: a9b62f4e-c43d-47b0-467f-08db57b5a33c x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: KtCDb93LRds9lmi+FuYc9G9Hy56gRI6sofS0fIBxsTV300v+WUc4FhBFKbnbIbu6cfnWJ1XhPQaJpItGFBxocEWC2zXmQNbjyZ1fE55MCO1wPulCGechGg5yzqsJkXq6PGEdMrBInqRSCSRIIZ3sUGvKXA5z8LcLCm/YDa036Ovn1Wd9Nr7eIYj1iFFlGLf/RimyODVIJMV7WF5ZhuwstlfsfJG14/udoR6rm2WcieK2mFYSI/sYk5bCSS3IyavHC2dVb+xFiBZvBef79KyjCUlVHNzK/PiEtnkcVvdyIE/N5aMxLppn3djjoKiu7Xsej6Y9z+m6PQx7j4rpNG4hyCU8loA9xmk/CFHaQqyAGxoguUIKyo7HxeuXo61l0Z4HTIavvePqm43TFSI3fpU40O9dLg9Blpe6q7qsbLl87QMyq09LxB5G1XsAUt/QcScSvDJXP090GN0pnIG2i/D/t7ZjjyH17wLXdYVlsE2FOof0ymzLwpC2HIwdGPUiILXqTSAXeKHlKqcE2P6PewgZKbkJ6y8Cz76zQgDZ0SEeIAb87xoaJ0YR1WNVlSjJsun81AD1yUTKg9FSuZY/Bj63kKHRnXxm8p1wI+m0PCOUb7I= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CO1PR11MB4929.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(136003)(39860400002)(376002)(396003)(366004)(346002)(451199021)(53546011)(6506007)(9686003)(107886003)(26005)(83380400001)(38070700005)(38100700002)(33656002)(122000001)(86362001)(82960400001)(186003)(55016003)(54906003)(110136005)(478600001)(2906002)(8936002)(8676002)(9326002)(316002)(41300700001)(5660300002)(52536014)(64756008)(66556008)(66476007)(4326008)(76116006)(66446008)(66946007)(7696005)(71200400001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?jhu2rApVl2cks3vxh80NwF8M4yuzmtjyT3dWk5dYcxdSEKZnIIIGu3jHpVWD?= =?us-ascii?Q?X/42oSG9hEn74Plbt+VDm9XsvAUNDONh4ZwFEM64BC2xNCKk4yebrMhIkMCO?= =?us-ascii?Q?/tIuBZGUTUbhVHrr0Z7u/xoHCT/tMJhq+72VOGzo88p3z9nRhPHS5PGYonH7?= =?us-ascii?Q?6ZZWYJaq1YRICS28vutObvXgGIEjoHcVv6eZQrKndWvM8JZixbn8d7rndA/T?= =?us-ascii?Q?/rR+v5+K+Oc6oX274tDo4s1Ns11LfCwH4E34KWl7mC4juyeopqueb41m2cyX?= =?us-ascii?Q?BF2rLitPvUuxaAQinZ+OwnpYXbI0COm2VSmWKYp80CQBrXCqebJD/kfB0OhJ?= =?us-ascii?Q?EsqksaT9Z3ZzD3bvizC0BSXB0Svs0wbUChgirnE143cjLAUJoKMXWsQufGLj?= =?us-ascii?Q?bja0kgJJnTCniBb7V4WSW2MrB4BANR7c5o9ZDnzP53tZhb+xkLIv000F+Xoc?= =?us-ascii?Q?9Qjs6urD9x2NhfGI8+o1VXJfGdHh3dbXsuQgyEHCY3BE7kaYePDZeRTwYXiX?= =?us-ascii?Q?SUd28imzoM1QB7uId6kUaulRmOd/l7v+8/UbPx7giEGUdtjTl4uwWbuOjuED?= =?us-ascii?Q?VMIW8N29XKOB+O5Hxghpt4YT/mecE1WiPp13eo5WoOsAIioqJ/YbhFgwKAP7?= =?us-ascii?Q?Kq6LM2KL3+83yz6fcr9R7t8iUSs2+djAU4FWYRF0gKvVLErO47YOpIfvZUZl?= =?us-ascii?Q?K+EcpRfnKWSHsWKo8lGTHmtZxTeUc1ptBFR7BGH5sNba7MWhfu2CyHvaWrNY?= =?us-ascii?Q?9fYI/ta3oXsJhh6FL4A0jJlqIRD3lAlgiF3cWTvTnYGXp9Pn4K1DZi8r+Hti?= =?us-ascii?Q?cwtkFshK3MP3INw4mfAKGPHEMQz32JeyxRyyPSNclateLShNBgyRHEXU5Vjk?= =?us-ascii?Q?+AL7daUTaDr8LdeW/NVT0qVrbf7W4Elkw2aOPfoaccm2mtPSD/J2Mr/2FrrG?= =?us-ascii?Q?yXEcRhQUTnftam99oIn88ba13D/nXcZT6JOYkojCCY8TG0boEDWZnuq9VK5A?= =?us-ascii?Q?d/UmBrVpTGKW+CBDMBBLuQuTL39dEhHZWBAIAz1vYrqflrV6zyBJxAVx59Z5?= =?us-ascii?Q?pckSHzkBwe/PRKDSqBdGIQSk/y1wzJFBeUSzkOj0aUfwfzlsmkKnEBuOGwpr?= =?us-ascii?Q?Yfs1Mp8J6B8fhPj2DSw0jvKj91orUiLYk0EjS8bGhoLhLhjfqcp0XK+q8zWn?= =?us-ascii?Q?wytIWFtLGec4ilo/Xmyj/D4srtIg3CLDWGCgM9YPnCvkZ99OUAhV4mVbA0A4?= =?us-ascii?Q?kyney/1X0EsCESHz+dgCC/OiAEhkNImz+43qPKvVq4CnkrbfwwnlLyGndWkH?= =?us-ascii?Q?9WDy6T3SHn9SqCb9XsWhiijVnocdqAo1+bhWnMd4prKWTsTpsVusuhKKfkTS?= =?us-ascii?Q?mGnZfR9yW7kfUIB8z6zmuBbAcuvtoVvtjf2tKF0CITmo9zKRscUTopBTLNqB?= =?us-ascii?Q?UvGQRnA1ZTXzTKFhvAjYk2pZDi+iQ8HI2GCuQKlCDf0oo9oyt4Yw2CK8JnUE?= =?us-ascii?Q?PmrqgKQPmxPflldTFv5sK4yK/KQPmhEgqmyR9pHpoVPQ6HifD7w7f3FoSOko?= =?us-ascii?Q?EB/YkfoAs7HQVYDdivf0MDeg0wy88ZqmvT4IxNlJ7PgpsYqYi4K6ip0FwHBd?= =?us-ascii?Q?bA=3D=3D?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CO1PR11MB4929.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: a9b62f4e-c43d-47b0-467f-08db57b5a33c X-MS-Exchange-CrossTenant-originalarrivaltime: 18 May 2023 15:36:24.2067 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: umYIJCApMG64jHee24KvayPS1RIfvIHRFbwrpix+1dYjTIKR6cNI4JY6x3qu9FhXlrR/Y2fxLJ1Z5InybIpvWGgJLLm13wQJiN/orax6tvk= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR11MB5111 Return-Path: michael.d.kinney@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: multipart/alternative; boundary="_000_CO1PR11MB4929632E54321AA1766B682AD27F9CO1PR11MB4929namp_" --_000_CO1PR11MB4929632E54321AA1766B682AD27F9CO1PR11MB4929namp_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hi Ray, So the code generated does deadloop, but is just not easy to resume from as= we have been able to do in the past. We use CpuDeadloop() for 2 purposes. One is a terminal condition with no r= eason to ever continue. The 2nd is a debug aide for developers to halt the system at a specific loc= ation and then continue from that point, usually with a debugger, to step t= hrough code to an area to evaluate unexpected behavior. We may have to do a NASM implementation of CpuDeadloop() to make sure it me= ets both use cases. Mike From: Ni, Ray Sent: Thursday, May 18, 2023 3:00 AM To: devel@edk2.groups.io Cc: Kinney, Michael D ; Rebecca Cran ; Ni, Ray Subject: CpuDeadLoop() is optimized by compiler Hi, Starting from certain version of Visual Studio C compiler (I don't have the= exact version. I am using VS2019), CpuDeadLoop is now optimized quite well= by compiler. The optimization is so "good" that it becomes harder for developers to brea= k out of the deadloop. I copied the assembly instructions as below for your reference. The compiler does not generate instructions that jump out of the loop when = the Index is not zero. So in order to break out of the loop, developers need to: 1. Manually adjust rsp by increasing 40 2. Manually "ret" I am not sure if anyone has interest to re-write this function so that comp= iler can be "fooled" again. Thanks, Ray =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D ; Function compile flags: /Ogspy ; File e:\work\edk2\MdePkg\Library\BaseLib\CpuDeadLoop.c ; COMDAT CpuDeadLoop _TEXT SEGMENT Index$ =3D 48 CpuDeadLoop PROC = ; COMDAT ; 26 : { $LN12: 00000 48 83 ec 28 sub rsp, 40 = ; 00000028H ; 27 : volatile UINTN Index; ; 28 : ; 29 : for (Index =3D 0; Index =3D=3D 0;) { 00004 48 c7 44 24 30 00 00 00 00 mov QWORD PTR Index$[rsp], 0 $LN10@CpuDeadLoo: ; 30 : CpuPause (); 0000d 48 8b 44 24 30 mov rax, QWORD PTR Index$[rsp] 00012 e8 00 00 00 00 call CpuPause 00017 eb f4 jmp SHORT $LN10@CpuDeadLoo CpuDeadLoop ENDP _TEXT ENDS END --_000_CO1PR11MB4929632E54321AA1766B682AD27F9CO1PR11MB4929namp_ Content-Type: text/html; charset="us-ascii" Content-Transfer-Encoding: quoted-printable

Hi Ray,

 

So the code generated does deadloop, but is just not= easy to resume from as we have been able to do in the past.

 

We use CpuDeadloop() for 2 purposes.  One is a = terminal condition with no reason to ever continue.

 

The 2nd is a debug aide for developers to= halt the system at a specific location and then continue from that point, = usually with a debugger, to step through code to an area to evaluate unexpe= cted behavior.

 

We may have to do a NASM implementation of CpuDeadlo= op() to make sure it meets both use cases.

 

Mike

 

From: Ni, Ray <ray.ni@intel.com>
Sent: Thursday, May 18, 2023 3:00 AM
To: devel@edk2.groups.io
Cc: Kinney, Michael D <michael.d.kinney@intel.com>; Rebecca Cr= an <rebecca@bsdio.com>; Ni, Ray <ray.ni@intel.com>
Subject: CpuDeadLoop() is optimized by compiler

 

Hi,

Starting from certain version of Visual Studio C com= piler (I don’t have the exact version. I am using VS2019), CpuDeadLoo= p is now optimized quite well by compiler.

 

The optimization is so “good” that it be= comes harder for developers to break out of the deadloop.

 

I copied the assembly instructions as below for your= reference.

The compiler does not generate instructions that jum= p out of the loop when the Index is not zero.

So in order to break out of the loop, developers nee= d to:

  1. Manually adjust rsp by increasing 40
  2. Manually &#= 8220;ret”

 

I am not sure if anyone has interest to re-write thi= s function so that compiler can be “fooled” again.

Thanks,
Ray

 

=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D

; Function compile flags: /Ogspy

; File e:\work\edk2\MdePkg\Library\BaseLib\CpuDeadLo= op.c

;        &nb= sp;     COMDAT CpuDeadLoop

_TEXT    SEGMENT

Index$ =3D 48

CpuDeadLoop PROC      =             &nb= sp;            =             &nb= sp;            =             ; COMDAT=

 

; 26   : {

 

$LN12:

  00000  48 83 ec 28   &nbs= p;     sub        rs= p, 40           &nbs= p;            &= nbsp;       ; 00000028H

 

; 27   :   volatile UINTN  = Index;

; 28   :

; 29   :   for (Index =3D 0; Ind= ex =3D=3D 0;) {

 

  00004  48 c7 44 24 30

        &nbs= p;      00 00 00 00     &= nbsp;  mov      QWORD PTR Index$[rsp], 0=

$LN10@CpuDeadLoo:

 

; 30   :     CpuPause = ();

 

  0000d  48 8b 44 24 30   mov&nb= sp;     rax, QWORD PTR Index$[rsp]

  00012  e8 00 00 00 00   call&n= bsp;       CpuPause

  00017  eb f4    &nbs= p;            &= nbsp;   jmp       SHORT $LN10@CpuDe= adLoo

CpuDeadLoop ENDP

_TEXT    ENDS

END

 

 

--_000_CO1PR11MB4929632E54321AA1766B682AD27F9CO1PR11MB4929namp_--