* [PATCH v5 1/6] MdePkg: Disable some Level 4 warnings for VS2017/ARM
2018-01-12 13:33 [PATCH v5 0/6] Add ARM support for VS2017 Pete Batard
@ 2018-01-12 13:33 ` Pete Batard
2018-01-12 13:33 ` [PATCH v5 2/6] MdePkg/Library/BaseStackCheckLib: Add Null handler " Pete Batard
` (5 subsequent siblings)
6 siblings, 0 replies; 12+ messages in thread
From: Pete Batard @ 2018-01-12 13:33 UTC (permalink / raw)
To: edk2-devel; +Cc: liming.gao, ard.biesheuvel, eugene
We disable the exact same warnings as IA32 and X64.
Also create a dummy macro for PRESERVE8, as this is not supported by
the Microsoft ARM assembler.
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Pete Batard <pete@akeo.ie>
---
MdePkg/Include/Arm/ProcessorBind.h | 96 +++++++++++++++-----
1 file changed, 75 insertions(+), 21 deletions(-)
diff --git a/MdePkg/Include/Arm/ProcessorBind.h b/MdePkg/Include/Arm/ProcessorBind.h
index 42ea2f3055f3..afb2f05446f0 100644
--- a/MdePkg/Include/Arm/ProcessorBind.h
+++ b/MdePkg/Include/Arm/ProcessorBind.h
@@ -1,15 +1,15 @@
/** @file
Processor or Compiler specific defines and types for ARM.
- Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR>
+ Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
- This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
+ This program and the accompanying materials
+ are licensed and made available under the terms and conditions of the BSD License
+ which accompanies this distribution. The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.php
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/
@@ -28,14 +28,63 @@
#pragma pack()
#endif
+#if defined(_MSC_EXTENSIONS)
+
//
-// RVCT does not support the __builtin_unreachable() macro
+// Disable some level 4 compilation warnings (same as IA32 and X64)
//
-#ifdef __ARMCC_VERSION
+
+//
+// Disabling bitfield type checking warnings.
+//
+#pragma warning ( disable : 4214 )
+
+//
+// Disabling the unreferenced formal parameter warnings.
+//
+#pragma warning ( disable : 4100 )
+
+//
+// Disable slightly different base types warning as CHAR8 * can not be set
+// to a constant string.
+//
+#pragma warning ( disable : 4057 )
+
+//
+// ASSERT(FALSE) or while (TRUE) are legal constructs so suppress this warning
+//
+#pragma warning ( disable : 4127 )
+
+//
+// This warning is caused by functions defined but not used. For precompiled header only.
+//
+#pragma warning ( disable : 4505 )
+
+//
+// This warning is caused by empty (after preprocessing) source file. For precompiled header only.
+//
+#pragma warning ( disable : 4206 )
+
+//
+// Disable 'potentially uninitialized local variable X used' warnings
+//
+#pragma warning ( disable : 4701 )
+
+//
+// Disable 'potentially uninitialized local pointer variable X used' warnings
+//
+#pragma warning ( disable : 4703 )
+
+#endif
+
+//
+// RVCT and MSFT don't support the __builtin_unreachable() macro
+//
+#if defined(__ARMCC_VERSION) || defined(_MSC_EXTENSIONS)
#define UNREACHABLE()
#endif
-#if _MSC_EXTENSIONS
+#if defined(_MSC_EXTENSIONS)
//
// use Microsoft* C compiler dependent integer width types
//
@@ -52,7 +101,7 @@
typedef signed char INT8;
#else
//
- // Assume standard ARM alignment.
+ // Assume standard ARM alignment.
// Need to check portability of long long
//
typedef unsigned long long UINT64;
@@ -121,7 +170,7 @@ typedef INT32 INTN;
// use the correct C calling convention. All protocol member functions and
// EFI intrinsics are required to modify their member functions with EFIAPI.
//
-#define EFIAPI
+#define EFIAPI
// When compiling with Clang, we still use GNU as for the assembler, so we still
// need to define the GCC_ASM* macros.
@@ -142,34 +191,39 @@ typedef INT32 INTN;
#define GCC_ASM_EXPORT(func__) \
.global _CONCATENATE (__USER_LABEL_PREFIX__, func__) ;\
- .type ASM_PFX(func__), %function
+ .type ASM_PFX(func__), %function
#define GCC_ASM_IMPORT(func__) \
.extern _CONCATENATE (__USER_LABEL_PREFIX__, func__)
-
+
#else
//
- // .type not supported by Apple Xcode tools
+ // .type not supported by Apple Xcode tools
//
- #define INTERWORK_FUNC(func__)
+ #define INTERWORK_FUNC(func__)
#define GCC_ASM_EXPORT(func__) \
.globl _CONCATENATE (__USER_LABEL_PREFIX__, func__) \
-
- #define GCC_ASM_IMPORT(name)
+
+ #define GCC_ASM_IMPORT(name)
#endif
+#elif defined(_MSC_EXTENSIONS)
+ //
+ // PRESERVE8 is not supported by the MSFT assembler.
+ //
+ #define PRESERVE8
#endif
/**
Return the pointer to the first instruction of a function given a function pointer.
- On ARM CPU architectures, these two pointer values are the same,
+ On ARM CPU architectures, these two pointer values are the same,
so the implementation of this macro is very simple.
-
+
@param FunctionPointer A pointer to a function.
@return The pointer to the first instruction of a function given a function pointer.
-
+
**/
#define FUNCTION_ENTRY_POINT(FunctionPointer) (VOID *)(UINTN)(FunctionPointer)
--
2.9.3.windows.2
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v5 2/6] MdePkg/Library/BaseStackCheckLib: Add Null handler for VS2017/ARM
2018-01-12 13:33 [PATCH v5 0/6] Add ARM support for VS2017 Pete Batard
2018-01-12 13:33 ` [PATCH v5 1/6] MdePkg: Disable some Level 4 warnings for VS2017/ARM Pete Batard
@ 2018-01-12 13:33 ` Pete Batard
2018-01-12 13:33 ` [PATCH v5 3/6] MdePkg/Library/BaseLib: Enable VS2017/ARM builds Pete Batard
` (4 subsequent siblings)
6 siblings, 0 replies; 12+ messages in thread
From: Pete Batard @ 2018-01-12 13:33 UTC (permalink / raw)
To: edk2-devel; +Cc: liming.gao, ard.biesheuvel, eugene
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Pete Batard <pete@akeo.ie>
---
MdePkg/Library/BaseStackCheckLib/BaseStackCheckLib.inf | 5 +++--
MdePkg/Library/BaseStackCheckLib/BaseStackCheckNull.c | 18 ++++++++++++++++++
2 files changed, 21 insertions(+), 2 deletions(-)
diff --git a/MdePkg/Library/BaseStackCheckLib/BaseStackCheckLib.inf b/MdePkg/Library/BaseStackCheckLib/BaseStackCheckLib.inf
index d02d97107b08..e280651b1199 100644
--- a/MdePkg/Library/BaseStackCheckLib/BaseStackCheckLib.inf
+++ b/MdePkg/Library/BaseStackCheckLib/BaseStackCheckLib.inf
@@ -30,8 +30,9 @@ [Defines]
#
[Sources]
- BaseStackCheckGcc.c | GCC
- BaseStackCheckGcc.c | RVCT
+ BaseStackCheckGcc.c | GCC
+ BaseStackCheckGcc.c | RVCT
+ BaseStackCheckNull.c | MSFT
[Packages]
MdePkg/MdePkg.dec
diff --git a/MdePkg/Library/BaseStackCheckLib/BaseStackCheckNull.c b/MdePkg/Library/BaseStackCheckLib/BaseStackCheckNull.c
new file mode 100644
index 000000000000..ebb387fee5e1
--- /dev/null
+++ b/MdePkg/Library/BaseStackCheckLib/BaseStackCheckNull.c
@@ -0,0 +1,18 @@
+/*++
+
+ Copyright (c) 2018, Intel Corporation. All rights reserved.<BR>
+ This program and the accompanying materials
+ are licensed and made available under the terms and conditions of the BSD License
+ which accompanies this distribution. The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.php.
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Abstract:
+
+ This file is purely empty as a work around for BaseStackCheck to pass MSVC build.
+
+**/
+
+extern int __BaseStackCheckNull;
--
2.9.3.windows.2
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v5 3/6] MdePkg/Library/BaseLib: Enable VS2017/ARM builds
2018-01-12 13:33 [PATCH v5 0/6] Add ARM support for VS2017 Pete Batard
2018-01-12 13:33 ` [PATCH v5 1/6] MdePkg: Disable some Level 4 warnings for VS2017/ARM Pete Batard
2018-01-12 13:33 ` [PATCH v5 2/6] MdePkg/Library/BaseStackCheckLib: Add Null handler " Pete Batard
@ 2018-01-12 13:33 ` Pete Batard
2018-01-12 13:33 ` [PATCH v5 4/6] ArmPkg/Library/CompilerIntrinsicsLib: " Pete Batard
` (3 subsequent siblings)
6 siblings, 0 replies; 12+ messages in thread
From: Pete Batard @ 2018-01-12 13:33 UTC (permalink / raw)
To: edk2-devel; +Cc: liming.gao, ard.biesheuvel, eugene
Most of the RVCT assembly can be reused as is for MSFT except
for CpuBreakpoint.asm, which we need to force to Arm mode.
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Pete Batard <pete@akeo.ie>
---
MdePkg/Library/BaseLib/Arm/CpuBreakpoint.asm | 5 ++++-
MdePkg/Library/BaseLib/BaseLib.inf | 16 +++++++++++++---
2 files changed, 17 insertions(+), 4 deletions(-)
diff --git a/MdePkg/Library/BaseLib/Arm/CpuBreakpoint.asm b/MdePkg/Library/BaseLib/Arm/CpuBreakpoint.asm
index 8a8065159bf2..e7490b09d3dc 100644
--- a/MdePkg/Library/BaseLib/Arm/CpuBreakpoint.asm
+++ b/MdePkg/Library/BaseLib/Arm/CpuBreakpoint.asm
@@ -16,7 +16,10 @@
EXPORT CpuBreakpoint
- AREA Cpu_Breakpoint, CODE, READONLY
+; Force ARM mode for this section, as MSFT assembler defaults to THUMB
+ AREA Cpu_Breakpoint, CODE, READONLY, ARM
+
+ ARM
;/**
; Generates a breakpoint on the CPU.
diff --git a/MdePkg/Library/BaseLib/BaseLib.inf b/MdePkg/Library/BaseLib/BaseLib.inf
index fbfb0063b75f..3c07e6bad977 100644
--- a/MdePkg/Library/BaseLib/BaseLib.inf
+++ b/MdePkg/Library/BaseLib/BaseLib.inf
@@ -824,8 +824,9 @@ [Sources.EBC]
[Sources.ARM]
Arm/InternalSwitchStack.c
Arm/Unaligned.c
- Math64.c | RVCT
-
+ Math64.c | RVCT
+ Math64.c | MSFT
+
Arm/SwitchStack.asm | RVCT
Arm/SetJumpLongJump.asm | RVCT
Arm/DisableInterrupts.asm | RVCT
@@ -834,7 +835,16 @@ [Sources.ARM]
Arm/CpuPause.asm | RVCT
Arm/CpuBreakpoint.asm | RVCT
Arm/MemoryFence.asm | RVCT
-
+
+ Arm/SwitchStack.asm | MSFT
+ Arm/SetJumpLongJump.asm | MSFT
+ Arm/DisableInterrupts.asm | MSFT
+ Arm/EnableInterrupts.asm | MSFT
+ Arm/GetInterruptsState.asm | MSFT
+ Arm/CpuPause.asm | MSFT
+ Arm/CpuBreakpoint.asm | MSFT
+ Arm/MemoryFence.asm | MSFT
+
Arm/Math64.S | GCC
Arm/SwitchStack.S | GCC
Arm/EnableInterrupts.S | GCC
--
2.9.3.windows.2
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v5 4/6] ArmPkg/Library/CompilerIntrinsicsLib: Enable VS2017/ARM builds
2018-01-12 13:33 [PATCH v5 0/6] Add ARM support for VS2017 Pete Batard
` (2 preceding siblings ...)
2018-01-12 13:33 ` [PATCH v5 3/6] MdePkg/Library/BaseLib: Enable VS2017/ARM builds Pete Batard
@ 2018-01-12 13:33 ` Pete Batard
2018-01-15 12:07 ` Ard Biesheuvel
2018-01-12 13:33 ` [PATCH v5 5/6] MdePkg/Include: Add VA list support for VS2017/ARM Pete Batard
` (2 subsequent siblings)
6 siblings, 1 reply; 12+ messages in thread
From: Pete Batard @ 2018-01-12 13:33 UTC (permalink / raw)
To: edk2-devel; +Cc: liming.gao, ard.biesheuvel, eugene
Introduce CRT assembly replacements for __rt_sdiv, __rt_udiv,
__rt_udiv64, __rt_sdiv64, __rt_srsh (by reusing the RVCT code)
as well as memcpy and memset.
For MSFT compatibility, some of the code needs to be explicitly
forced to ARM, and the /oldit assembly flag needs to be added.
Also, while RVCT_ASM_EXPORT macro invocations have been removed,
the replacement code is designed to be as close as possible to
the one that would have been generated if using the macros.
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Pete Batard <pete@akeo.ie>
---
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 +++++++++++++++
7 files changed, 185 insertions(+), 32 deletions(-)
diff --git a/ArmPkg/Library/CompilerIntrinsicsLib/Arm/div.asm b/ArmPkg/Library/CompilerIntrinsicsLib/Arm/div.asm
index b539e516892d..f9e0107395f2 100644
--- a/ArmPkg/Library/CompilerIntrinsicsLib/Arm/div.asm
+++ b/ArmPkg/Library/CompilerIntrinsicsLib/Arm/div.asm
@@ -1,6 +1,7 @@
//------------------------------------------------------------------------------
//
// Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
+// Copyright (c) 2018, Pete Batard. All rights reserved.<BR>
//
// This program and the accompanying materials
// are licensed and made available under the terms and conditions of the BSD License
@@ -17,18 +18,19 @@
EXPORT __aeabi_uidivmod
EXPORT __aeabi_idiv
EXPORT __aeabi_idivmod
+ EXPORT __rt_udiv
+ EXPORT __rt_sdiv
AREA Math, CODE, READONLY
;
;UINT32
;EFIAPI
-;__aeabi_uidivmode (
-; IN UINT32 Dividen
+;__aeabi_uidivmod (
+; IN UINT32 Dividend
; IN UINT32 Divisor
; );
;
-
__aeabi_uidiv
__aeabi_uidivmod
RSBS r12, r1, r0, LSR #4
@@ -40,10 +42,40 @@ __aeabi_uidivmod
B __arm_div_large
;
+;UINT64
+;EFIAPI
+;__rt_udiv (
+; IN UINT32 Divisor,
+; IN UINT32 Dividend
+; );
+;
+__rt_udiv
+ ; Swap R0 and R1
+ MOV r12, r0
+ MOV r0, r1
+ MOV r1, r12
+ B __aeabi_uidivmod
+
+;
+;UINT64
+;EFIAPI
+;__rt_sdiv (
+; IN INT32 Divisor,
+; IN INT32 Dividend
+; );
+;
+__rt_sdiv
+ ; Swap R0 and R1
+ MOV r12, r0
+ MOV r0, r1
+ MOV r1, r12
+ B __aeabi_idivmod
+
+;
;INT32
;EFIAPI
-;__aeabi_idivmode (
-; IN INT32 Dividen
+;__aeabi_idivmod (
+; IN INT32 Dividend
; IN INT32 Divisor
; );
;
@@ -152,4 +184,3 @@ __aeabi_idiv0
BX r14
END
-
diff --git a/ArmPkg/Library/CompilerIntrinsicsLib/Arm/ldivmod.asm b/ArmPkg/Library/CompilerIntrinsicsLib/Arm/ldivmod.asm
index c71bd59e4520..115a2b9c0e3c 100644
--- a/ArmPkg/Library/CompilerIntrinsicsLib/Arm/ldivmod.asm
+++ b/ArmPkg/Library/CompilerIntrinsicsLib/Arm/ldivmod.asm
@@ -1,6 +1,7 @@
//------------------------------------------------------------------------------
//
// Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
+// Copyright (c) 2018, Pete Batard. All rights reserved.<BR>
//
// This program and the accompanying materials
// are licensed and made available under the terms and conditions of the BSD License
@@ -13,20 +14,41 @@
//------------------------------------------------------------------------------
- EXTERN __aeabi_uldivmod
+ IMPORT __aeabi_uldivmod
+ EXPORT __aeabi_ldivmod
+ EXPORT __rt_sdiv64
- INCLUDE AsmMacroExport.inc
+ AREA s___aeabi_ldivmod, CODE, READONLY, ARM
+
+ ARM
;
-;UINT32
+;INT64
;EFIAPI
-;__aeabi_uidivmode (
-; IN UINT32 Dividen
-; IN UINT32 Divisor
+;__rt_sdiv64 (
+; IN INT64 Divisor
+; IN INT64 Dividend
; );
;
+__rt_sdiv64
+ ; Swap r0-r1 and r2-r3
+ MOV r12, r0
+ MOV r0, r2
+ MOV r2, r12
+ MOV r12, r1
+ MOV r1, r3
+ MOV r3, r12
+ B __aeabi_ldivmod
- RVCT_ASM_EXPORT __aeabi_ldivmod
+;
+;INT64
+;EFIAPI
+;__aeabi_ldivmod (
+; IN INT64 Dividend
+; IN INT64 Divisor
+; );
+;
+__aeabi_ldivmod
PUSH {r4,lr}
ASRS r4,r1,#1
EOR r4,r4,r3,LSR #1
@@ -39,7 +61,7 @@ L_Test1
RSBS r2,r2,#0
RSC r3,r3,#0
L_Test2
- BL __aeabi_uldivmod ;
+ BL __aeabi_uldivmod
TST r4,#0x40000000
BEQ L_Test3
RSBS r0,r0,#0
@@ -53,5 +75,3 @@ L_Exit
POP {r4,pc}
END
-
-
diff --git a/ArmPkg/Library/CompilerIntrinsicsLib/Arm/llsr.asm b/ArmPkg/Library/CompilerIntrinsicsLib/Arm/llsr.asm
index 881db106d9d7..abfd7ab64a79 100644
--- a/ArmPkg/Library/CompilerIntrinsicsLib/Arm/llsr.asm
+++ b/ArmPkg/Library/CompilerIntrinsicsLib/Arm/llsr.asm
@@ -1,6 +1,7 @@
//------------------------------------------------------------------------------
//
// Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
+// Copyright (c) 2018, Pete Batard. All rights reserved.<BR>
//
// This program and the accompanying materials
// are licensed and made available under the terms and conditions of the BSD License
@@ -12,32 +13,33 @@
//
//------------------------------------------------------------------------------
+ EXPORT __aeabi_llsr
+ EXPORT __rt_srsh
+ AREA s___aeabi_llsr, CODE, READONLY, ARM
- INCLUDE AsmMacroExport.inc
+ ARM
;
;VOID
;EFIAPI
;__aeabi_llsr (
-; IN VOID *Destination,
-; IN VOID *Source,
-; IN UINT32 Size
-; );
+; IN UINT64 Value,
+; IN UINT32 Shift
+;)
;
- RVCT_ASM_EXPORT __aeabi_llsr
+__aeabi_llsr
+__rt_srsh
SUBS r3,r2,#0x20
- BPL {pc} + 0x18 ; 0x1c
+ BPL __aeabi_llsr_label1
RSB r3,r2,#0x20
LSR r0,r0,r2
ORR r0,r0,r1,LSL r3
LSR r1,r1,r2
BX lr
+__aeabi_llsr_label1
LSR r0,r1,r3
MOV r1,#0
BX lr
END
-
-
-
diff --git a/ArmPkg/Library/CompilerIntrinsicsLib/Arm/uldiv.asm b/ArmPkg/Library/CompilerIntrinsicsLib/Arm/uldiv.asm
index 6b6184ebd3fc..aedaac8c6c7f 100644
--- a/ArmPkg/Library/CompilerIntrinsicsLib/Arm/uldiv.asm
+++ b/ArmPkg/Library/CompilerIntrinsicsLib/Arm/uldiv.asm
@@ -1,6 +1,7 @@
//------------------------------------------------------------------------------
//
// Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
+// Copyright (c) 2018, Pete Batard. All rights reserved.<BR>
//
// This program and the accompanying materials
// are licensed and made available under the terms and conditions of the BSD License
@@ -13,9 +14,30 @@
//------------------------------------------------------------------------------
+ EXPORT __aeabi_uldivmod
+ EXPORT __rt_udiv64
+ AREA s___aeabi_uldivmod, CODE, READONLY, ARM
- INCLUDE AsmMacroExport.inc
+ ARM
+
+;
+;UINT64
+;EFIAPI
+;__rt_udiv64 (
+; IN UINT64 Divisor
+; IN UINT64 Dividend
+; )
+;
+__rt_udiv64
+ ; Swap r0-r1 and r2-r3
+ mov r12, r0
+ mov r0, r2
+ mov r2, r12
+ mov r12, r1
+ mov r1, r3
+ mov r3, r12
+ b __aeabi_uldivmod
;
;UINT64
@@ -25,7 +47,7 @@
; IN UINT64 Divisor
; )
;
- RVCT_ASM_EXPORT __aeabi_uldivmod
+__aeabi_uldivmod
stmdb sp!, {r4, r5, r6, lr}
mov r4, r1
mov r5, r0
@@ -261,7 +283,6 @@ _ll_div0
b __aeabi_ldiv0
__aeabi_ldiv0
- BX r14
+ bx r14
END
-
diff --git a/ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf b/ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf
index 44333141a70a..14e88da7ce06 100644
--- a/ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf
+++ b/ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf
@@ -23,8 +23,12 @@ [Defines]
LIBRARY_CLASS = CompilerIntrinsicsLib
[Sources]
- memcpy.c
- memset.c
+ memcpy.c | RVCT
+ memcpy.c | GCC
+ memcpy_ms.c | MSFT
+ memset.c | RVCT
+ memset.c | GCC
+ memset_ms.c | MSFT
[Sources.ARM]
Arm/mullu.asm | RVCT
@@ -94,6 +98,10 @@ [Sources.ARM]
Arm/llsr.S | GCC
Arm/llsl.S | GCC
+ Arm/div.asm | MSFT
+ Arm/uldiv.asm | MSFT
+ Arm/ldivmod.asm | MSFT
+ Arm/llsr.asm | MSFT
[Packages]
MdePkg/MdePkg.dec
@@ -101,3 +109,7 @@ [Packages]
[LibraryClasses]
+[BuildOptions]
+ MSFT:*_*_ARM_CC_FLAGS = /GL-
+ MSFT:*_*_ARM_ASM_FLAGS = /oldit
+ MSFT:*_*_AARCH64_CC_FLAGS = /GL-
diff --git a/ArmPkg/Library/CompilerIntrinsicsLib/memcpy_ms.c b/ArmPkg/Library/CompilerIntrinsicsLib/memcpy_ms.c
new file mode 100644
index 000000000000..90bbbb930d31
--- /dev/null
+++ b/ArmPkg/Library/CompilerIntrinsicsLib/memcpy_ms.c
@@ -0,0 +1,34 @@
+//------------------------------------------------------------------------------
+//
+// Copyright (c) 2017, Pete Batard. All rights reserved.<BR>
+//
+// This program and the accompanying materials are licensed and made
+// available under the terms and conditions of the BSD License which
+// accompanies this distribution. The full text of the license may be
+// found at http://opensource.org/licenses/bsd-license.php
+//
+// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR
+// IMPLIED.
+//
+//------------------------------------------------------------------------------
+
+#if defined(_M_ARM64)
+typedef unsigned __int64 size_t;
+#else
+typedef unsigned __int32 size_t;
+#endif
+
+void* memcpy(void *, const void *, size_t);
+#pragma intrinsic(memcpy)
+#pragma function(memcpy)
+void* memcpy(void *dest, const void *src, size_t n)
+{
+ unsigned char *d = dest;
+ unsigned char const *s = src;
+
+ while (n--)
+ *d++ = *s++;
+
+ return dest;
+}
diff --git a/ArmPkg/Library/CompilerIntrinsicsLib/memset_ms.c b/ArmPkg/Library/CompilerIntrinsicsLib/memset_ms.c
new file mode 100644
index 000000000000..64205e5d1012
--- /dev/null
+++ b/ArmPkg/Library/CompilerIntrinsicsLib/memset_ms.c
@@ -0,0 +1,33 @@
+//------------------------------------------------------------------------------
+//
+// Copyright (c) 2017, Pete Batard. All rights reserved.<BR>
+//
+// This program and the accompanying materials are licensed and made
+// available under the terms and conditions of the BSD License which
+// accompanies this distribution. The full text of the license may be
+// found at http://opensource.org/licenses/bsd-license.php
+//
+// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR
+// IMPLIED.
+//
+//------------------------------------------------------------------------------
+
+#if defined(_M_ARM64)
+typedef unsigned __int64 size_t;
+#else
+typedef unsigned __int32 size_t;
+#endif
+
+void* memset(void *, int, size_t);
+#pragma intrinsic(memset)
+#pragma function(memset)
+void *memset(void *s, int c, size_t n)
+{
+ unsigned char *d = s;
+
+ while (n--)
+ *d++ = (unsigned char)c;
+
+ return s;
+}
--
2.9.3.windows.2
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v5 4/6] ArmPkg/Library/CompilerIntrinsicsLib: Enable VS2017/ARM builds
2018-01-12 13:33 ` [PATCH v5 4/6] ArmPkg/Library/CompilerIntrinsicsLib: " Pete Batard
@ 2018-01-15 12:07 ` Ard Biesheuvel
0 siblings, 0 replies; 12+ messages in thread
From: Ard Biesheuvel @ 2018-01-15 12:07 UTC (permalink / raw)
To: Pete Batard; +Cc: edk2-devel@lists.01.org, Gao, Liming, Cohen, Eugene
On 12 January 2018 at 13:33, Pete Batard <pete@akeo.ie> wrote:
> Introduce CRT assembly replacements for __rt_sdiv, __rt_udiv,
> __rt_udiv64, __rt_sdiv64, __rt_srsh (by reusing the RVCT code)
> as well as memcpy and memset.
> For MSFT compatibility, some of the code needs to be explicitly
> forced to ARM, and the /oldit assembly flag needs to be added.
> Also, while RVCT_ASM_EXPORT macro invocations have been removed,
> the replacement code is designed to be as close as possible to
> the one that would have been generated if using the macros.
>
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Pete Batard <pete@akeo.ie>
Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
> ---
> 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 +++++++++++++++
> 7 files changed, 185 insertions(+), 32 deletions(-)
>
> diff --git a/ArmPkg/Library/CompilerIntrinsicsLib/Arm/div.asm b/ArmPkg/Library/CompilerIntrinsicsLib/Arm/div.asm
> index b539e516892d..f9e0107395f2 100644
> --- a/ArmPkg/Library/CompilerIntrinsicsLib/Arm/div.asm
> +++ b/ArmPkg/Library/CompilerIntrinsicsLib/Arm/div.asm
> @@ -1,6 +1,7 @@
> //------------------------------------------------------------------------------
> //
> // Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
> +// Copyright (c) 2018, Pete Batard. All rights reserved.<BR>
> //
> // This program and the accompanying materials
> // are licensed and made available under the terms and conditions of the BSD License
> @@ -17,18 +18,19 @@
> EXPORT __aeabi_uidivmod
> EXPORT __aeabi_idiv
> EXPORT __aeabi_idivmod
> + EXPORT __rt_udiv
> + EXPORT __rt_sdiv
>
> AREA Math, CODE, READONLY
>
> ;
> ;UINT32
> ;EFIAPI
> -;__aeabi_uidivmode (
> -; IN UINT32 Dividen
> +;__aeabi_uidivmod (
> +; IN UINT32 Dividend
> ; IN UINT32 Divisor
> ; );
> ;
> -
> __aeabi_uidiv
> __aeabi_uidivmod
> RSBS r12, r1, r0, LSR #4
> @@ -40,10 +42,40 @@ __aeabi_uidivmod
> B __arm_div_large
>
> ;
> +;UINT64
> +;EFIAPI
> +;__rt_udiv (
> +; IN UINT32 Divisor,
> +; IN UINT32 Dividend
> +; );
> +;
> +__rt_udiv
> + ; Swap R0 and R1
> + MOV r12, r0
> + MOV r0, r1
> + MOV r1, r12
> + B __aeabi_uidivmod
> +
> +;
> +;UINT64
> +;EFIAPI
> +;__rt_sdiv (
> +; IN INT32 Divisor,
> +; IN INT32 Dividend
> +; );
> +;
> +__rt_sdiv
> + ; Swap R0 and R1
> + MOV r12, r0
> + MOV r0, r1
> + MOV r1, r12
> + B __aeabi_idivmod
> +
> +;
> ;INT32
> ;EFIAPI
> -;__aeabi_idivmode (
> -; IN INT32 Dividen
> +;__aeabi_idivmod (
> +; IN INT32 Dividend
> ; IN INT32 Divisor
> ; );
> ;
> @@ -152,4 +184,3 @@ __aeabi_idiv0
> BX r14
>
> END
> -
> diff --git a/ArmPkg/Library/CompilerIntrinsicsLib/Arm/ldivmod.asm b/ArmPkg/Library/CompilerIntrinsicsLib/Arm/ldivmod.asm
> index c71bd59e4520..115a2b9c0e3c 100644
> --- a/ArmPkg/Library/CompilerIntrinsicsLib/Arm/ldivmod.asm
> +++ b/ArmPkg/Library/CompilerIntrinsicsLib/Arm/ldivmod.asm
> @@ -1,6 +1,7 @@
> //------------------------------------------------------------------------------
> //
> // Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
> +// Copyright (c) 2018, Pete Batard. All rights reserved.<BR>
> //
> // This program and the accompanying materials
> // are licensed and made available under the terms and conditions of the BSD License
> @@ -13,20 +14,41 @@
> //------------------------------------------------------------------------------
>
>
> - EXTERN __aeabi_uldivmod
> + IMPORT __aeabi_uldivmod
> + EXPORT __aeabi_ldivmod
> + EXPORT __rt_sdiv64
>
> - INCLUDE AsmMacroExport.inc
> + AREA s___aeabi_ldivmod, CODE, READONLY, ARM
> +
> + ARM
>
> ;
> -;UINT32
> +;INT64
> ;EFIAPI
> -;__aeabi_uidivmode (
> -; IN UINT32 Dividen
> -; IN UINT32 Divisor
> +;__rt_sdiv64 (
> +; IN INT64 Divisor
> +; IN INT64 Dividend
> ; );
> ;
> +__rt_sdiv64
> + ; Swap r0-r1 and r2-r3
> + MOV r12, r0
> + MOV r0, r2
> + MOV r2, r12
> + MOV r12, r1
> + MOV r1, r3
> + MOV r3, r12
> + B __aeabi_ldivmod
>
> - RVCT_ASM_EXPORT __aeabi_ldivmod
> +;
> +;INT64
> +;EFIAPI
> +;__aeabi_ldivmod (
> +; IN INT64 Dividend
> +; IN INT64 Divisor
> +; );
> +;
> +__aeabi_ldivmod
> PUSH {r4,lr}
> ASRS r4,r1,#1
> EOR r4,r4,r3,LSR #1
> @@ -39,7 +61,7 @@ L_Test1
> RSBS r2,r2,#0
> RSC r3,r3,#0
> L_Test2
> - BL __aeabi_uldivmod ;
> + BL __aeabi_uldivmod
> TST r4,#0x40000000
> BEQ L_Test3
> RSBS r0,r0,#0
> @@ -53,5 +75,3 @@ L_Exit
> POP {r4,pc}
>
> END
> -
> -
> diff --git a/ArmPkg/Library/CompilerIntrinsicsLib/Arm/llsr.asm b/ArmPkg/Library/CompilerIntrinsicsLib/Arm/llsr.asm
> index 881db106d9d7..abfd7ab64a79 100644
> --- a/ArmPkg/Library/CompilerIntrinsicsLib/Arm/llsr.asm
> +++ b/ArmPkg/Library/CompilerIntrinsicsLib/Arm/llsr.asm
> @@ -1,6 +1,7 @@
> //------------------------------------------------------------------------------
> //
> // Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
> +// Copyright (c) 2018, Pete Batard. All rights reserved.<BR>
> //
> // This program and the accompanying materials
> // are licensed and made available under the terms and conditions of the BSD License
> @@ -12,32 +13,33 @@
> //
> //------------------------------------------------------------------------------
>
> + EXPORT __aeabi_llsr
> + EXPORT __rt_srsh
>
> + AREA s___aeabi_llsr, CODE, READONLY, ARM
>
> - INCLUDE AsmMacroExport.inc
> + ARM
>
> ;
> ;VOID
> ;EFIAPI
> ;__aeabi_llsr (
> -; IN VOID *Destination,
> -; IN VOID *Source,
> -; IN UINT32 Size
> -; );
> +; IN UINT64 Value,
> +; IN UINT32 Shift
> +;)
> ;
> - RVCT_ASM_EXPORT __aeabi_llsr
> +__aeabi_llsr
> +__rt_srsh
> SUBS r3,r2,#0x20
> - BPL {pc} + 0x18 ; 0x1c
> + BPL __aeabi_llsr_label1
> RSB r3,r2,#0x20
> LSR r0,r0,r2
> ORR r0,r0,r1,LSL r3
> LSR r1,r1,r2
> BX lr
> +__aeabi_llsr_label1
> LSR r0,r1,r3
> MOV r1,#0
> BX lr
>
> END
> -
> -
> -
> diff --git a/ArmPkg/Library/CompilerIntrinsicsLib/Arm/uldiv.asm b/ArmPkg/Library/CompilerIntrinsicsLib/Arm/uldiv.asm
> index 6b6184ebd3fc..aedaac8c6c7f 100644
> --- a/ArmPkg/Library/CompilerIntrinsicsLib/Arm/uldiv.asm
> +++ b/ArmPkg/Library/CompilerIntrinsicsLib/Arm/uldiv.asm
> @@ -1,6 +1,7 @@
> //------------------------------------------------------------------------------
> //
> // Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
> +// Copyright (c) 2018, Pete Batard. All rights reserved.<BR>
> //
> // This program and the accompanying materials
> // are licensed and made available under the terms and conditions of the BSD License
> @@ -13,9 +14,30 @@
> //------------------------------------------------------------------------------
>
>
> + EXPORT __aeabi_uldivmod
> + EXPORT __rt_udiv64
>
> + AREA s___aeabi_uldivmod, CODE, READONLY, ARM
>
> - INCLUDE AsmMacroExport.inc
> + ARM
> +
> +;
> +;UINT64
> +;EFIAPI
> +;__rt_udiv64 (
> +; IN UINT64 Divisor
> +; IN UINT64 Dividend
> +; )
> +;
> +__rt_udiv64
> + ; Swap r0-r1 and r2-r3
> + mov r12, r0
> + mov r0, r2
> + mov r2, r12
> + mov r12, r1
> + mov r1, r3
> + mov r3, r12
> + b __aeabi_uldivmod
>
> ;
> ;UINT64
> @@ -25,7 +47,7 @@
> ; IN UINT64 Divisor
> ; )
> ;
> - RVCT_ASM_EXPORT __aeabi_uldivmod
> +__aeabi_uldivmod
> stmdb sp!, {r4, r5, r6, lr}
> mov r4, r1
> mov r5, r0
> @@ -261,7 +283,6 @@ _ll_div0
> b __aeabi_ldiv0
>
> __aeabi_ldiv0
> - BX r14
> + bx r14
>
> END
> -
> diff --git a/ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf b/ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf
> index 44333141a70a..14e88da7ce06 100644
> --- a/ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf
> +++ b/ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf
> @@ -23,8 +23,12 @@ [Defines]
> LIBRARY_CLASS = CompilerIntrinsicsLib
>
> [Sources]
> - memcpy.c
> - memset.c
> + memcpy.c | RVCT
> + memcpy.c | GCC
> + memcpy_ms.c | MSFT
> + memset.c | RVCT
> + memset.c | GCC
> + memset_ms.c | MSFT
>
> [Sources.ARM]
> Arm/mullu.asm | RVCT
> @@ -94,6 +98,10 @@ [Sources.ARM]
> Arm/llsr.S | GCC
> Arm/llsl.S | GCC
>
> + Arm/div.asm | MSFT
> + Arm/uldiv.asm | MSFT
> + Arm/ldivmod.asm | MSFT
> + Arm/llsr.asm | MSFT
>
> [Packages]
> MdePkg/MdePkg.dec
> @@ -101,3 +109,7 @@ [Packages]
>
> [LibraryClasses]
>
> +[BuildOptions]
> + MSFT:*_*_ARM_CC_FLAGS = /GL-
> + MSFT:*_*_ARM_ASM_FLAGS = /oldit
> + MSFT:*_*_AARCH64_CC_FLAGS = /GL-
> diff --git a/ArmPkg/Library/CompilerIntrinsicsLib/memcpy_ms.c b/ArmPkg/Library/CompilerIntrinsicsLib/memcpy_ms.c
> new file mode 100644
> index 000000000000..90bbbb930d31
> --- /dev/null
> +++ b/ArmPkg/Library/CompilerIntrinsicsLib/memcpy_ms.c
> @@ -0,0 +1,34 @@
> +//------------------------------------------------------------------------------
> +//
> +// Copyright (c) 2017, Pete Batard. All rights reserved.<BR>
> +//
> +// This program and the accompanying materials are licensed and made
> +// available under the terms and conditions of the BSD License which
> +// accompanies this distribution. The full text of the license may be
> +// found at http://opensource.org/licenses/bsd-license.php
> +//
> +// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> +// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR
> +// IMPLIED.
> +//
> +//------------------------------------------------------------------------------
> +
> +#if defined(_M_ARM64)
> +typedef unsigned __int64 size_t;
> +#else
> +typedef unsigned __int32 size_t;
> +#endif
> +
> +void* memcpy(void *, const void *, size_t);
> +#pragma intrinsic(memcpy)
> +#pragma function(memcpy)
> +void* memcpy(void *dest, const void *src, size_t n)
> +{
> + unsigned char *d = dest;
> + unsigned char const *s = src;
> +
> + while (n--)
> + *d++ = *s++;
> +
> + return dest;
> +}
> diff --git a/ArmPkg/Library/CompilerIntrinsicsLib/memset_ms.c b/ArmPkg/Library/CompilerIntrinsicsLib/memset_ms.c
> new file mode 100644
> index 000000000000..64205e5d1012
> --- /dev/null
> +++ b/ArmPkg/Library/CompilerIntrinsicsLib/memset_ms.c
> @@ -0,0 +1,33 @@
> +//------------------------------------------------------------------------------
> +//
> +// Copyright (c) 2017, Pete Batard. All rights reserved.<BR>
> +//
> +// This program and the accompanying materials are licensed and made
> +// available under the terms and conditions of the BSD License which
> +// accompanies this distribution. The full text of the license may be
> +// found at http://opensource.org/licenses/bsd-license.php
> +//
> +// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> +// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR
> +// IMPLIED.
> +//
> +//------------------------------------------------------------------------------
> +
> +#if defined(_M_ARM64)
> +typedef unsigned __int64 size_t;
> +#else
> +typedef unsigned __int32 size_t;
> +#endif
> +
> +void* memset(void *, int, size_t);
> +#pragma intrinsic(memset)
> +#pragma function(memset)
> +void *memset(void *s, int c, size_t n)
> +{
> + unsigned char *d = s;
> +
> + while (n--)
> + *d++ = (unsigned char)c;
> +
> + return s;
> +}
> --
> 2.9.3.windows.2
>
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v5 5/6] MdePkg/Include: Add VA list support for VS2017/ARM
2018-01-12 13:33 [PATCH v5 0/6] Add ARM support for VS2017 Pete Batard
` (3 preceding siblings ...)
2018-01-12 13:33 ` [PATCH v5 4/6] ArmPkg/Library/CompilerIntrinsicsLib: " Pete Batard
@ 2018-01-12 13:33 ` Pete Batard
2018-01-12 13:33 ` [PATCH v5 6/6] BaseTools/Conf: Add VS2017/ARM support Pete Batard
2018-01-25 10:27 ` [PATCH v5 0/6] Add ARM support for VS2017 Gao, Liming
6 siblings, 0 replies; 12+ messages in thread
From: Pete Batard @ 2018-01-12 13:33 UTC (permalink / raw)
To: edk2-devel; +Cc: liming.gao, ard.biesheuvel, eugene
VA_START, VA_END and VA_COPY are the same as the generic macros.
VA_ARG was reverse engineered from MS ARM assembly output.
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Pete Batard <pete@akeo.ie>
---
MdePkg/Include/Base.h | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/MdePkg/Include/Base.h b/MdePkg/Include/Base.h
index 29db8a253e2f..7152ccda9764 100644
--- a/MdePkg/Include/Base.h
+++ b/MdePkg/Include/Base.h
@@ -660,6 +660,19 @@ struct _LIST_ENTRY {
#define VA_COPY(Dest, Start) __va_copy (Dest, Start)
+#elif defined(_M_ARM)
+//
+// MSFT ARM variable argument list support.
+// Same as the generic macros below, except for VA_ARG that needs extra adjustment.
+//
+
+typedef char* VA_LIST;
+
+#define VA_START(Marker, Parameter) (Marker = (VA_LIST) ((UINTN) & (Parameter) + _INT_SIZE_OF(Parameter)))
+#define VA_ARG(Marker, TYPE) (*(TYPE *) ((Marker += _INT_SIZE_OF(TYPE) + ((-(INTN)Marker) & (sizeof(TYPE) - 1))) - _INT_SIZE_OF (TYPE)))
+#define VA_END(Marker) (Marker = (VA_LIST) 0)
+#define VA_COPY(Dest, Start) ((void)((Dest) = (Start)))
+
#elif defined(__GNUC__)
#if defined(MDE_CPU_X64) && !defined(NO_MSABI_VA_FUNCS)
--
2.9.3.windows.2
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v5 6/6] BaseTools/Conf: Add VS2017/ARM support
2018-01-12 13:33 [PATCH v5 0/6] Add ARM support for VS2017 Pete Batard
` (4 preceding siblings ...)
2018-01-12 13:33 ` [PATCH v5 5/6] MdePkg/Include: Add VA list support for VS2017/ARM Pete Batard
@ 2018-01-12 13:33 ` Pete Batard
2018-01-25 10:27 ` [PATCH v5 0/6] Add ARM support for VS2017 Gao, Liming
6 siblings, 0 replies; 12+ messages in thread
From: Pete Batard @ 2018-01-12 13:33 UTC (permalink / raw)
To: edk2-devel; +Cc: liming.gao, ard.biesheuvel, eugene
We duplicate the Assembly-Code-File section from build_rule.template
because --convert-hex cannot be used with the MSFT ARM assembler.
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Pete Batard <pete@akeo.ie>
---
BaseTools/Conf/build_rule.template | 31 +++++++++++++++++++-
BaseTools/Conf/tools_def.template | 31 ++++++++++++++++++++
2 files changed, 61 insertions(+), 1 deletion(-)
diff --git a/BaseTools/Conf/build_rule.template b/BaseTools/Conf/build_rule.template
index 3e6aa8ff0f34..6ea14fb7aa02 100755
--- a/BaseTools/Conf/build_rule.template
+++ b/BaseTools/Conf/build_rule.template
@@ -182,7 +182,6 @@
<Command>
-
[Assembly-Code-File.COMMON.COMMON]
<InputFile.MSFT, InputFile.INTEL, InputFile.RVCT>
?.asm, ?.Asm, ?.ASM
@@ -207,6 +206,36 @@
# For RVCTCYGWIN ASM_FLAGS must be first to work around pathing issues
"$(ASM)" $(ASM_FLAGS) -o ${dst} $(INC) ${d_path}(+)${s_base}.iii
+[Assembly-Code-File.COMMON.ARM]
+ # Remove --convert-hex for ARM as it breaks MSFT assemblers
+ <InputFile.MSFT, InputFile.INTEL, InputFile.RVCT>
+ ?.asm, ?.Asm, ?.ASM
+
+ <InputFile.GCC, InputFile.GCCLD>
+ ?.S, ?.s
+
+ <ExtraDependency>
+ $(MAKE_FILE)
+
+ <OutputFile>
+ $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.obj
+
+ <Command.INTEL>
+ "$(PP)" $(PP_FLAGS) $(INC) ${src} > ${d_path}(+)${s_base}.i
+ Trim --source-code --convert-hex --trim-long -o ${d_path}(+)${s_base}.iii ${d_path}(+)${s_base}.i
+ "$(ASM)" /Fo${dst} $(ASM_FLAGS) /I${s_path} $(INC) ${d_path}(+)${s_base}.iii
+
+ <Command.MSFT>
+ "$(PP)" $(PP_FLAGS) $(INC) ${src} > ${d_path}(+)${s_base}.i
+ Trim --source-code --trim-long -o ${d_path}(+)${s_base}.iii ${d_path}(+)${s_base}.i
+ "$(ASM)" /Fo${dst} $(ASM_FLAGS) /I${s_path} $(INC) ${d_path}(+)${s_base}.iii
+
+ <Command.GCC, Command.GCCLD, Command.RVCT>
+ "$(PP)" $(PP_FLAGS) $(INC) ${src} > ${d_path}(+)${s_base}.i
+ Trim --trim-long --source-code -o ${d_path}(+)${s_base}.iii ${d_path}(+)${s_base}.i
+ # For RVCTCYGWIN ASM_FLAGS must be first to work around pathing issues
+ "$(ASM)" $(ASM_FLAGS) -o ${dst} $(INC) ${d_path}(+)${s_base}.iii
+
[Nasm-Assembly-Code-File.COMMON.COMMON]
<InputFile>
?.nasm
diff --git a/BaseTools/Conf/tools_def.template b/BaseTools/Conf/tools_def.template
index 98ab6dd45e81..f76c4da05938 100755
--- a/BaseTools/Conf/tools_def.template
+++ b/BaseTools/Conf/tools_def.template
@@ -79,6 +79,7 @@ DEFINE VS2017_HOST = x86
DEFINE VS2017_BIN_HOST = DEF(VS2017_BIN)\HostDEF(VS2017_HOST)\DEF(VS2017_HOST)
DEFINE VS2017_BIN_IA32 = DEF(VS2017_BIN)\HostDEF(VS2017_HOST)\x86
DEFINE VS2017_BIN_X64 = DEF(VS2017_BIN)\HostDEF(VS2017_HOST)\x64
+DEFINE VS2017_BIN_ARM = DEF(VS2017_BIN)\HostDEF(VS2017_HOST)\arm
DEFINE WINSDK_BIN = ENV(WINSDK_PREFIX)
DEFINE WINSDKx86_BIN = ENV(WINSDKx86_PREFIX)
@@ -335,6 +336,9 @@ DEFINE DTC_BIN = ENV(DTC_PREFIX)dtc
# Required to build platforms or ACPI tables:
# Intel(r) ACPI Compiler (iasl.exe) from
# https://acpica.org/downloads
+# Note:
+# Building of XIP firmware images for ARM is not currently supported (only applications).
+# /FILEALIGN:4096 and other changes are needed for ARM firmware builds.
# DDK3790 -win32- Requires:
# Microsoft Windows Server 2003 Driver Development Kit (Microsoft WINDDK) version 3790.1830
# Optional:
@@ -4169,6 +4173,33 @@ NOOPT_VS2017_X64_NASM_FLAGS = -O0 -f win64 -g
RELEASE_VS2017_X64_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /IGNORE:4001 /IGNORE:4254 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /SECTION:.xdata,D /SECTION:.pdata,D /Machine:X64 /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER /MERGE:.rdata=.data
NOOPT_VS2017_X64_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /IGNORE:4001 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /SECTION:.xdata,D /SECTION:.pdata,D /Machine:X64 /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER /DEBUG
+#################
+# ARM definitions
+#################
+*_VS2017_ARM_CC_PATH = DEF(VS2017_BIN_ARM)\cl.exe
+*_VS2017_ARM_VFRPP_PATH = DEF(VS2017_BIN_ARM)\cl.exe
+*_VS2017_ARM_SLINK_PATH = DEF(VS2017_BIN_ARM)\lib.exe
+*_VS2017_ARM_DLINK_PATH = DEF(VS2017_BIN_ARM)\link.exe
+*_VS2017_ARM_APP_PATH = DEF(VS2017_BIN_ARM)\cl.exe
+*_VS2017_ARM_PP_PATH = DEF(VS2017_BIN_ARM)\cl.exe
+*_VS2017_ARM_ASM_PATH = DEF(VS2017_BIN_ARM)\armasm.exe
+*_VS2017_ARM_ASLCC_PATH = DEF(VS2017_BIN_ARM)\cl.exe
+*_VS2017_ARM_ASLPP_PATH = DEF(VS2017_BIN_ARM)\cl.exe
+*_VS2017_ARM_ASLDLINK_PATH = DEF(VS2017_BIN_ARM)\link.exe
+
+ *_VS2017_ARM_MAKE_FLAGS = /nologo
+ DEBUG_VS2017_ARM_CC_FLAGS = /nologo /c /WX /GS- /W4 /Gs32768 /D UNICODE /O1b2 /GL /FIAutoGen.h /EHs-c- /GR- /GF /Gy /Zi /Gm /Gw /Oi-
+RELEASE_VS2017_ARM_CC_FLAGS = /nologo /c /WX /GS- /W4 /Gs32768 /D UNICODE /O1b2 /GL /FIAutoGen.h /EHs-c- /GR- /GF /Gw /Oi-
+NOOPT_VS2017_ARM_CC_FLAGS = /nologo /c /WX /GS- /W4 /Gs32768 /D UNICODE /FIAutoGen.h /EHs-c- /GR- /GF /Gy /Zi /Gm /Od /Oi-
+
+ DEBUG_VS2017_ARM_ASM_FLAGS = /nologo /g
+RELEASE_VS2017_ARM_ASM_FLAGS = /nologo
+NOOPT_VS2017_ARM_ASM_FLAGS = /nologo
+
+ DEBUG_VS2017_ARM_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /IGNORE:4001 /OPT:REF /OPT:ICF=10 /MAP /SECTION:.xdata,D /SECTION:.pdata,D /MACHINE:ARM /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER /DEBUG
+RELEASE_VS2017_ARM_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /IGNORE:4001 /IGNORE:4254 /OPT:REF /OPT:ICF=10 /MAP /SECTION:.xdata,D /SECTION:.pdata,D /MACHINE:ARM /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER /MERGE:.rdata=.data
+NOOPT_VS2017_ARM_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /IGNORE:4001 /OPT:REF /OPT:ICF=10 /MAP /SECTION:.xdata,D /SECTION:.pdata,D /MACHINE:ARM /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER /DEBUG
+
##################
# EBC definitions
##################
--
2.9.3.windows.2
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v5 0/6] Add ARM support for VS2017
2018-01-12 13:33 [PATCH v5 0/6] Add ARM support for VS2017 Pete Batard
` (5 preceding siblings ...)
2018-01-12 13:33 ` [PATCH v5 6/6] BaseTools/Conf: Add VS2017/ARM support Pete Batard
@ 2018-01-25 10:27 ` Gao, Liming
2018-01-25 11:31 ` Pete Batard
6 siblings, 1 reply; 12+ messages in thread
From: Gao, Liming @ 2018-01-25 10:27 UTC (permalink / raw)
To: Pete Batard, edk2-devel@lists.01.org
Cc: ard.biesheuvel@linaro.org, eugene@hp.com
Pete:
The changes in BaseTools and MdePkg are good to me. You can add my R-B.
>-----Original Message-----
>From: Pete Batard [mailto:pete@akeo.ie]
>Sent: Friday, January 12, 2018 9:33 PM
>To: edk2-devel@lists.01.org
>Cc: Gao, Liming <liming.gao@intel.com>; ard.biesheuvel@linaro.org;
>eugene@hp.com
>Subject: [PATCH v5 0/6] Add ARM support for VS2017
>
>(Same as v4, except for the AREA names where we replaced the RVCT macros,
>in
>patch 4/6, so that it matches what would have been produced with the
>macros)
>
>
>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/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/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
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v5 0/6] Add ARM support for VS2017
2018-01-25 10:27 ` [PATCH v5 0/6] Add ARM support for VS2017 Gao, Liming
@ 2018-01-25 11:31 ` Pete Batard
2018-01-26 15:05 ` Gao, Liming
0 siblings, 1 reply; 12+ messages in thread
From: Pete Batard @ 2018-01-25 11:31 UTC (permalink / raw)
To: Gao, Liming, edk2-devel@lists.01.org
Cc: ard.biesheuvel@linaro.org, eugene@hp.com
Thanks Liming.
From the way you framed your comment, I'm not completely sure if
there's action still needed on my side...
Do I actually need to resubmit a patch set with "Reviewed By"?
Or, now that each patch should have flagged as reviewed, are we simply
supposed to wait for formal integration?
Regards,
/Pete
On 2018.01.25 10:27, Gao, Liming wrote:
> Pete:
> The changes in BaseTools and MdePkg are good to me. You can add my R-B.
>
>> -----Original Message-----
>> From: Pete Batard [mailto:pete@akeo.ie]
>> Sent: Friday, January 12, 2018 9:33 PM
>> To: edk2-devel@lists.01.org
>> Cc: Gao, Liming <liming.gao@intel.com>; ard.biesheuvel@linaro.org;
>> eugene@hp.com
>> Subject: [PATCH v5 0/6] Add ARM support for VS2017
>>
>> (Same as v4, except for the AREA names where we replaced the RVCT macros,
>> in
>> patch 4/6, so that it matches what would have been produced with the
>> macros)
>>
>>
>> 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/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/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
>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v5 0/6] Add ARM support for VS2017
2018-01-25 11:31 ` Pete Batard
@ 2018-01-26 15:05 ` Gao, Liming
2018-01-26 15:20 ` Ard Biesheuvel
0 siblings, 1 reply; 12+ messages in thread
From: Gao, Liming @ 2018-01-26 15:05 UTC (permalink / raw)
To: Pete Batard, edk2-devel@lists.01.org
Cc: ard.biesheuvel@linaro.org, eugene@hp.com
After the change in ArmPkg is reviewed, I will help push this patch serial.
> -----Original Message-----
> From: Pete Batard [mailto:pete@akeo.ie]
> Sent: Thursday, January 25, 2018 7:32 PM
> To: Gao, Liming <liming.gao@intel.com>; edk2-devel@lists.01.org
> Cc: ard.biesheuvel@linaro.org; eugene@hp.com
> Subject: Re: [PATCH v5 0/6] Add ARM support for VS2017
>
> Thanks Liming.
>
> From the way you framed your comment, I'm not completely sure if
> there's action still needed on my side...
>
> Do I actually need to resubmit a patch set with "Reviewed By"?
> Or, now that each patch should have flagged as reviewed, are we simply
> supposed to wait for formal integration?
>
> Regards,
>
> /Pete
>
> On 2018.01.25 10:27, Gao, Liming wrote:
> > Pete:
> > The changes in BaseTools and MdePkg are good to me. You can add my R-B.
> >
> >> -----Original Message-----
> >> From: Pete Batard [mailto:pete@akeo.ie]
> >> Sent: Friday, January 12, 2018 9:33 PM
> >> To: edk2-devel@lists.01.org
> >> Cc: Gao, Liming <liming.gao@intel.com>; ard.biesheuvel@linaro.org;
> >> eugene@hp.com
> >> Subject: [PATCH v5 0/6] Add ARM support for VS2017
> >>
> >> (Same as v4, except for the AREA names where we replaced the RVCT macros,
> >> in
> >> patch 4/6, so that it matches what would have been produced with the
> >> macros)
> >>
> >>
> >> 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/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/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
> >
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v5 0/6] Add ARM support for VS2017
2018-01-26 15:05 ` Gao, Liming
@ 2018-01-26 15:20 ` Ard Biesheuvel
0 siblings, 0 replies; 12+ messages in thread
From: Ard Biesheuvel @ 2018-01-26 15:20 UTC (permalink / raw)
To: Gao, Liming; +Cc: Pete Batard, edk2-devel@lists.01.org, eugene@hp.com
On 26 January 2018 at 15:05, Gao, Liming <liming.gao@intel.com> wrote:
> After the change in ArmPkg is reviewed, I will help push this patch serial.
>
That change is
Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Thanks.
>> -----Original Message-----
>> From: Pete Batard [mailto:pete@akeo.ie]
>> Sent: Thursday, January 25, 2018 7:32 PM
>> To: Gao, Liming <liming.gao@intel.com>; edk2-devel@lists.01.org
>> Cc: ard.biesheuvel@linaro.org; eugene@hp.com
>> Subject: Re: [PATCH v5 0/6] Add ARM support for VS2017
>>
>> Thanks Liming.
>>
>> From the way you framed your comment, I'm not completely sure if
>> there's action still needed on my side...
>>
>> Do I actually need to resubmit a patch set with "Reviewed By"?
>> Or, now that each patch should have flagged as reviewed, are we simply
>> supposed to wait for formal integration?
>>
>> Regards,
>>
>> /Pete
>>
>> On 2018.01.25 10:27, Gao, Liming wrote:
>> > Pete:
>> > The changes in BaseTools and MdePkg are good to me. You can add my R-B.
>> >
>> >> -----Original Message-----
>> >> From: Pete Batard [mailto:pete@akeo.ie]
>> >> Sent: Friday, January 12, 2018 9:33 PM
>> >> To: edk2-devel@lists.01.org
>> >> Cc: Gao, Liming <liming.gao@intel.com>; ard.biesheuvel@linaro.org;
>> >> eugene@hp.com
>> >> Subject: [PATCH v5 0/6] Add ARM support for VS2017
>> >>
>> >> (Same as v4, except for the AREA names where we replaced the RVCT macros,
>> >> in
>> >> patch 4/6, so that it matches what would have been produced with the
>> >> macros)
>> >>
>> >>
>> >> 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/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/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
>> >
>
> _______________________________________________
> edk2-devel mailing list
> edk2-devel@lists.01.org
> https://lists.01.org/mailman/listinfo/edk2-devel
^ permalink raw reply [flat|nested] 12+ messages in thread