[edk2] BaseTools/GCC AARCH64: force disable PIC code generation

Message ID 20170331083744.3964-1-ard.biesheuvel@linaro.org
State New
Headers show

Commit Message

Ard Biesheuvel March 31, 2017, 8:37 a.m.
As a security measure, some distro toolchains now default to PIC code
generation, allowing executables (as opposed to shared libraries) using
the objects to be built as PIE binaries, which can be loaded at a random
virtual offset.

However, our ELF to PE/COFF generation code does not deal with the
resulting relocation types (i.e., GOT based), and so the use of PIC code
leads to GenFw errors.

Given that
a) our non-PIC PE/COFF executables are already relocatable,
b) PIC code leads to all symbol references to be indirected via GOT
   entries containing absolute addresses, each requiring an entry in the
   relocation table,
c) the AArch64 ISA makes it perfectly feasible to built PIE executables
   from non-PIC code,

there is absolutely no upside to using PIC code for building EDK2 modules,
and so we're better off simply disabling it unconditionally.

Note that when running under the OS, the GOT has an additional advantage,
i.e., that all .text/.rodata pages remain clean and so can be shared between
processes. This does not apply to the UEFI environment, however.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

---
 ArmPkg/Drivers/ArmCpuLib/ArmCortexA15Lib/ArmCortexA15Lib.c            | 67 ----------------
 ArmPkg/Drivers/ArmCpuLib/ArmCortexA15Lib/ArmCortexA15Lib.inf          | 35 --------
 ArmPkg/Drivers/ArmCpuLib/ArmCortexA5xLib/AArch64/ArmCortexA5xHelper.S | 27 -------
 ArmPkg/Drivers/ArmCpuLib/ArmCortexA5xLib/ArmCortexA5xLib.c            | 84 --------------------
 ArmPkg/Drivers/ArmCpuLib/ArmCortexA5xLib/ArmCortexA5xLib.inf          | 38 ---------
 ArmPkg/Drivers/ArmCpuLib/ArmCortexA8Lib/ArmCortexA8Lib.c              | 41 ----------
 ArmPkg/Drivers/ArmCpuLib/ArmCortexA8Lib/ArmCortexA8Lib.inf            | 27 -------
 ArmPkg/Drivers/ArmCpuLib/ArmCortexA9Lib/ArmCortexA9Helper.S           | 23 ------
 ArmPkg/Drivers/ArmCpuLib/ArmCortexA9Lib/ArmCortexA9Helper.asm         | 29 -------
 ArmPkg/Drivers/ArmCpuLib/ArmCortexA9Lib/ArmCortexA9Lib.c              | 76 ------------------
 ArmPkg/Drivers/ArmCpuLib/ArmCortexA9Lib/ArmCortexA9Lib.inf            | 37 ---------
 ArmPkg/Drivers/ArmCpuLib/ArmCortexAEMv8Lib/ArmCortexAEMv8Lib.c        | 39 ---------
 ArmPkg/Drivers/ArmCpuLib/ArmCortexAEMv8Lib/ArmCortexAEMv8Lib.inf      | 34 --------
 BaseTools/Conf/tools_def.template                                     |  2 +-
 14 files changed, 1 insertion(+), 558 deletions(-)

-- 
2.9.3

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Comments

Ard Biesheuvel March 31, 2017, 8:38 a.m. | #1
Please disregard the bogus patch below


On 31 March 2017 at 09:37, Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote:
> As a security measure, some distro toolchains now default to PIC code

> generation, allowing executables (as opposed to shared libraries) using

> the objects to be built as PIE binaries, which can be loaded at a random

> virtual offset.

>

> However, our ELF to PE/COFF generation code does not deal with the

> resulting relocation types (i.e., GOT based), and so the use of PIC code

> leads to GenFw errors.

>

> Given that

> a) our non-PIC PE/COFF executables are already relocatable,

> b) PIC code leads to all symbol references to be indirected via GOT

>    entries containing absolute addresses, each requiring an entry in the

>    relocation table,

> c) the AArch64 ISA makes it perfectly feasible to built PIE executables

>    from non-PIC code,

>

> there is absolutely no upside to using PIC code for building EDK2 modules,

> and so we're better off simply disabling it unconditionally.

>

> Note that when running under the OS, the GOT has an additional advantage,

> i.e., that all .text/.rodata pages remain clean and so can be shared between

> processes. This does not apply to the UEFI environment, however.

>

> Contributed-under: TianoCore Contribution Agreement 1.0

> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

> ---

>  ArmPkg/Drivers/ArmCpuLib/ArmCortexA15Lib/ArmCortexA15Lib.c            | 67 ----------------

>  ArmPkg/Drivers/ArmCpuLib/ArmCortexA15Lib/ArmCortexA15Lib.inf          | 35 --------

>  ArmPkg/Drivers/ArmCpuLib/ArmCortexA5xLib/AArch64/ArmCortexA5xHelper.S | 27 -------

>  ArmPkg/Drivers/ArmCpuLib/ArmCortexA5xLib/ArmCortexA5xLib.c            | 84 --------------------

>  ArmPkg/Drivers/ArmCpuLib/ArmCortexA5xLib/ArmCortexA5xLib.inf          | 38 ---------

>  ArmPkg/Drivers/ArmCpuLib/ArmCortexA8Lib/ArmCortexA8Lib.c              | 41 ----------

>  ArmPkg/Drivers/ArmCpuLib/ArmCortexA8Lib/ArmCortexA8Lib.inf            | 27 -------

>  ArmPkg/Drivers/ArmCpuLib/ArmCortexA9Lib/ArmCortexA9Helper.S           | 23 ------

>  ArmPkg/Drivers/ArmCpuLib/ArmCortexA9Lib/ArmCortexA9Helper.asm         | 29 -------

>  ArmPkg/Drivers/ArmCpuLib/ArmCortexA9Lib/ArmCortexA9Lib.c              | 76 ------------------

>  ArmPkg/Drivers/ArmCpuLib/ArmCortexA9Lib/ArmCortexA9Lib.inf            | 37 ---------

>  ArmPkg/Drivers/ArmCpuLib/ArmCortexAEMv8Lib/ArmCortexAEMv8Lib.c        | 39 ---------

>  ArmPkg/Drivers/ArmCpuLib/ArmCortexAEMv8Lib/ArmCortexAEMv8Lib.inf      | 34 --------

>  BaseTools/Conf/tools_def.template                                     |  2 +-

>  14 files changed, 1 insertion(+), 558 deletions(-)

>

> diff --git a/ArmPkg/Drivers/ArmCpuLib/ArmCortexA15Lib/ArmCortexA15Lib.c b/ArmPkg/Drivers/ArmCpuLib/ArmCortexA15Lib/ArmCortexA15Lib.c

> deleted file mode 100644

> index e05e8abf3949..000000000000

> --- a/ArmPkg/Drivers/ArmCpuLib/ArmCortexA15Lib/ArmCortexA15Lib.c

