From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: None (no SPF record) identity=mailfrom; client-ip=2a00:1450:400c:c09::244; helo=mail-wm0-x244.google.com; envelope-from=pete@akeo.ie; receiver=edk2-devel@lists.01.org Received: from mail-wm0-x244.google.com (mail-wm0-x244.google.com [IPv6:2a00:1450:400c:c09::244]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 2C2A4222CF1A8 for ; Wed, 10 Jan 2018 08:21:46 -0800 (PST) Received: by mail-wm0-x244.google.com with SMTP id 141so101598wme.3 for ; Wed, 10 Jan 2018 08:26:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=akeo-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id; bh=M+w8WBylGD1nFXvZ2uwe4MwBARw9Sj2GlEEk9MNV8Qw=; b=OSfrg/QDWcrx2fwuHlCF+GNO961pHUE024DZNv4M4N2kf6eq66uIkxzjqINLIKax4p 5dnCdOi01+h5/PSvsijehxIt9fzzWucWojOxi0PBiwkWifqu3OYr57L/pLUgmTbgPxK1 Kv+Hosv2fxve0b+tN59a3EN5vIl6TFDwG886cieX1HAO8FKT6dIqticQQnzf3jDJaYBy Kh2tWX44Pe6ujq07KSNA5qdAWRgvQvv8MrhEWvZvno5e5r95oMEE7+OjS88d7KpATo9B jXzKFfWIiWIu2q651hVgPEH4VqrQ4vFMmit1qCJb0wdv2T5aQbwhhPrtDYu50roxCTG8 1Z4w== 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; bh=M+w8WBylGD1nFXvZ2uwe4MwBARw9Sj2GlEEk9MNV8Qw=; b=NJKQZ0sC8eTNQTHENxgABJ8Hv+g1gAfavsqC2VYqwBCY5OtIVhQYvtSgd8emTFOVtH hUUbDyvU+xsmJBI/Kd1wm3Jroe2+jE8YN51pH1HG3jBA7LV0JjXscFgd7NYK2kFuOBXt 4btrybPzHWOFtz1QNjvf/a8QIpztP+qMcsU89MbcC9Uhr3qwHxafz6+fP5UIfeYAvlab GTOet9X48epVUY6UA4BE3Rb4whiiEuuUAGGhtSL47XV5/DLi6nOZb3EzNEtAruXyW5oD mnxdx28/SDumTKriBV1XZ+2EZqHznBfjzfrjkmtWhOCGZquZREMH1AdydzcyY2JB8MLU CtzA== X-Gm-Message-State: AKGB3mJlmcosRR3w02aqFR0FOP8iwGe3Q2qmwtjSRH2XRtKGiS1wT01B PxxNMC1IUDWmgR3X/b/v7q3wFwQDcM4= X-Google-Smtp-Source: ACJfBovWacdvOkA1LcCwni6Ht6b6PWJhMdqP3j2994zUn68cIKAVF03W6SFNxFFsTtIFB7XOe/Hskw== X-Received: by 10.80.135.85 with SMTP id 21mr26312957edv.226.1515601614113; Wed, 10 Jan 2018 08:26:54 -0800 (PST) Received: from localhost.localdomain ([84.203.41.108]) by smtp.gmail.com with ESMTPSA id a52sm10543021eda.92.2018.01.10.08.26.52 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 10 Jan 2018 08:26:53 -0800 (PST) From: Pete Batard To: edk2-devel@lists.01.org Cc: liming.gao@intel.com, ard.biesheuvel@linaro.org Date: Wed, 10 Jan 2018 16:26:38 +0000 Message-Id: <20180110162644.11208-1-pete@akeo.ie> X-Mailer: git-send-email 2.9.3.windows.2 Subject: [PATCH v4 0/6] Add ARM support for VS2017 X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Jan 2018 16:21:47 -0000 (This v4 is the same as v3 from 2017-12-08, except to take into account Ard's remarks and reuse the existing RVCT assembly for the MSFT compiler intrinsics) The following series adds ARM compilation support for the VS2017 toolchain. * PATCH 1 targets the disabling of VS Level 4 warnings. The disabled warnings for ARM are now aligned with IA32 and X64. * PATCH 2 adds a NULL handler for the base stack check, since this is a GCC 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, by reusing the RVCT code, as well as 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 may 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 no 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/c4ce41094a46f4f3dc7ccc64a90604813f037b13 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/div.asm | 43 +++++++-- ArmPkg/Library/CompilerIntrinsicsLib/Arm/ldivmod.asm | 40 ++++++-- ArmPkg/Library/CompilerIntrinsicsLib/Arm/llsr.asm | 22 +++-- ArmPkg/Library/CompilerIntrinsicsLib/Arm/uldiv.asm | 29 +++++- ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf | 16 +++- 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 | 31 +++++++ 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 ++++ 15 files changed, 372 insertions(+), 60 deletions(-) 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