From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=134.134.136.31; helo=mga06.intel.com; envelope-from=liming.gao@intel.com; receiver=edk2-devel@lists.01.org Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id A87B52218E923 for ; Wed, 6 Dec 2017 18:57:56 -0800 (PST) Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga104.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 06 Dec 2017 19:02:29 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.45,370,1508828400"; d="scan'208";a="13817146" Received: from fmsmsx104.amr.corp.intel.com ([10.18.124.202]) by orsmga001.jf.intel.com with ESMTP; 06 Dec 2017 19:02:28 -0800 Received: from fmsmsx113.amr.corp.intel.com (10.18.116.7) by fmsmsx104.amr.corp.intel.com (10.18.124.202) with Microsoft SMTP Server (TLS) id 14.3.319.2; Wed, 6 Dec 2017 19:02:28 -0800 Received: from shsmsx151.ccr.corp.intel.com (10.239.6.50) by FMSMSX113.amr.corp.intel.com (10.18.116.7) with Microsoft SMTP Server (TLS) id 14.3.319.2; Wed, 6 Dec 2017 19:02:28 -0800 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.152]) by SHSMSX151.ccr.corp.intel.com ([169.254.3.218]) with mapi id 14.03.0319.002; Thu, 7 Dec 2017 11:02:26 +0800 From: "Gao, Liming" To: Pete Batard , "edk2-devel@lists.01.org" Thread-Topic: [PATCH v2 0/6] Add ARM support for VS2017 Thread-Index: AQHTboOCLWIV0IEW3kmOCdjgG957o6M3Mb3g Date: Thu, 7 Dec 2017 03:02:25 +0000 Message-ID: <4A89E2EF3DFEDB4C8BFDE51014F606A14E18BA51@SHSMSX104.ccr.corp.intel.com> References: <20171206111509.10144-1-pete@akeo.ie> In-Reply-To: <20171206111509.10144-1-pete@akeo.ie> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [PATCH v2 0/6] Add ARM support for VS2017 X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 07 Dec 2017 02:57:56 -0000 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Pete: This is the base step to enable VS2017 ARM tool chain. Then, user could u= se it and build ARM application first.=20 Here, I have one question. VS2017 ARM requires 4096 alignment. So, why no= t add /FILEALIGN:4096 into tools_def.txt as the default linker option for A= RM? Thanks Liming >-----Original Message----- >From: Pete Batard [mailto:pete@akeo.ie] >Sent: Wednesday, December 06, 2017 7:15 PM >To: edk2-devel@lists.01.org >Cc: Gao, Liming >Subject: [PATCH v2 0/6] Add ARM support for VS2017 > >This is a v2 of the previous patch, that takes into account the alignment >of suppressed level 4 warnings between IA32, X64 and ARM, and that also >removes compiler options that weren't actually needed. > >The following series adds ARM compilation support for the VS2017 toolchain= . >* PATCH 1 targets the disabling of VS Level 4 warnings. The disabled warni= ngs > for ARM are now aligned with IA32 and X64. >* PATCH 2 adds a NULL handler for the base stack check, since this is a GC= C > functionality. >* PATCH 3 updates MdePkg/Library/BaseLib so that the RVCT assembly >sources > are also used for MSFT. >* PATCH 4 adds the required compiler intrinsics replacements for division, > shift and memset/memcpy. >* PATCH 5 adds variable argument handlers for print output. Note that this > is done without relying on any external headers, with the VA_ARG macro > having been reverse engineered from MSFT ARM assembly output. >* PATCH 6 enables the selection of ARM in the conf templates. > >With these patches, VS2017 toolchain users should be able to compile >regular UEFI ARM applications using EDK2. Note that, unlike ARM64 support, >ARM support does not require a specific update of Visual Studio 2017, as >the ARM toolchain has been available from the very first release. > >Additional notes: > >We tested compiling and running the full UEFI Shell with this series, as >well as a small set of applications and drivers, and found no issues. >With an additional patch [1], it is also possible to use this proposal to >compile a complete QEMU ARM firmware. As the patch shows, the changes >that >need to be applied to the EDK2 sources to achieve this are actually very >minimal. > >However, the generated firmware does not currently boot, possibly because >of the following warnings being generated by the MS compiler: >- ArmCpuDxe.dll : warning LNK4072: section count 118 exceeds max (96); >image may not run >- UiApp.dll : warning LNK4072: section count 113 exceeds max (96); image m= ay >not run > >As far as I could see, the section count max is hardcoded so a workaround >would be needed to address those. > >Also, because the VS2017 ARM compiler forces a section alignment of 4096 >bytes (which in turn forces use to use /FILEALIGN:4096 as a linker option >for the firmware generation), the generated firmware exceeds 2MB and we >had to double its size to 4MB. > >At this stage, since the goal of this series is to allow users to compile >regular ARM UEFI applications using the VS2017 toolchain, I have non plans >to spend more time on the QEMU firmware issues, especially as I suspect >that reducing the firmware size back to 2 MB may not be achievable without >Microsoft altering their compiler. I am however hopeful that ARM >specialists can take this matter over eventually... > >Regards, > >/Pete > >[1] >https://github.com/pbatard/edk2/commit/c4ce41094a46f4f3dc7ccc64a906048 >13f037b13 > > >Pete Batard (6): > MdePkg: Disable some Level 4 warnings for VS2017/ARM > MdePkg/Library/BaseStackCheckLib: Add Null handler for VS2017/ARM > MdePkg/Library/BaseLib: Enable VS2017/ARM builds > ArmPkg/Library/CompilerIntrinsicsLib: Enable VS2017/ARM builds > MdePkg/Include: Add VA list support for VS2017/ARM > BaseTools/Conf: Add VS2017/ARM support > > ArmPkg/Library/CompilerIntrinsicsLib/Arm/rtdiv.asm | 255 >++++++++++++++++++++ > ArmPkg/Library/CompilerIntrinsicsLib/Arm/rtsrsh.asm | 45 ++++ > ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf | 13 +- > ArmPkg/Library/CompilerIntrinsicsLib/memcpy_ms.c | 34 +++ > ArmPkg/Library/CompilerIntrinsicsLib/memset_ms.c | 33 +++ > BaseTools/Conf/build_rule.template | 31 ++- > BaseTools/Conf/tools_def.template | 28 +++ > MdePkg/Include/Arm/ProcessorBind.h | 96 ++++= ++-- > MdePkg/Include/Base.h | 13 + > MdePkg/Library/BaseLib/Arm/CpuBreakpoint.asm | 5 +- > MdePkg/Library/BaseLib/BaseLib.inf | 16 +- > MdePkg/Library/BaseStackCheckLib/BaseStackCheckLib.inf | 5 +- > MdePkg/Library/BaseStackCheckLib/BaseStackCheckNull.c | 18 ++ > 13 files changed, 562 insertions(+), 30 deletions(-) > create mode 100644 ArmPkg/Library/CompilerIntrinsicsLib/Arm/rtdiv.asm > create mode 100644 ArmPkg/Library/CompilerIntrinsicsLib/Arm/rtsrsh.asm > create mode 100644 ArmPkg/Library/CompilerIntrinsicsLib/memcpy_ms.c > create mode 100644 ArmPkg/Library/CompilerIntrinsicsLib/memset_ms.c > create mode 100644 >MdePkg/Library/BaseStackCheckLib/BaseStackCheckNull.c > >-- >2.9.3.windows.2