> +++ /dev/null

> @@ -1,67 +0,0 @@

> -/** @file

> -

> -  Copyright (c) 2011-2012, ARM Limited. All rights reserved.

> -

> -  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.

> -

> -**/

> -

> -#include <Base.h>

> -#include <Library/ArmLib.h>

> -#include <Library/ArmCpuLib.h>

> -#include <Library/ArmGenericTimerCounterLib.h>

> -#include <Library/DebugLib.h>

> -#include <Library/PcdLib.h>

> -

> -#include <Chipset/ArmV7.h>

> -

> -#define A15_FEATURE_SMP     (1<<6)

> -

> -VOID

> -ArmCpuSetup (

> -  IN  UINTN         MpId

> -  )

> -{

> -  // Check if Architectural Timer frequency is valid number (should not be 0)

> -  ASSERT (PcdGet32 (PcdArmArchTimerFreqInHz));

> -  ASSERT(ArmIsArchTimerImplemented () != 0);

> -

> -  // Enable SWP instructions

> -  ArmEnableSWPInstruction ();

> -

> -  // Enable program flow prediction, if supported.

> -  ArmEnableBranchPrediction ();

> -

> -  // Note: System Counter frequency can only be set in Secure privileged mode,

> -  // if security extensions are implemented.

> -  ArmGenericTimerSetTimerFreq (PcdGet32 (PcdArmArchTimerFreqInHz));

> -

> -  if (ArmIsMpCore()) {

> -    // Turn on SMP coherency

> -    ArmSetAuxCrBit (A15_FEATURE_SMP);

> -  }

> -

> -}

> -

> -

> -VOID

> -ArmCpuSetupSmpNonSecure (

> -  IN  UINTN         MpId

> -  )

> -{

> -  /*// Make the SCU accessible in Non Secure world

> -  if (ArmPlatformIsPrimaryCore (MpId)) {

> -    ScuBase = ArmGetScuBaseAddress();

> -

> -    // Allow NS access to SCU register

> -    MmioOr32 (ScuBase + A9_SCU_SACR_OFFSET, 0xf);

> -    // Allow NS access to Private Peripherals

> -    MmioOr32 (ScuBase + A9_SCU_SSACR_OFFSET, 0xfff);

> -  }*/

> -}

> diff --git a/ArmPkg/Drivers/ArmCpuLib/ArmCortexA15Lib/ArmCortexA15Lib.inf b/ArmPkg/Drivers/ArmCpuLib/ArmCortexA15Lib/ArmCortexA15Lib.inf

> deleted file mode 100644

> index bd9a733b46cd..000000000000

> --- a/ArmPkg/Drivers/ArmCpuLib/ArmCortexA15Lib/ArmCortexA15Lib.inf

> +++ /dev/null

> @@ -1,35 +0,0 @@

> -#/* @file

> -#  Copyright (c) 2011-2014, ARM Limited. All rights reserved.

> -#

> -#  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.

> -#

> -#*/

> -

> -[Defines]

> -  INF_VERSION                    = 0x00010005

> -  BASE_NAME                      = ArmCortexA15Lib

> -  FILE_GUID                      = 501b1c8f-21d5-4ef5-a565-435b7f0aae2d

> -  MODULE_TYPE                    = BASE

> -  VERSION_STRING                 = 1.0

> -  LIBRARY_CLASS                  = ArmCpuLib

> -

> -[Packages]

> -  MdePkg/MdePkg.dec

> -  ArmPkg/ArmPkg.dec

> -

> -[LibraryClasses]

> -  ArmLib

> -  ArmGenericTimerCounterLib

> -  PcdLib

> -

> -[Sources.common]

> -  ArmCortexA15Lib.c

> -

> -[FixedPcd]

> -  gArmTokenSpaceGuid.PcdArmArchTimerFreqInHz

> diff --git a/ArmPkg/Drivers/ArmCpuLib/ArmCortexA5xLib/AArch64/ArmCortexA5xHelper.S b/ArmPkg/Drivers/ArmCpuLib/ArmCortexA5xLib/AArch64/ArmCortexA5xHelper.S

> deleted file mode 100644

> index ba3d48f11f6d..000000000000

> --- a/ArmPkg/Drivers/ArmCpuLib/ArmCortexA5xLib/AArch64/ArmCortexA5xHelper.S

> +++ /dev/null

> @@ -1,27 +0,0 @@

> -#------------------------------------------------------------------------------

> -#

> -# Copyright (c) 2013 - 2014, ARM Limited. All rights reserved.

> -#

> -# 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.

> -#

> -#------------------------------------------------------------------------------

> -

> -#include <AsmMacroIoLibV8.h>

> -

> -ASM_FUNC(ArmReadCpuExCr)

> -  mrs   x0, S3_1_c15_c2_1

> -  ret

> -

> -ASM_FUNC(ArmWriteCpuExCr)

> -  msr   S3_1_c15_c2_1, x0

> -  dsb   sy

> -  isb

> -  ret

> -

> -ASM_FUNCTION_REMOVE_IF_UNREFERENCED

> diff --git a/ArmPkg/Drivers/ArmCpuLib/ArmCortexA5xLib/ArmCortexA5xLib.c b/ArmPkg/Drivers/ArmCpuLib/ArmCortexA5xLib/ArmCortexA5xLib.c

> deleted file mode 100644

> index 3d39acd50c04..000000000000

> --- a/ArmPkg/Drivers/ArmCpuLib/ArmCortexA5xLib/ArmCortexA5xLib.c

> +++ /dev/null

> @@ -1,84 +0,0 @@

> -/** @file

> -

> -  Copyright (c) 2011-2014, ARM Limited. All rights reserved.

> -

> -  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.

> -

> -**/

> -

> -#include <Base.h>

> -#include <Library/ArmLib.h>

> -#include <Library/ArmCpuLib.h>

> -#include <Library/ArmGenericTimerCounterLib.h>

> -#include <Library/DebugLib.h>

> -#include <Library/PcdLib.h>

> -

> -#include <Chipset/ArmCortexA5x.h>

> -

> -VOID

> -ArmCpuSetup (

> -  IN  UINTN         MpId

> -  )

> -{

> -  // Check if Architectural Timer frequency is valid number (should not be 0)

> -  ASSERT (PcdGet32 (PcdArmArchTimerFreqInHz));

> -  ASSERT (ArmIsArchTimerImplemented () != 0);

> -

> -  // Note: System Counter frequency can only be set in Secure privileged mode,

> -  // if security extensions are implemented.

> -  ArmGenericTimerSetTimerFreq (PcdGet32 (PcdArmArchTimerFreqInHz));

> -

> -  if (ArmIsMpCore ()) {

> -    // Turn on SMP coherency

> -    ArmSetCpuExCrBit (A5X_FEATURE_SMP);

> -  }

> -

> -  //

> -  // If CPU is CortexA57 r0p0 apply Errata workarounds

> -  //

> -  if ((ArmReadMidr () & ((ARM_CPU_TYPE_MASK << 4) | ARM_CPU_REV_MASK)) ==

> -                         ((ARM_CPU_TYPE_A57 << 4) | ARM_CPU_REV(0,0))) {

> -

> -    // Errata 806969: DisableLoadStoreWB (1ULL << 49)

> -    // Errata 813420: Execute Data Cache clean as Data Cache clean/invalidate  (1ULL << 44)

> -    // Errata 814670: disable DMB nullification (1ULL << 58)

> -    ArmSetCpuActlrBit ( (1ULL << 49) | (1ULL << 44) | (1ULL << 58) );

> -  }

> -}

> -

> -VOID

> -ArmCpuSetupSmpNonSecure (

> -  IN  UINTN         MpId

> -  )

> -{

> -}

> -

> -VOID

> -EFIAPI

> -ArmSetCpuExCrBit (

> -  IN  UINT64    Bits

> -  )

> -{

> -  UINT64 Value;

> -  Value =  ArmReadCpuExCr ();

> -  Value |= Bits;

> -  ArmWriteCpuExCr (Value);

> -}

> -

> -VOID

> -EFIAPI

> -ArmUnsetCpuExCrBit (

> -  IN  UINT64    Bits

> -  )

> -{

> -  UINT64 Value;

> -  Value = ArmReadCpuExCr ();

> -  Value &= ~Bits;

> -  ArmWriteCpuExCr (Value);

> -}

> diff --git a/ArmPkg/Drivers/ArmCpuLib/ArmCortexA5xLib/ArmCortexA5xLib.inf b/ArmPkg/Drivers/ArmCpuLib/ArmCortexA5xLib/ArmCortexA5xLib.inf

> deleted file mode 100644

> index e27022032624..000000000000

> --- a/ArmPkg/Drivers/ArmCpuLib/ArmCortexA5xLib/ArmCortexA5xLib.inf

> +++ /dev/null

> @@ -1,38 +0,0 @@

> -#/* @file

> -#  Copyright (c) 2011-2014, ARM Limited. All rights reserved.

> -#

> -#  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.

> -#

> -#*/

> -

> -[Defines]

> -  INF_VERSION                    = 0x00010005

> -  BASE_NAME                      = ArmCortexA5xLib

> -  FILE_GUID                      = 08107938-85d8-4967-ba65-b673f708fcb2

> -  MODULE_TYPE                    = BASE

> -  VERSION_STRING                 = 1.0

> -  LIBRARY_CLASS                  = ArmCpuLib

> -

> -[Packages]

> -  MdePkg/MdePkg.dec

> -  ArmPkg/ArmPkg.dec

> -

> -[LibraryClasses]

> -  ArmLib

> -  ArmGenericTimerCounterLib

> -  PcdLib

> -

> -[Sources.common]

> -  ArmCortexA5xLib.c

> -

> -[Sources.AARCH64]

> -  AArch64/ArmCortexA5xHelper.S | GCC

> -

> -[FixedPcd]

> -  gArmTokenSpaceGuid.PcdArmArchTimerFreqInHz

> diff --git a/ArmPkg/Drivers/ArmCpuLib/ArmCortexA8Lib/ArmCortexA8Lib.c b/ArmPkg/Drivers/ArmCpuLib/ArmCortexA8Lib/ArmCortexA8Lib.c

> deleted file mode 100644

> index e0ba1fab8d90..000000000000

> --- a/ArmPkg/Drivers/ArmCpuLib/ArmCortexA8Lib/ArmCortexA8Lib.c

> +++ /dev/null

> @@ -1,41 +0,0 @@

> -/** @file

> -

> -  Copyright (c) 2011, ARM Limited. All rights reserved.

> -

> -  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.

> -

> -**/

> -

> -#include <Base.h>

> -#include <Library/ArmLib.h>

> -#include <Library/ArmCpuLib.h>

> -#include <Library/DebugLib.h>

> -

> -#include <Chipset/ArmV7.h>

> -

> -VOID

> -ArmCpuSetup (

> -  IN  UINTN         MpId

> -  )

> -{

> -  // Enable SWP instructions

> -  ArmEnableSWPInstruction ();

> -

> -  // Enable program flow prediction, if supported.

> -  ArmEnableBranchPrediction ();

> -}

> -

> -VOID

> -ArmCpuSetupSmpNonSecure (

> -  IN  UINTN         MpId

> -  )

> -{

> -  // The CortexA8 is a Unicore CPU. We must not initialize SMP for Non Secure Accesses

> -  ASSERT(0);

> -}

> diff --git a/ArmPkg/Drivers/ArmCpuLib/ArmCortexA8Lib/ArmCortexA8Lib.inf b/ArmPkg/Drivers/ArmCpuLib/ArmCortexA8Lib/ArmCortexA8Lib.inf

> deleted file mode 100644

> index 890958a7e395..000000000000

> --- a/ArmPkg/Drivers/ArmCpuLib/ArmCortexA8Lib/ArmCortexA8Lib.inf

> +++ /dev/null

> @@ -1,27 +0,0 @@

> -#/* @file

> -#  Copyright (c) 2011, ARM Limited. All rights reserved.

> -#

> -#  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.

> -#

> -#*/

> -

> -[Defines]

> -  INF_VERSION                    = 0x00010005

> -  BASE_NAME                      = ArmCortexA8Lib

> -  FILE_GUID                      = 34b5745e-f575-44ce-ba2e-df0886807c16

> -  MODULE_TYPE                    = BASE

> -  VERSION_STRING                 = 1.0

> -  LIBRARY_CLASS                  = ArmCpuLib

> -

> -[Packages]

> -  MdePkg/MdePkg.dec

> -  ArmPkg/ArmPkg.dec

> -

> -[Sources.common]

> -  ArmCortexA8Lib.c

> diff --git a/ArmPkg/Drivers/ArmCpuLib/ArmCortexA9Lib/ArmCortexA9Helper.S b/ArmPkg/Drivers/ArmCpuLib/ArmCortexA9Lib/ArmCortexA9Helper.S

> deleted file mode 100644

> index 365d57d7e8bd..000000000000

> --- a/ArmPkg/Drivers/ArmCpuLib/ArmCortexA9Lib/ArmCortexA9Helper.S

> +++ /dev/null

> @@ -1,23 +0,0 @@

> -//

> -//  Copyright (c) 2011-2012, ARM Limited. All rights reserved.

> -//

> -//  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.

> -//

> -//

> -

> -#include <AsmMacroIoLib.h>

> -

> -// IN None

> -// OUT r0 = SCU Base Address

> -ASM_FUNC(ArmGetScuBaseAddress)

> -  // Read Configuration Base Address Register. ArmCBar cannot be called to get

> -  // the Configuration BAR as a stack is not necessary setup. The SCU is at the

> -  // offset 0x0000 from the Private Memory Region.

> -  mrc   p15, 4, r0, c15, c0, 0

> -  bx  lr

> diff --git a/ArmPkg/Drivers/ArmCpuLib/ArmCortexA9Lib/ArmCortexA9Helper.asm b/ArmPkg/Drivers/ArmCpuLib/ArmCortexA9Lib/ArmCortexA9Helper.asm

> deleted file mode 100644

> index 882f25b780cd..000000000000

> --- a/ArmPkg/Drivers/ArmCpuLib/ArmCortexA9Lib/ArmCortexA9Helper.asm

> +++ /dev/null

> @@ -1,29 +0,0 @@

> -//

> -//  Copyright (c) 2011-2012, ARM Limited. All rights reserved.

> -//

> -//  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.

> -//

> -//

> -

> -  INCLUDE AsmMacroExport.inc

> -  INCLUDE AsmMacroIoLib.inc

> -

> -

> -  PRESERVE8

> -

> -// IN None

> -// OUT r0 = SCU Base Address

> - RVCT_ASM_EXPORT ArmGetScuBaseAddress

> -  // Read Configuration Base Address Register. ArmCBar cannot be called to get

> -  // the Configuration BAR as a stack is not necessary setup. The SCU is at the

> -  // offset 0x0000 from the Private Memory Region.

> -  mrc   p15, 4, r0, c15, c0, 0

> -  bx  lr

> -

> -  END

> diff --git a/ArmPkg/Drivers/ArmCpuLib/ArmCortexA9Lib/ArmCortexA9Lib.c b/ArmPkg/Drivers/ArmCpuLib/ArmCortexA9Lib/ArmCortexA9Lib.c

> deleted file mode 100644

> index 4fc6a08b9a94..000000000000

> --- a/ArmPkg/Drivers/ArmCpuLib/ArmCortexA9Lib/ArmCortexA9Lib.c

> +++ /dev/null

> @@ -1,76 +0,0 @@

> -/** @file

> -

> -  Copyright (c) 2011-2012, ARM Limited. All rights reserved.

> -

> -  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.

> -

> -**/

> -

> -#include <Base.h>

> -#include <Library/ArmLib.h>

> -#include <Library/ArmCpuLib.h>

> -#include <Library/ArmPlatformLib.h>

> -#include <Library/IoLib.h>

> -#include <Library/PcdLib.h>

> -

> -#include <Chipset/ArmCortexA9.h>

> -

> -VOID

> -ArmEnableScu (

> -  VOID

> -  )

> -{

> -  INTN          ScuBase;

> -

> -  ScuBase = ArmGetScuBaseAddress();

> -

> -  // Invalidate all: write -1 to SCU Invalidate All register

> -  MmioWrite32(ScuBase + A9_SCU_INVALL_OFFSET, 0xffffffff);

> -  // Enable SCU

> -  MmioWrite32(ScuBase + A9_SCU_CONTROL_OFFSET, 0x1);

> -}

> -

> -VOID

> -ArmCpuSetup (

> -  IN  UINTN         MpId

> -  )

> -{

> -  // Enable SWP instructions

> -  ArmEnableSWPInstruction ();

> -

> -  // Enable program flow prediction, if supported.

> -  ArmEnableBranchPrediction ();

> -

> -  // If MPCore then Enable the SCU

> -  if (ArmIsMpCore()) {

> -    // Signals the Cortex-A9 processor is taking part in coherency

> -    ArmSetAuxCrBit (A9_FEATURE_SMP);

> -

> -    ArmEnableScu ();

> -  }

> -}

> -

> -

> -VOID

> -ArmCpuSetupSmpNonSecure (

> -  IN  UINTN         MpId

> -  )

> -{

> -  INTN          ScuBase;

> -

> -  // Make the SCU accessible in Non Secure world

> -  if (ArmPlatformIsPrimaryCore (MpId)) {

> -    ScuBase = ArmGetScuBaseAddress();

> -

> -    // Allow NS access to SCU register

> -    MmioOr32 (ScuBase + A9_SCU_SACR_OFFSET, 0xf);

> -    // Allow NS access to Private Peripherals

> -    MmioOr32 (ScuBase + A9_SCU_SSACR_OFFSET, 0xfff);

> -  }

> -}

> diff --git a/ArmPkg/Drivers/ArmCpuLib/ArmCortexA9Lib/ArmCortexA9Lib.inf b/ArmPkg/Drivers/ArmCpuLib/ArmCortexA9Lib/ArmCortexA9Lib.inf

> deleted file mode 100644

> index 236b0bcb6ca7..000000000000

> --- a/ArmPkg/Drivers/ArmCpuLib/ArmCortexA9Lib/ArmCortexA9Lib.inf

> +++ /dev/null

> @@ -1,37 +0,0 @@

> -#/* @file

> -#  Copyright (c) 2011-2013, ARM Limited. All rights reserved.

> -#

> -#  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.

> -#

> -#*/

> -

> -[Defines]

> -  INF_VERSION                    = 0x00010005

> -  BASE_NAME                      = ArmCortexA9Lib

> -  FILE_GUID                      = c9709ea3-1beb-4806-889a-8a1d5e5e1697

> -  MODULE_TYPE                    = BASE

> -  VERSION_STRING                 = 1.0

> -  LIBRARY_CLASS                  = ArmCpuLib

> -

> -[Packages]

> -  MdePkg/MdePkg.dec

> -  ArmPkg/ArmPkg.dec

> -  ArmPlatformPkg/ArmPlatformPkg.dec

> -

> -[LibraryClasses]

> -  ArmLib

> -  ArmPlatformLib

> -  IoLib

> -  PcdLib

> -

> -[Sources.common]

> -  ArmCortexA9Lib.c

> -  ArmCortexA9Helper.asm     | RVCT

> -  ArmCortexA9Helper.S       | GCC

> -

> diff --git a/ArmPkg/Drivers/ArmCpuLib/ArmCortexAEMv8Lib/ArmCortexAEMv8Lib.c b/ArmPkg/Drivers/ArmCpuLib/ArmCortexAEMv8Lib/ArmCortexAEMv8Lib.c

> deleted file mode 100644

> index ee2c057fe099..000000000000

> --- a/ArmPkg/Drivers/ArmCpuLib/ArmCortexAEMv8Lib/ArmCortexAEMv8Lib.c

> +++ /dev/null

> @@ -1,39 +0,0 @@

> -/** @file

> -

> -  Copyright (c) 2011 - 2013, ARM Limited. All rights reserved.

> -

> -  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.

> -

> -**/

> -

> -#include <Base.h>

> -#include <Library/ArmCpuLib.h>

> -#include <Library/ArmGenericTimerCounterLib.h>

> -#include <Library/PcdLib.h>

> -

> -#include <Chipset/AArch64.h>

> -

> -VOID

> -ArmCpuSetup (

> -  IN  UINTN         MpId

> -  )

> -{

> -  // Note: System Counter frequency can only be set in Secure privileged mode,

> -  // if security extensions are implemented.

> -  ArmGenericTimerSetTimerFreq (PcdGet32 (PcdArmArchTimerFreqInHz));

> -}

> -

> -

> -VOID

> -ArmCpuSetupSmpNonSecure (

> -  IN  UINTN         MpId

> -  )

> -{

> -  // Nothing to do

> -}

> diff --git a/ArmPkg/Drivers/ArmCpuLib/ArmCortexAEMv8Lib/ArmCortexAEMv8Lib.inf b/ArmPkg/Drivers/ArmCpuLib/ArmCortexAEMv8Lib/ArmCortexAEMv8Lib.inf

> deleted file mode 100644

> index 1c8122082d9d..000000000000

> --- a/ArmPkg/Drivers/ArmCpuLib/ArmCortexAEMv8Lib/ArmCortexAEMv8Lib.inf

> +++ /dev/null

> @@ -1,34 +0,0 @@

> -#/* @file

> -#  Copyright (c) 2011 - 2014, ARM Limited. All rights reserved.

> -#

> -#  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.

> -#

> -#*/

> -

> -[Defines]

> -  INF_VERSION                    = 0x00010005

> -  BASE_NAME                      = ArmCortexAEMv8Lib

> -  FILE_GUID                      = 8ab5a7e3-86b1-4dd3-a092-09ee801e774b

> -  MODULE_TYPE                    = BASE

> -  VERSION_STRING                 = 1.0

> -  LIBRARY_CLASS                  = ArmCpuLib

> -

> -[Packages]

> -  MdePkg/MdePkg.dec

> -  ArmPkg/ArmPkg.dec

> -

> -[LibraryClasses]

> -  ArmGenericTimerCounterLib

> -  PcdLib

> -

> -[Sources.common]

> -  ArmCortexAEMv8Lib.c

> -

> -[FixedPcd]

> -  gArmTokenSpaceGuid.PcdArmArchTimerFreqInHz

> diff --git a/BaseTools/Conf/tools_def.template b/BaseTools/Conf/tools_def.template

> index 0aabdeb2d973..2c5cd5808912 100755

> --- a/BaseTools/Conf/tools_def.template

> +++ b/BaseTools/Conf/tools_def.template

> @@ -4341,7 +4341,7 @@ DEFINE GCC_X64_CC_FLAGS            = DEF(GCC_ALL_CC_FLAGS) -mno-red-zone -Wno-ad

>  DEFINE GCC_IPF_CC_FLAGS            = DEF(GCC_ALL_CC_FLAGS) -minline-int-divide-min-latency

>  DEFINE GCC_ARM_CC_FLAGS            = DEF(GCC_ALL_CC_FLAGS) -mlittle-endian -mabi=aapcs -fno-short-enums -funsigned-char -ffunction-sections -fdata-sections -fomit-frame-pointer -fno-builtin -Wno-address -mthumb -mfloat-abi=soft

>  DEFINE GCC_ARM_CC_XIPFLAGS         = -mno-unaligned-access

> -DEFINE GCC_AARCH64_CC_FLAGS        = DEF(GCC_ALL_CC_FLAGS) -mlittle-endian -fno-short-enums -fverbose-asm -funsigned-char  -ffunction-sections -fdata-sections -fno-builtin -Wno-address -fno-asynchronous-unwind-tables

> +DEFINE GCC_AARCH64_CC_FLAGS        = DEF(GCC_ALL_CC_FLAGS) -mlittle-endian -fno-short-enums -fverbose-asm -funsigned-char  -ffunction-sections -fdata-sections -fno-builtin -Wno-address -fno-asynchronous-unwind-tables -fno-pic

>  DEFINE GCC_AARCH64_CC_XIPFLAGS     = -mstrict-align

>  DEFINE GCC_DLINK_FLAGS_COMMON      = -nostdlib --pie

>  DEFINE GCC_DLINK2_FLAGS_COMMON     = -Wl,--script=$(EDK_TOOLS_PATH)/Scripts/GccBase.lds

> --

> 2.9.3

>

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Patch hide | download patch | download mbox

diff --git a/ArmPkg/Drivers/ArmCpuLib/ArmCortexA15Lib/ArmCortexA15Lib.c b/ArmPkg/Drivers/ArmCpuLib/ArmCortexA15Lib/ArmCortexA15Lib.c
deleted file mode 100644
index e05e8abf3949..000000000000
--- a/ArmPkg/Drivers/ArmCpuLib/ArmCortexA15Lib/ArmCortexA15Lib.c
+++ /dev/null
@@ -1,67 +0,0 @@ 
-/** @file
-
-  Copyright (c) 2011-2012, ARM Limited. All rights reserved.
-
-  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.
-
-**/
-
-#include <Base.h>
-#include <Library/ArmLib.h>
-#include <Library/ArmCpuLib.h>
-#include <Library/ArmGenericTimerCounterLib.h>
-#include <Library/DebugLib.h>
-#include <Library/PcdLib.h>
-
-#include <Chipset/ArmV7.h>
-
-#define A15_FEATURE_SMP     (1<<6)
-
-VOID
-ArmCpuSetup (
-  IN  UINTN         MpId
-  )
-{
-  // Check if Architectural Timer frequency is valid number (should not be 0)
-  ASSERT (PcdGet32 (PcdArmArchTimerFreqInHz));
-  ASSERT(ArmIsArchTimerImplemented () != 0);
-
-  // Enable SWP instructions
-  ArmEnableSWPInstruction ();
-
-  // Enable program flow prediction, if supported.
-  ArmEnableBranchPrediction ();
-
-  // Note: System Counter frequency can only be set in Secure privileged mode,
-  // if security extensions are implemented.
-  ArmGenericTimerSetTimerFreq (PcdGet32 (PcdArmArchTimerFreqInHz));
-
-  if (ArmIsMpCore()) {
-    // Turn on SMP coherency
-    ArmSetAuxCrBit (A15_FEATURE_SMP);
-  }
-
-}
-
-
-VOID
-ArmCpuSetupSmpNonSecure (
-  IN  UINTN         MpId
-  )
-{
-  /*// Make the SCU accessible in Non Secure world
-  if (ArmPlatformIsPrimaryCore (MpId)) {
-    ScuBase = ArmGetScuBaseAddress();
-
-    // Allow NS access to SCU register
-    MmioOr32 (ScuBase + A9_SCU_SACR_OFFSET, 0xf);
-    // Allow NS access to Private Peripherals
-    MmioOr32 (ScuBase + A9_SCU_SSACR_OFFSET, 0xfff);
-  }*/
-}
diff --git a/ArmPkg/Drivers/ArmCpuLib/ArmCortexA15Lib/ArmCortexA15Lib.inf b/ArmPkg/Drivers/ArmCpuLib/ArmCortexA15Lib/ArmCortexA15Lib.inf
deleted file mode 100644
index bd9a733b46cd..000000000000
--- a/ArmPkg/Drivers/ArmCpuLib/ArmCortexA15Lib/ArmCortexA15Lib.inf
+++ /dev/null
@@ -1,35 +0,0 @@ 
-#/* @file
-#  Copyright (c) 2011-2014, ARM Limited. All rights reserved.
-#
-#  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.
-#
-#*/
-
-[Defines]
-  INF_VERSION                    = 0x00010005
-  BASE_NAME                      = ArmCortexA15Lib
-  FILE_GUID                      = 501b1c8f-21d5-4ef5-a565-435b7f0aae2d
-  MODULE_TYPE                    = BASE
-  VERSION_STRING                 = 1.0
-  LIBRARY_CLASS                  = ArmCpuLib
-
-[Packages]
-  MdePkg/MdePkg.dec
-  ArmPkg/ArmPkg.dec
-
-[LibraryClasses]
-  ArmLib
-  ArmGenericTimerCounterLib
-  PcdLib
-
-[Sources.common]
-  ArmCortexA15Lib.c
-
-[FixedPcd]
-  gArmTokenSpaceGuid.PcdArmArchTimerFreqInHz
diff --git a/ArmPkg/Drivers/ArmCpuLib/ArmCortexA5xLib/AArch64/ArmCortexA5xHelper.S b/ArmPkg/Drivers/ArmCpuLib/ArmCortexA5xLib/AArch64/ArmCortexA5xHelper.S
deleted file mode 100644
index ba3d48f11f6d..000000000000
--- a/ArmPkg/Drivers/ArmCpuLib/ArmCortexA5xLib/AArch64/ArmCortexA5xHelper.S
+++ /dev/null
@@ -1,27 +0,0 @@ 
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2013 - 2014, ARM Limited. All rights reserved.
-#
-# 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.
-#
-#------------------------------------------------------------------------------
-
-#include <AsmMacroIoLibV8.h>
-
-ASM_FUNC(ArmReadCpuExCr)
-  mrs   x0, S3_1_c15_c2_1
-  ret
-
-ASM_FUNC(ArmWriteCpuExCr)
-  msr   S3_1_c15_c2_1, x0
-  dsb   sy
-  isb
-  ret
-
-ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/ArmPkg/Drivers/ArmCpuLib/ArmCortexA5xLib/ArmCortexA5xLib.c b/ArmPkg/Drivers/ArmCpuLib/ArmCortexA5xLib/ArmCortexA5xLib.c
deleted file mode 100644
index 3d39acd50c04..000000000000
--- a/ArmPkg/Drivers/ArmCpuLib/ArmCortexA5xLib/ArmCortexA5xLib.c
+++ /dev/null
@@ -1,84 +0,0 @@ 
-/** @file
-
-  Copyright (c) 2011-2014, ARM Limited. All rights reserved.
-
-  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.
-
-**/
-
-#include <Base.h>
-#include <Library/ArmLib.h>
-#include <Library/ArmCpuLib.h>
-#include <Library/ArmGenericTimerCounterLib.h>
-#include <Library/DebugLib.h>
-#include <Library/PcdLib.h>
-
-#include <Chipset/ArmCortexA5x.h>
-
-VOID
-ArmCpuSetup (
-  IN  UINTN         MpId
-  )
-{
-  // Check if Architectural Timer frequency is valid number (should not be 0)
-  ASSERT (PcdGet32 (PcdArmArchTimerFreqInHz));
-  ASSERT (ArmIsArchTimerImplemented () != 0);
-
-  // Note: System Counter frequency can only be set in Secure privileged mode,
-  // if security extensions are implemented.
-  ArmGenericTimerSetTimerFreq (PcdGet32 (PcdArmArchTimerFreqInHz));
-
-  if (ArmIsMpCore ()) {
-    // Turn on SMP coherency
-    ArmSetCpuExCrBit (A5X_FEATURE_SMP);
-  }
-
-  //
-  // If CPU is CortexA57 r0p0 apply Errata workarounds
-  //
-  if ((ArmReadMidr () & ((ARM_CPU_TYPE_MASK << 4) | ARM_CPU_REV_MASK)) ==
-                         ((ARM_CPU_TYPE_A57 << 4) | ARM_CPU_REV(0,0))) {
-
-    // Errata 806969: DisableLoadStoreWB (1ULL << 49)
-    // Errata 813420: Execute Data Cache clean as Data Cache clean/invalidate  (1ULL << 44)
-    // Errata 814670: disable DMB nullification (1ULL << 58)
-    ArmSetCpuActlrBit ( (1ULL << 49) | (1ULL << 44) | (1ULL << 58) );
-  }
-}
-
-VOID
-ArmCpuSetupSmpNonSecure (
-  IN  UINTN         MpId
-  )
-{
-}
-
-VOID
-EFIAPI
-ArmSetCpuExCrBit (
-  IN  UINT64    Bits
-  )
-{
-  UINT64 Value;
-  Value =  ArmReadCpuExCr ();
-  Value |= Bits;
-  ArmWriteCpuExCr (Value);
-}
-
-VOID
-EFIAPI
-ArmUnsetCpuExCrBit (
-  IN  UINT64    Bits
-  )
-{
-  UINT64 Value;
-  Value = ArmReadCpuExCr ();
-  Value &= ~Bits;
-  ArmWriteCpuExCr (Value);
-}
diff --git a/ArmPkg/Drivers/ArmCpuLib/ArmCortexA5xLib/ArmCortexA5xLib.inf b/ArmPkg/Drivers/ArmCpuLib/ArmCortexA5xLib/ArmCortexA5xLib.inf
deleted file mode 100644
index e27022032624..000000000000
--- a/ArmPkg/Drivers/ArmCpuLib/ArmCortexA5xLib/ArmCortexA5xLib.inf
+++ /dev/null
@@ -1,38 +0,0 @@ 
-#/* @file
-#  Copyright (c) 2011-2014, ARM Limited. All rights reserved.
-#
-#  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.
-#
-#*/
-
-[Defines]
-  INF_VERSION                    = 0x00010005
-  BASE_NAME                      = ArmCortexA5xLib
-  FILE_GUID                      = 08107938-85d8-4967-ba65-b673f708fcb2
-  MODULE_TYPE                    = BASE
-  VERSION_STRING                 = 1.0
-  LIBRARY_CLASS                  = ArmCpuLib
-
-[Packages]
-  MdePkg/MdePkg.dec
-  ArmPkg/ArmPkg.dec
-
-[LibraryClasses]
-  ArmLib
-  ArmGenericTimerCounterLib
-  PcdLib
-
-[Sources.common]
-  ArmCortexA5xLib.c
-
-[Sources.AARCH64]
-  AArch64/ArmCortexA5xHelper.S | GCC
-
-[FixedPcd]
-  gArmTokenSpaceGuid.PcdArmArchTimerFreqInHz
diff --git a/ArmPkg/Drivers/ArmCpuLib/ArmCortexA8Lib/ArmCortexA8Lib.c b/ArmPkg/Drivers/ArmCpuLib/ArmCortexA8Lib/ArmCortexA8Lib.c
deleted file mode 100644
index e0ba1fab8d90..000000000000
--- a/ArmPkg/Drivers/ArmCpuLib/ArmCortexA8Lib/ArmCortexA8Lib.c
+++ /dev/null
@@ -1,41 +0,0 @@ 
-/** @file
-
-  Copyright (c) 2011, ARM Limited. All rights reserved.
-
-  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.
-
-**/
-
-#include <Base.h>
-#include <Library/ArmLib.h>
-#include <Library/ArmCpuLib.h>
-#include <Library/DebugLib.h>
-
-#include <Chipset/ArmV7.h>
-
-VOID
-ArmCpuSetup (
-  IN  UINTN         MpId
-  )
-{
-  // Enable SWP instructions
-  ArmEnableSWPInstruction ();
-
-  // Enable program flow prediction, if supported.
-  ArmEnableBranchPrediction ();
-}
-
-VOID
-ArmCpuSetupSmpNonSecure (
-  IN  UINTN         MpId
-  )
-{
-  // The CortexA8 is a Unicore CPU. We must not initialize SMP for Non Secure Accesses
-  ASSERT(0);
-}
diff --git a/ArmPkg/Drivers/ArmCpuLib/ArmCortexA8Lib/ArmCortexA8Lib.inf b/ArmPkg/Drivers/ArmCpuLib/ArmCortexA8Lib/ArmCortexA8Lib.inf
deleted file mode 100644
index 890958a7e395..000000000000
--- a/ArmPkg/Drivers/ArmCpuLib/ArmCortexA8Lib/ArmCortexA8Lib.inf
+++ /dev/null
@@ -1,27 +0,0 @@ 
-#/* @file
-#  Copyright (c) 2011, ARM Limited. All rights reserved.
-#
-#  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.
-#
-#*/
-
-[Defines]
-  INF_VERSION                    = 0x00010005
-  BASE_NAME                      = ArmCortexA8Lib
-  FILE_GUID                      = 34b5745e-f575-44ce-ba2e-df0886807c16
-  MODULE_TYPE                    = BASE
-  VERSION_STRING                 = 1.0
-  LIBRARY_CLASS                  = ArmCpuLib
-
-[Packages]
-  MdePkg/MdePkg.dec
-  ArmPkg/ArmPkg.dec
-
-[Sources.common]
-  ArmCortexA8Lib.c
diff --git a/ArmPkg/Drivers/ArmCpuLib/ArmCortexA9Lib/ArmCortexA9Helper.S b/ArmPkg/Drivers/ArmCpuLib/ArmCortexA9Lib/ArmCortexA9Helper.S
deleted file mode 100644
index 365d57d7e8bd..000000000000
--- a/ArmPkg/Drivers/ArmCpuLib/ArmCortexA9Lib/ArmCortexA9Helper.S
+++ /dev/null
@@ -1,23 +0,0 @@ 
-//
-//  Copyright (c) 2011-2012, ARM Limited. All rights reserved.
-//
-//  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.
-//
-//
-
-#include <AsmMacroIoLib.h>
-
-// IN None
-// OUT r0 = SCU Base Address
-ASM_FUNC(ArmGetScuBaseAddress)
-  // Read Configuration Base Address Register. ArmCBar cannot be called to get
-  // the Configuration BAR as a stack is not necessary setup. The SCU is at the
-  // offset 0x0000 from the Private Memory Region.
-  mrc   p15, 4, r0, c15, c0, 0
-  bx  lr
diff --git a/ArmPkg/Drivers/ArmCpuLib/ArmCortexA9Lib/ArmCortexA9Helper.asm b/ArmPkg/Drivers/ArmCpuLib/ArmCortexA9Lib/ArmCortexA9Helper.asm
deleted file mode 100644
index 882f25b780cd..000000000000
--- a/ArmPkg/Drivers/ArmCpuLib/ArmCortexA9Lib/ArmCortexA9Helper.asm
+++ /dev/null
@@ -1,29 +0,0 @@ 
-//
-//  Copyright (c) 2011-2012, ARM Limited. All rights reserved.
-//
-//  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.
-//
-//
-
-  INCLUDE AsmMacroExport.inc
-  INCLUDE AsmMacroIoLib.inc
-
-
-  PRESERVE8
-
-// IN None
-// OUT r0 = SCU Base Address
- RVCT_ASM_EXPORT ArmGetScuBaseAddress
-  // Read Configuration Base Address Register. ArmCBar cannot be called to get
-  // the Configuration BAR as a stack is not necessary setup. The SCU is at the
-  // offset 0x0000 from the Private Memory Region.
-  mrc   p15, 4, r0, c15, c0, 0
-  bx  lr
-
-  END
diff --git a/ArmPkg/Drivers/ArmCpuLib/ArmCortexA9Lib/ArmCortexA9Lib.c b/ArmPkg/Drivers/ArmCpuLib/ArmCortexA9Lib/ArmCortexA9Lib.c
deleted file mode 100644
index 4fc6a08b9a94..000000000000
--- a/ArmPkg/Drivers/ArmCpuLib/ArmCortexA9Lib/ArmCortexA9Lib.c
+++ /dev/null
@@ -1,76 +0,0 @@ 
-/** @file
-
-  Copyright (c) 2011-2012, ARM Limited. All rights reserved.
-
-  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.
-
-**/
-
-#include <Base.h>
-#include <Library/ArmLib.h>
-#include <Library/ArmCpuLib.h>
-#include <Library/ArmPlatformLib.h>
-#include <Library/IoLib.h>
-#include <Library/PcdLib.h>
-
-#include <Chipset/ArmCortexA9.h>
-
-VOID
-ArmEnableScu (
-  VOID
-  )
-{
-  INTN          ScuBase;
-
-  ScuBase = ArmGetScuBaseAddress();
-
-  // Invalidate all: write -1 to SCU Invalidate All register
-  MmioWrite32(ScuBase + A9_SCU_INVALL_OFFSET, 0xffffffff);
-  // Enable SCU
-  MmioWrite32(ScuBase + A9_SCU_CONTROL_OFFSET, 0x1);
-}
-
-VOID
-ArmCpuSetup (
-  IN  UINTN         MpId
-  )
-{
-  // Enable SWP instructions
-  ArmEnableSWPInstruction ();
-
-  // Enable program flow prediction, if supported.
-  ArmEnableBranchPrediction ();
-
-  // If MPCore then Enable the SCU
-  if (ArmIsMpCore()) {
-    // Signals the Cortex-A9 processor is taking part in coherency
-    ArmSetAuxCrBit (A9_FEATURE_SMP);
-
-    ArmEnableScu ();
-  }
-}
-
-
-VOID
-ArmCpuSetupSmpNonSecure (
-  IN  UINTN         MpId
-  )
-{
-  INTN          ScuBase;
-
-  // Make the SCU accessible in Non Secure world
-  if (ArmPlatformIsPrimaryCore (MpId)) {
-    ScuBase = ArmGetScuBaseAddress();
-
-    // Allow NS access to SCU register
-    MmioOr32 (ScuBase + A9_SCU_SACR_OFFSET, 0xf);
-    // Allow NS access to Private Peripherals
-    MmioOr32 (ScuBase + A9_SCU_SSACR_OFFSET, 0xfff);
-  }
-}
diff --git a/ArmPkg/Drivers/ArmCpuLib/ArmCortexA9Lib/ArmCortexA9Lib.inf b/ArmPkg/Drivers/ArmCpuLib/ArmCortexA9Lib/ArmCortexA9Lib.inf
deleted file mode 100644
index 236b0bcb6ca7..000000000000
--- a/ArmPkg/Drivers/ArmCpuLib/ArmCortexA9Lib/ArmCortexA9Lib.inf
+++ /dev/null
@@ -1,37 +0,0 @@ 
-#/* @file
-#  Copyright (c) 2011-2013, ARM Limited. All rights reserved.
-#
-#  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.
-#
-#*/
-
-[Defines]
-  INF_VERSION                    = 0x00010005
-  BASE_NAME                      = ArmCortexA9Lib
-  FILE_GUID                      = c9709ea3-1beb-4806-889a-8a1d5e5e1697
-  MODULE_TYPE                    = BASE
-  VERSION_STRING                 = 1.0
-  LIBRARY_CLASS                  = ArmCpuLib
-
-[Packages]
-  MdePkg/MdePkg.dec
-  ArmPkg/ArmPkg.dec
-  ArmPlatformPkg/ArmPlatformPkg.dec
-
-[LibraryClasses]
-  ArmLib
-  ArmPlatformLib
-  IoLib
-  PcdLib
-
-[Sources.common]
-  ArmCortexA9Lib.c
-  ArmCortexA9Helper.asm     | RVCT
-  ArmCortexA9Helper.S       | GCC
-
diff --git a/ArmPkg/Drivers/ArmCpuLib/ArmCortexAEMv8Lib/ArmCortexAEMv8Lib.c b/ArmPkg/Drivers/ArmCpuLib/ArmCortexAEMv8Lib/ArmCortexAEMv8Lib.c
deleted file mode 100644
index ee2c057fe099..000000000000
--- a/ArmPkg/Drivers/ArmCpuLib/ArmCortexAEMv8Lib/ArmCortexAEMv8Lib.c
+++ /dev/null
@@ -1,39 +0,0 @@ 
-/** @file
-
-  Copyright (c) 2011 - 2013, ARM Limited. All rights reserved.
-
-  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.
-
-**/
-
-#include <Base.h>
-#include <Library/ArmCpuLib.h>
-#include <Library/ArmGenericTimerCounterLib.h>
-#include <Library/PcdLib.h>
-
-#include <Chipset/AArch64.h>
-
-VOID
-ArmCpuSetup (
-  IN  UINTN         MpId
-  )
-{
-  // Note: System Counter frequency can only be set in Secure privileged mode,
-  // if security extensions are implemented.
-  ArmGenericTimerSetTimerFreq (PcdGet32 (PcdArmArchTimerFreqInHz));
-}
-
-
-VOID
-ArmCpuSetupSmpNonSecure (
-  IN  UINTN         MpId
-  )
-{
-  // Nothing to do
-}
diff --git a/ArmPkg/Drivers/ArmCpuLib/ArmCortexAEMv8Lib/ArmCortexAEMv8Lib.inf b/ArmPkg/Drivers/ArmCpuLib/ArmCortexAEMv8Lib/ArmCortexAEMv8Lib.inf
deleted file mode 100644
index 1c8122082d9d..000000000000
--- a/ArmPkg/Drivers/ArmCpuLib/ArmCortexAEMv8Lib/ArmCortexAEMv8Lib.inf
+++ /dev/null
@@ -1,34 +0,0 @@ 
-#/* @file
-#  Copyright (c) 2011 - 2014, ARM Limited. All rights reserved.
-#
-#  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.
-#
-#*/
-
-[Defines]
-  INF_VERSION                    = 0x00010005
-  BASE_NAME                      = ArmCortexAEMv8Lib
-  FILE_GUID                      = 8ab5a7e3-86b1-4dd3-a092-09ee801e774b
-  MODULE_TYPE                    = BASE
-  VERSION_STRING                 = 1.0
-  LIBRARY_CLASS                  = ArmCpuLib
-
-[Packages]
-  MdePkg/MdePkg.dec
-  ArmPkg/ArmPkg.dec
-
-[LibraryClasses]
-  ArmGenericTimerCounterLib
-  PcdLib
-
-[Sources.common]
-  ArmCortexAEMv8Lib.c
-
-[FixedPcd]
-  gArmTokenSpaceGuid.PcdArmArchTimerFreqInHz
diff --git a/BaseTools/Conf/tools_def.template b/BaseTools/Conf/tools_def.template
index 0aabdeb2d973..2c5cd5808912 100755
--- a/BaseTools/Conf/tools_def.template
+++ b/BaseTools/Conf/tools_def.template
@@ -4341,7 +4341,7 @@  DEFINE GCC_X64_CC_FLAGS            = DEF(GCC_ALL_CC_FLAGS) -mno-red-zone -Wno-ad
 DEFINE GCC_IPF_CC_FLAGS            = DEF(GCC_ALL_CC_FLAGS) -minline-int-divide-min-latency
 DEFINE GCC_ARM_CC_FLAGS            = DEF(GCC_ALL_CC_FLAGS) -mlittle-endian -mabi=aapcs -fno-short-enums -funsigned-char -ffunction-sections -fdata-sections -fomit-frame-pointer -fno-builtin -Wno-address -mthumb -mfloat-abi=soft
 DEFINE GCC_ARM_CC_XIPFLAGS         = -mno-unaligned-access
-DEFINE GCC_AARCH64_CC_FLAGS        = DEF(GCC_ALL_CC_FLAGS) -mlittle-endian -fno-short-enums -fverbose-asm -funsigned-char  -ffunction-sections -fdata-sections -fno-builtin -Wno-address -fno-asynchronous-unwind-tables
+DEFINE GCC_AARCH64_CC_FLAGS        = DEF(GCC_ALL_CC_FLAGS) -mlittle-endian -fno-short-enums -fverbose-asm -funsigned-char  -ffunction-sections -fdata-sections -fno-builtin -Wno-address -fno-asynchronous-unwind-tables -fno-pic
 DEFINE GCC_AARCH64_CC_XIPFLAGS     = -mstrict-align
 DEFINE GCC_DLINK_FLAGS_COMMON      = -nostdlib --pie
 DEFINE GCC_DLINK2_FLAGS_COMMON     = -Wl,--script=$(EDK_TOOLS_PATH)/Scripts/GccBase.lds