]> git.proxmox.com Git - mirror_edk2.git/commitdiff
ArmPlatformPkg: remove BootMonFs and ArmShellCmdRunAxf
authorArd Biesheuvel <ard.biesheuvel@linaro.org>
Wed, 15 Nov 2017 16:21:53 +0000 (16:21 +0000)
committerArd Biesheuvel <ard.biesheuvel@linaro.org>
Fri, 8 Dec 2017 16:30:20 +0000 (16:30 +0000)
These modules have been imported into edk2-platforms where they belong
so remove them from the main EDK2 branch.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
24 files changed:
ArmPlatformPkg/FileSystem/BootMonFs/BootMonFs.inf [deleted file]
ArmPlatformPkg/FileSystem/BootMonFs/BootMonFsApi.h [deleted file]
ArmPlatformPkg/FileSystem/BootMonFs/BootMonFsDir.c [deleted file]
ArmPlatformPkg/FileSystem/BootMonFs/BootMonFsEntryPoint.c [deleted file]
ArmPlatformPkg/FileSystem/BootMonFs/BootMonFsHw.h [deleted file]
ArmPlatformPkg/FileSystem/BootMonFs/BootMonFsImages.c [deleted file]
ArmPlatformPkg/FileSystem/BootMonFs/BootMonFsInternal.h [deleted file]
ArmPlatformPkg/FileSystem/BootMonFs/BootMonFsOpenClose.c [deleted file]
ArmPlatformPkg/FileSystem/BootMonFs/BootMonFsReadWrite.c [deleted file]
ArmPlatformPkg/FileSystem/BootMonFs/BootMonFsUnsupported.c [deleted file]
ArmPlatformPkg/Include/Guid/BootMonFsFileInfo.h [deleted file]
ArmPlatformPkg/Include/Library/ArmShellCmdLib.h [deleted file]
ArmPlatformPkg/Library/ArmShellCmdRunAxf/ArmShellCmdRunAxf.c [deleted file]
ArmPlatformPkg/Library/ArmShellCmdRunAxf/ArmShellCmdRunAxf.h [deleted file]
ArmPlatformPkg/Library/ArmShellCmdRunAxf/ArmShellCmdRunAxf.inf [deleted file]
ArmPlatformPkg/Library/ArmShellCmdRunAxf/ArmShellCmdRunAxf.uni [deleted file]
ArmPlatformPkg/Library/ArmShellCmdRunAxf/BootMonFsLoader.c [deleted file]
ArmPlatformPkg/Library/ArmShellCmdRunAxf/BootMonFsLoader.h [deleted file]
ArmPlatformPkg/Library/ArmShellCmdRunAxf/ElfLoader.c [deleted file]
ArmPlatformPkg/Library/ArmShellCmdRunAxf/ElfLoader.h [deleted file]
ArmPlatformPkg/Library/ArmShellCmdRunAxf/RunAxf.c [deleted file]
ArmPlatformPkg/Library/ArmShellCmdRunAxf/elf32.h [deleted file]
ArmPlatformPkg/Library/ArmShellCmdRunAxf/elf64.h [deleted file]
ArmPlatformPkg/Library/ArmShellCmdRunAxf/elf_common.h [deleted file]

diff --git a/ArmPlatformPkg/FileSystem/BootMonFs/BootMonFs.inf b/ArmPlatformPkg/FileSystem/BootMonFs/BootMonFs.inf
deleted file mode 100644 (file)
index b42d205..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-#/** @file\r
-#  Support for ARM Boot Monitor File System\r
-#\r
-#  Copyright (c) 2012-2015, ARM Ltd. All rights reserved.<BR>\r
-#\r
-#  This program and the accompanying materials\r
-#  are licensed and made available under the terms and conditions of the BSD License\r
-#  which accompanies this distribution.  The full text of the license may be found at\r
-#  http://opensource.org/licenses/bsd-license.php\r
-#\r
-#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-#\r
-#**/\r
-\r
-[Defines]\r
-  INF_VERSION                    = 0x00010005\r
-  BASE_NAME                      = BootMonFs\r
-  FILE_GUID                      = 7abbc454-f737-4322-931c-b1bb62a01d6f\r
-  MODULE_TYPE                    = UEFI_DRIVER\r
-  VERSION_STRING                 = 1.0\r
-\r
-  ENTRY_POINT                    = BootMonFsEntryPoint\r
-\r
-[Sources]\r
-  BootMonFsEntryPoint.c\r
-  BootMonFsOpenClose.c\r
-  BootMonFsDir.c\r
-  BootMonFsImages.c\r
-  BootMonFsReadWrite.c\r
-  BootMonFsUnsupported.c\r
-\r
-[Packages]\r
-  ArmPlatformPkg/ArmPlatformPkg.dec\r
-  MdePkg/MdePkg.dec\r
-  MdeModulePkg/MdeModulePkg.dec\r
-\r
-[LibraryClasses]\r
-  BaseLib\r
-  DevicePathLib\r
-  MemoryAllocationLib\r
-  PrintLib\r
-  UefiDriverEntryPoint\r
-  UefiLib\r
-\r
-[Guids]\r
-  gArmBootMonFsFileInfoGuid\r
-  gEfiFileSystemInfoGuid\r
-  gEfiFileInfoGuid\r
-  gEfiFileSystemVolumeLabelInfoIdGuid\r
-\r
-[Pcd]\r
-  gArmPlatformTokenSpaceGuid.PcdBootMonFsSupportedDevicePaths\r
-\r
-[Protocols]\r
-  gEfiDiskIoProtocolGuid\r
-  gEfiBlockIoProtocolGuid\r
-  gEfiSimpleFileSystemProtocolGuid\r
-  gEfiDevicePathProtocolGuid\r
-  gEfiDevicePathFromTextProtocolGuid\r
-\r
diff --git a/ArmPlatformPkg/FileSystem/BootMonFs/BootMonFsApi.h b/ArmPlatformPkg/FileSystem/BootMonFs/BootMonFsApi.h
deleted file mode 100644 (file)
index d690520..0000000
+++ /dev/null
@@ -1,388 +0,0 @@
-/** @file\r
-*\r
-*  Copyright (c) 2012-2014, ARM Limited. All rights reserved.\r
-*\r
-*  This program and the accompanying materials\r
-*  are licensed and made available under the terms and conditions of the BSD License\r
-*  which accompanies this distribution.  The full text of the license may be found at\r
-*  http://opensource.org/licenses/bsd-license.php\r
-*\r
-*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-*\r
-**/\r
-\r
-#ifndef __BOOTMON_FS_API_H\r
-#define __BOOTMON_FS_API_H\r
-\r
-#include <Protocol/SimpleFileSystem.h>\r
-\r
-EFI_STATUS\r
-BootMonFsInitialize (\r
-  IN BOOTMON_FS_INSTANCE *Instance\r
-  );\r
-\r
-UINT32\r
-BootMonFsChecksum (\r
-  IN VOID   *Data,\r
-  IN UINT32 Size\r
-  );\r
-\r
-EFI_STATUS\r
-BootMonFsComputeFooterChecksum (\r
-  IN OUT HW_IMAGE_DESCRIPTION *Footer\r
-  );\r
-\r
-EFIAPI\r
-EFI_STATUS\r
-OpenBootMonFsOpenVolume (\r
-  IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *This,\r
-  OUT EFI_FILE_PROTOCOL              **Root\r
-  );\r
-\r
-UINT32\r
-BootMonFsGetImageLength (\r
-  IN BOOTMON_FS_FILE      *File\r
-  );\r
-\r
-UINTN\r
-BootMonFsGetPhysicalSize (\r
-  IN BOOTMON_FS_FILE* File\r
-  );\r
-\r
-EFI_STATUS\r
-BootMonFsCreateFile (\r
-  IN  BOOTMON_FS_INSTANCE *Instance,\r
-  OUT BOOTMON_FS_FILE     **File\r
-  );\r
-\r
-EFIAPI\r
-EFI_STATUS\r
-BootMonFsGetInfo (\r
-  IN EFI_FILE_PROTOCOL  *This,\r
-  IN EFI_GUID           *InformationType,\r
-  IN OUT UINTN          *BufferSize,\r
-  OUT VOID              *Buffer\r
-  );\r
-\r
-EFIAPI\r
-EFI_STATUS\r
-BootMonFsReadDirectory (\r
-  IN EFI_FILE_PROTOCOL    *This,\r
-  IN OUT UINTN            *BufferSize,\r
-  OUT VOID                *Buffer\r
-  );\r
-\r
-EFIAPI\r
-EFI_STATUS\r
-BootMonFsFlushDirectory (\r
-  IN EFI_FILE_PROTOCOL  *This\r
-  );\r
-\r
-/**\r
-  Flush all modified data associated with a file to a device.\r
-\r
-  @param[in]  This  A pointer to the EFI_FILE_PROTOCOL instance that is the\r
-                    file handle to flush.\r
-\r
-  @retval  EFI_SUCCESS            The data was flushed.\r
-  @retval  EFI_ACCESS_DENIED      The file was opened read-only.\r
-  @retval  EFI_DEVICE_ERROR       The device reported an error.\r
-  @retval  EFI_VOLUME_FULL        The volume is full.\r
-  @retval  EFI_OUT_OF_RESOURCES   Not enough resources were available to flush the data.\r
-  @retval  EFI_INVALID_PARAMETER  At least one of the parameters is invalid.\r
-\r
-**/\r
-EFIAPI\r
-EFI_STATUS\r
-BootMonFsFlushFile (\r
-  IN EFI_FILE_PROTOCOL  *This\r
-  );\r
-\r
-/**\r
-  Close a specified file handle.\r
-\r
-  @param[in]  This  A pointer to the EFI_FILE_PROTOCOL instance that is the file\r
-                    handle to close.\r
-\r
-  @retval  EFI_SUCCESS            The file was closed.\r
-  @retval  EFI_INVALID_PARAMETER  The parameter "This" is NULL or is not an open\r
-                                  file handle.\r
-\r
-**/\r
-EFIAPI\r
-EFI_STATUS\r
-BootMonFsCloseFile (\r
-  IN EFI_FILE_PROTOCOL  *This\r
-  );\r
-\r
-/**\r
-  Open a file on the boot monitor file system.\r
-\r
-  The boot monitor file system does not allow for sub-directories. There is only\r
-  one directory, the root one. On any attempt to create a directory, the function\r
-  returns in error with the EFI_WRITE_PROTECTED error code.\r
-\r
-  @param[in]   This        A pointer to the EFI_FILE_PROTOCOL instance that is\r
-                           the file handle to source location.\r
-  @param[out]  NewHandle   A pointer to the location to return the opened\r
-                           handle for the new file.\r
-  @param[in]   FileName    The Null-terminated string of the name of the file\r
-                           to be opened.\r
-  @param[in]   OpenMode    The mode to open the file : Read or Read/Write or\r
-                           Read/Write/Create\r
-  @param[in]   Attributes  Attributes of the file in case of a file creation\r
-\r
-  @retval  EFI_SUCCESS            The file was open.\r
-  @retval  EFI_NOT_FOUND          The specified file could not be found or the specified\r
-                                  directory in which to create a file could not be found.\r
-  @retval  EFI_DEVICE_ERROR       The device reported an error.\r
-  @retval  EFI_WRITE_PROTECTED    Attempt to create a directory. This is not possible\r
-                                  with the Boot Monitor file system.\r
-  @retval  EFI_OUT_OF_RESOURCES   Not enough resources were available to open the file.\r
-  @retval  EFI_INVALID_PARAMETER  At least one of the parameters is invalid.\r
-\r
-**/\r
-EFIAPI\r
-EFI_STATUS\r
-BootMonFsOpenFile (\r
-  IN EFI_FILE_PROTOCOL  *This,\r
-  OUT EFI_FILE_PROTOCOL **NewHandle,\r
-  IN CHAR16             *FileName,\r
-  IN UINT64             OpenMode,\r
-  IN UINT64             Attributes\r
-  );\r
-\r
-/**\r
-  Read data from an open file.\r
-\r
-  @param[in]      This        A pointer to the EFI_FILE_PROTOCOL instance that\r
-                              is the file handle to read data from.\r
-  @param[in out]  BufferSize  On input, the size of the Buffer. On output, the\r
-                              amount of data returned in Buffer. In both cases,\r
-                              the size is measured in bytes.\r
-  @param[out]     Buffer      The buffer into which the data is read.\r
-\r
-  @retval  EFI_SUCCESS            The data was read.\r
-  @retval  EFI_DEVICE_ERROR       On entry, the current file position is\r
-                                  beyond the end of the file, or the device\r
-                                  reported an error while performing the read\r
-                                  operation.\r
-  @retval  EFI_INVALID_PARAMETER  At least one of the parameters is invalid.\r
-\r
-**/\r
-EFIAPI\r
-EFI_STATUS\r
-BootMonFsReadFile (\r
-  IN EFI_FILE_PROTOCOL  *This,\r
-  IN OUT UINTN          *BufferSize,\r
-  OUT VOID              *Buffer\r
-  );\r
-\r
-EFIAPI\r
-EFI_STATUS\r
-BootMonFsSetDirPosition (\r
-  IN EFI_FILE_PROTOCOL  *This,\r
-  IN UINT64             Position\r
-  );\r
-\r
-EFIAPI\r
-EFI_STATUS\r
-BootMonFsGetPosition (\r
-  IN EFI_FILE_PROTOCOL  *This,\r
-  OUT UINT64            *Position\r
-  );\r
-\r
-/**\r
-  Write data to an open file.\r
-\r
-  The data is not written to the flash yet. It will be written when the file\r
-  will be either read, closed or flushed.\r
-\r
-  @param[in]      This        A pointer to the EFI_FILE_PROTOCOL instance that\r
-                              is the file handle to write data to.\r
-  @param[in out]  BufferSize  On input, the size of the Buffer. On output, the\r
-                              size of the data actually written. In both cases,\r
-                              the size is measured in bytes.\r
-  @param[in]      Buffer      The buffer of data to write.\r
-\r
-  @retval  EFI_SUCCESS            The data was written.\r
-  @retval  EFI_ACCESS_DENIED      The file was opened read only.\r
-  @retval  EFI_OUT_OF_RESOURCES   Unable to allocate the buffer to store the\r
-                                  data to write.\r
-  @retval  EFI_INVALID_PARAMETER  At least one of the parameters is invalid.\r
-\r
-**/\r
-EFIAPI\r
-EFI_STATUS\r
-BootMonFsWriteFile (\r
-  IN EFI_FILE_PROTOCOL  *This,\r
-  IN OUT UINTN          *BufferSize,\r
-  IN VOID               *Buffer\r
-  );\r
-\r
-EFIAPI\r
-EFI_STATUS\r
-BootMonFsDeleteFail (\r
-  IN EFI_FILE_PROTOCOL *This\r
-  );\r
-\r
-/**\r
-  Close and delete a file from the boot monitor file system.\r
-\r
-  @param[in]  This  A pointer to the EFI_FILE_PROTOCOL instance that is the file\r
-                    handle to delete.\r
-\r
-  @retval  EFI_SUCCESS              The file was closed and deleted.\r
-  @retval  EFI_INVALID_PARAMETER    The parameter "This" is NULL or is not an open\r
-                                    file handle.\r
-  @retval  EFI_WARN_DELETE_FAILURE  The handle was closed, but the file was not deleted.\r
-\r
-**/\r
-EFIAPI\r
-EFI_STATUS\r
-BootMonFsDelete (\r
-  IN EFI_FILE_PROTOCOL *This\r
-  );\r
-\r
-/**\r
-  Set a file's current position.\r
-\r
-  @param[in]  This      A pointer to the EFI_FILE_PROTOCOL instance that is\r
-                        the file handle to set the requested position on.\r
-  @param[in]  Position  The byte position from the start of the file to set.\r
-\r
-  @retval  EFI_SUCCESS            The position was set.\r
-  @retval  EFI_INVALID_PARAMETER  At least one of the parameters is invalid.\r
-\r
-**/\r
-EFIAPI\r
-EFI_STATUS\r
-BootMonFsSetPosition (\r
-  IN EFI_FILE_PROTOCOL  *This,\r
-  IN UINT64             Position\r
-  );\r
-\r
-/**\r
-  Return a file's current position.\r
-\r
-  @param[in]   This      A pointer to the EFI_FILE_PROTOCOL instance that is\r
-                         the file handle to get the current position on.\r
-  @param[out]  Position  The address to return the file's current position value.\r
-\r
-  @retval  EFI_SUCCESS            The position was returned.\r
-  @retval  EFI_INVALID_PARAMETER  At least one of the parameters is invalid.\r
-\r
-**/\r
-EFIAPI\r
-EFI_STATUS\r
-BootMonFsGetPosition(\r
-  IN EFI_FILE_PROTOCOL  *This,\r
-  OUT UINT64            *Position\r
-  );\r
-\r
-//\r
-// UNSUPPORTED OPERATIONS\r
-//\r
-\r
-EFIAPI\r
-EFI_STATUS\r
-BootMonFsGetPositionUnsupported (\r
-  IN EFI_FILE_PROTOCOL  *This,\r
-  OUT UINT64            *Position\r
-  );\r
-\r
-/**\r
-  Set information about a file or a volume.\r
-\r
-  @param[in]  This             A pointer to the EFI_FILE_PROTOCOL instance that\r
-                               is the file handle the information is for.\r
-  @param[in]  InformationType  The type identifier for the information being set :\r
-                               EFI_FILE_INFO_ID or EFI_FILE_SYSTEM_INFO_ID or\r
-                               EFI_FILE_SYSTEM_VOLUME_LABEL_ID\r
-  @param[in]  BufferSize       The size, in bytes, of Buffer.\r
-  @param[in]  Buffer           A pointer to the data buffer to write. The type of the\r
-                               data inside the buffer is indicated by InformationType.\r
-\r
-  @retval  EFI_SUCCESS            The information was set.\r
-  @retval  EFI_UNSUPPORTED        The InformationType is not known.\r
-  @retval  EFI_DEVICE_ERROR       The last issued semi-hosting operation failed.\r
-  @retval  EFI_ACCESS_DENIED      An attempt is made to change the name of a file\r
-                                  to a file that is already present.\r
-  @retval  EFI_ACCESS_DENIED      An attempt is being made to change the\r
-                                  EFI_FILE_DIRECTORY Attribute.\r
-  @retval  EFI_ACCESS_DENIED      InformationType is EFI_FILE_INFO_ID and\r
-                                  the file was opened in read-only mode and an\r
-                                  attempt is being made to modify a field other\r
-                                  than Attribute.\r
-  @retval  EFI_WRITE_PROTECTED    An attempt is being made to modify a read-only\r
-                                  attribute.\r
-  @retval  EFI_BAD_BUFFER_SIZE    The size of the buffer is lower than that indicated by\r
-                                  the data inside the buffer.\r
-  @retval  EFI_OUT_OF_RESOURCES   A allocation needed to process the request failed.\r
-  @retval  EFI_INVALID_PARAMETER  At least one of the parameters is invalid.\r
-\r
-**/\r
-EFIAPI\r
-EFI_STATUS\r
-BootMonFsSetInfo (\r
-  IN EFI_FILE_PROTOCOL  *This,\r
-  IN EFI_GUID           *InformationType,\r
-  IN UINTN              BufferSize,\r
-  IN VOID               *Buffer\r
-  );\r
-\r
-//\r
-// Directory API\r
-//\r
-\r
-EFI_STATUS\r
-BootMonFsOpenDirectory (\r
-  OUT EFI_FILE_PROTOCOL **NewHandle,\r
-  IN CHAR16             *FileName,\r
-  IN BOOTMON_FS_INSTANCE *Volume\r
-  );\r
-\r
-//\r
-// Internal API\r
-//\r
-\r
-/**\r
-  Search for a file given its name coded in Ascii.\r
-\r
-  When searching through the files of the volume, if a file is currently not\r
-  open, its name was written on the media and is kept in RAM in the\r
-  "HwDescription.Footer.Filename[]" field of the file's description.\r
-\r
-  If a file is currently open, its name might not have been written on the\r
-  media yet, and as the "HwDescription" is a mirror in RAM of what is on the\r
-  media the "HwDescription.Footer.Filename[]" might be outdated. In that case,\r
-  the up to date name of the file is stored in the "Info" field of the file's\r
-  description.\r
-\r
-  @param[in]   Instance       Pointer to the description of the volume in which\r
-                              the file has to be search for.\r
-  @param[in]   AsciiFileName  Name of the file.\r
-\r
-  @param[out]  File           Pointer to the description of the file if the\r
-                              file was found.\r
-\r
-  @retval  EFI_SUCCESS    The file was found.\r
-  @retval  EFI_NOT_FOUND  The file was not found.\r
-\r
-**/\r
-EFI_STATUS\r
-BootMonGetFileFromAsciiFileName (\r
-  IN  BOOTMON_FS_INSTANCE   *Instance,\r
-  IN  CHAR8*                AsciiFileName,\r
-  OUT BOOTMON_FS_FILE       **File\r
-  );\r
-\r
-EFI_STATUS\r
-BootMonGetFileFromPosition (\r
-  IN  BOOTMON_FS_INSTANCE   *Instance,\r
-  IN  UINTN                 Position,\r
-  OUT BOOTMON_FS_FILE       **File\r
-  );\r
-\r
-#endif\r
diff --git a/ArmPlatformPkg/FileSystem/BootMonFs/BootMonFsDir.c b/ArmPlatformPkg/FileSystem/BootMonFs/BootMonFsDir.c
deleted file mode 100644 (file)
index 64ea0ec..0000000
+++ /dev/null
@@ -1,766 +0,0 @@
-/** @file\r
-*\r
-*  Copyright (c) 2012-2014, ARM Limited. All rights reserved.\r
-*\r
-*  This program and the accompanying materials\r
-*  are licensed and made available under the terms and conditions of the BSD License\r
-*  which accompanies this distribution.  The full text of the license may be found at\r
-*  http://opensource.org/licenses/bsd-license.php\r
-*\r
-*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-*\r
-**/\r
-\r
-#include "BootMonFsInternal.h"\r
-\r
-EFIAPI\r
-EFI_STATUS\r
-OpenBootMonFsOpenVolume (\r
-  IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *This,\r
-  OUT EFI_FILE_PROTOCOL              **Root\r
-  )\r
-{\r
-  BOOTMON_FS_INSTANCE *Instance;\r
-\r
-  Instance = BOOTMON_FS_FROM_FS_THIS (This);\r
-  if (Instance == NULL) {\r
-    return EFI_DEVICE_ERROR;\r
-  }\r
-\r
-  Instance->RootFile->Info->Attribute = EFI_FILE_READ_ONLY | EFI_FILE_DIRECTORY;\r
-\r
-  *Root = &Instance->RootFile->File;\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-UINT32\r
-BootMonFsGetImageLength (\r
-  IN BOOTMON_FS_FILE      *File\r
-  )\r
-{\r
-  UINT32                   Index;\r
-  UINT32                   FileSize;\r
-  LIST_ENTRY              *RegionToFlushLink;\r
-  BOOTMON_FS_FILE_REGION  *Region;\r
-\r
-  FileSize = 0;\r
-\r
-  // Look at all Flash areas to determine file size\r
-  for (Index = 0; Index < HW_IMAGE_DESCRIPTION_REGION_MAX; Index++) {\r
-    FileSize += File->HwDescription.Region[Index].Size;\r
-  }\r
-\r
-  // Add the regions that have not been flushed yet\r
-  for (RegionToFlushLink = GetFirstNode (&File->RegionToFlushLink);\r
-       !IsNull (&File->RegionToFlushLink, RegionToFlushLink);\r
-       RegionToFlushLink = GetNextNode (&File->RegionToFlushLink, RegionToFlushLink)\r
-       )\r
-  {\r
-    Region = (BOOTMON_FS_FILE_REGION*)RegionToFlushLink;\r
-    if (Region->Offset + Region->Size > FileSize) {\r
-      FileSize += Region->Offset + Region->Size;\r
-    }\r
-  }\r
-\r
-  return FileSize;\r
-}\r
-\r
-UINTN\r
-BootMonFsGetPhysicalSize (\r
-  IN BOOTMON_FS_FILE* File\r
-  )\r
-{\r
-  // Return 0 for files that haven't yet been flushed to media\r
-  if (File->HwDescription.RegionCount == 0) {\r
-    return 0;\r
-  }\r
-\r
-  return ((File->HwDescription.BlockEnd - File->HwDescription.BlockStart) + 1 )\r
-          * File->Instance->Media->BlockSize;\r
-}\r
-\r
-EFIAPI\r
-EFI_STATUS\r
-BootMonFsSetDirPosition (\r
-  IN EFI_FILE_PROTOCOL  *This,\r
-  IN UINT64             Position\r
-  )\r
-{\r
-  BOOTMON_FS_FILE       *File;\r
-\r
-  File = BOOTMON_FS_FILE_FROM_FILE_THIS (This);\r
-  if (File == NULL) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-  // UEFI Spec section 12.5:\r
-  // "The seek request for nonzero is not valid on open directories."\r
-  if (Position != 0) {\r
-    return EFI_UNSUPPORTED;\r
-  }\r
-  File->Position = Position;\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-EFI_STATUS\r
-BootMonFsOpenDirectory (\r
-  OUT EFI_FILE_PROTOCOL **NewHandle,\r
-  IN CHAR16             *FileName,\r
-  IN BOOTMON_FS_INSTANCE *Volume\r
-  )\r
-{\r
-  ASSERT(0);\r
-\r
-  return EFI_UNSUPPORTED;\r
-}\r
-\r
-STATIC\r
-EFI_STATUS\r
-GetFileSystemVolumeLabelInfo (\r
-  IN BOOTMON_FS_INSTANCE *Instance,\r
-  IN OUT UINTN          *BufferSize,\r
-  OUT VOID              *Buffer\r
-  )\r
-{\r
-  UINTN                         Size;\r
-  EFI_FILE_SYSTEM_VOLUME_LABEL *Label;\r
-  EFI_STATUS                    Status;\r
-\r
-  Label = Buffer;\r
-\r
-  // Value returned by StrSize includes null terminator.\r
-  Size = SIZE_OF_EFI_FILE_SYSTEM_VOLUME_LABEL\r
-         + StrSize (Instance->FsInfo.VolumeLabel);\r
-\r
-  if (*BufferSize >= Size) {\r
-    CopyMem (&Label->VolumeLabel, &Instance->FsInfo.VolumeLabel, Size);\r
-    Status = EFI_SUCCESS;\r
-  } else {\r
-    Status = EFI_BUFFER_TOO_SMALL;\r
-  }\r
-  *BufferSize = Size;\r
-  return Status;\r
-}\r
-\r
-// Helper function that calculates a rough "free space" by:\r
-// - Taking the media size\r
-// - Subtracting the sum of all file sizes\r
-// - Subtracting the block size times the number of files\r
-//    (To account for the blocks containing the HW_IMAGE_INFO\r
-STATIC\r
-UINT64\r
-ComputeFreeSpace (\r
-  IN BOOTMON_FS_INSTANCE *Instance\r
-  )\r
-{\r
-  LIST_ENTRY   *FileLink;\r
-  UINT64        FileSizeSum;\r
-  UINT64        MediaSize;\r
-  UINTN         NumFiles;\r
-  EFI_BLOCK_IO_MEDIA *Media;\r
-  BOOTMON_FS_FILE *File;\r
-\r
-  Media = Instance->BlockIo->Media;\r
-  MediaSize = Media->BlockSize * (Media->LastBlock + 1);\r
-\r
-  NumFiles = 0;\r
-  FileSizeSum = 0;\r
-  for (FileLink = GetFirstNode (&Instance->RootFile->Link);\r
-         !IsNull (&Instance->RootFile->Link, FileLink);\r
-         FileLink = GetNextNode (&Instance->RootFile->Link, FileLink)\r
-         )\r
-  {\r
-    File = BOOTMON_FS_FILE_FROM_LINK_THIS (FileLink);\r
-    FileSizeSum += BootMonFsGetImageLength (File);\r
-\r
-    NumFiles++;\r
-  }\r
-\r
-  return MediaSize - (FileSizeSum + (Media->BlockSize + NumFiles));\r
-}\r
-\r
-STATIC\r
-EFI_STATUS\r
-GetFilesystemInfo (\r
-  IN BOOTMON_FS_INSTANCE *Instance,\r
-  IN OUT UINTN          *BufferSize,\r
-  OUT VOID              *Buffer\r
-  )\r
-{\r
-  EFI_STATUS              Status;\r
-\r
-  if (*BufferSize >= Instance->FsInfo.Size) {\r
-    Instance->FsInfo.FreeSpace = ComputeFreeSpace (Instance);\r
-    CopyMem (Buffer, &Instance->FsInfo, Instance->FsInfo.Size);\r
-    Status = EFI_SUCCESS;\r
-  } else {\r
-    Status = EFI_BUFFER_TOO_SMALL;\r
-  }\r
-\r
-  *BufferSize = Instance->FsInfo.Size;\r
-  return Status;\r
-}\r
-\r
-STATIC\r
-EFI_STATUS\r
-GetFileInfo (\r
-  IN BOOTMON_FS_INSTANCE  *Instance,\r
-  IN BOOTMON_FS_FILE      *File,\r
-  IN OUT UINTN            *BufferSize,\r
-  OUT VOID                *Buffer\r
-  )\r
-{\r
-  EFI_FILE_INFO  *Info;\r
-  UINTN          ResultSize;\r
-\r
-  ResultSize = SIZE_OF_EFI_FILE_INFO + StrSize (File->Info->FileName);\r
-\r
-  if (*BufferSize < ResultSize) {\r
-    *BufferSize = ResultSize;\r
-    return EFI_BUFFER_TOO_SMALL;\r
-  }\r
-\r
-  Info = Buffer;\r
-\r
-  CopyMem (Info, File->Info, ResultSize);\r
-  // Size of the information\r
-  Info->Size = ResultSize;\r
-\r
-  *BufferSize = ResultSize;\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-STATIC\r
-EFI_STATUS\r
-GetBootMonFsFileInfo (\r
-  IN BOOTMON_FS_INSTANCE *Instance,\r
-  IN BOOTMON_FS_FILE     *File,\r
-  IN OUT UINTN           *BufferSize,\r
-  OUT VOID               *Buffer\r
-  )\r
-{\r
-  EFI_STATUS             Status;\r
-  BOOTMON_FS_FILE_INFO   *Info;\r
-  UINTN                  ResultSize;\r
-  UINTN                  Index;\r
-\r
-  if (File == Instance->RootFile) {\r
-    Status = EFI_UNSUPPORTED;\r
-  } else {\r
-    ResultSize = SIZE_OF_BOOTMON_FS_FILE_INFO;\r
-\r
-    if (*BufferSize < ResultSize) {\r
-      *BufferSize = ResultSize;\r
-      Status = EFI_BUFFER_TOO_SMALL;\r
-    } else {\r
-      Info = Buffer;\r
-\r
-      // Zero out the structure\r
-      ZeroMem (Info, ResultSize);\r
-\r
-      // Fill in the structure\r
-      Info->Size = ResultSize;\r
-\r
-      Info->EntryPoint  = File->HwDescription.EntryPoint;\r
-      Info->RegionCount = File->HwDescription.RegionCount;\r
-      for (Index = 0; Index < File->HwDescription.RegionCount; Index++) {\r
-        Info->Region[Index].LoadAddress = File->HwDescription.Region[Index].LoadAddress;\r
-        Info->Region[Index].Size        = File->HwDescription.Region[Index].Size;\r
-        Info->Region[Index].Offset      = File->HwDescription.Region[Index].Offset;\r
-        Info->Region[Index].Checksum    = File->HwDescription.Region[Index].Checksum;\r
-      }\r
-      *BufferSize = ResultSize;\r
-      Status = EFI_SUCCESS;\r
-    }\r
-  }\r
-\r
-  return Status;\r
-}\r
-\r
-/**\r
-  Set the name of a file.\r
-\r
-  This is a helper function for SetFileInfo().\r
-\r
-  @param[in]  Instance  A pointer to the description of the volume\r
-                        the file belongs to.\r
-  @param[in]  File      A pointer to the description of the file.\r
-  @param[in]  FileName  A pointer to the new name of the file.\r
-\r
-  @retval  EFI_SUCCESS        The name was set.\r
-  @retval  EFI_ACCESS_DENIED  An attempt is made to change the name of a file\r
-                              to a file that is already present.\r
-\r
-**/\r
-STATIC\r
-EFI_STATUS\r
-SetFileName (\r
-  IN  BOOTMON_FS_INSTANCE  *Instance,\r
-  IN  BOOTMON_FS_FILE      *File,\r
-  IN  CONST CHAR16         *FileName\r
-  )\r
-{\r
-  CHAR8            AsciiFileName[MAX_NAME_LENGTH];\r
-  BOOTMON_FS_FILE  *SameFile;\r
-\r
-  // If the file path start with a \ strip it. The EFI Shell may\r
-  // insert a \ in front of the file name.\r
-  if (FileName[0] == L'\\') {\r
-    FileName++;\r
-  }\r
-\r
-  UnicodeStrToAsciiStrS (FileName, AsciiFileName, MAX_NAME_LENGTH);\r
-\r
-  if (BootMonGetFileFromAsciiFileName (\r
-        File->Instance,\r
-        AsciiFileName,\r
-        &SameFile\r
-        ) != EFI_NOT_FOUND) {\r
-    // A file with that name already exists.\r
-    return EFI_ACCESS_DENIED;\r
-  } else {\r
-    // OK, change the filename.\r
-    AsciiStrToUnicodeStrS (AsciiFileName, File->Info->FileName,\r
-      (File->Info->Size - SIZE_OF_EFI_FILE_INFO) / sizeof (CHAR16));\r
-    return EFI_SUCCESS;\r
-  }\r
-}\r
-\r
-/**\r
-  Set the size of a file.\r
-\r
-  This is a helper function for SetFileInfo().\r
-\r
-  @param[in]  Instance  A pointer to the description of the volume\r
-                        the file belongs to.\r
-  @param[in]  File      A pointer to the description of the file.\r
-  @param[in]  NewSize   The requested new size for the file.\r
-\r
-  @retval  EFI_SUCCESS           The size was set.\r
-  @retval  EFI_OUT_OF_RESOURCES  An allocation needed to process the request failed.\r
-\r
-**/\r
-STATIC\r
-EFI_STATUS\r
-SetFileSize (\r
-  IN BOOTMON_FS_INSTANCE  *Instance,\r
-  IN BOOTMON_FS_FILE      *BootMonFsFile,\r
-  IN UINTN                 NewSize\r
-  )\r
-{\r
-  EFI_STATUS              Status;\r
-  UINT32                  OldSize;\r
-  LIST_ENTRY              *RegionToFlushLink;\r
-  LIST_ENTRY              *NextRegionToFlushLink;\r
-  BOOTMON_FS_FILE_REGION  *Region;\r
-  EFI_FILE_PROTOCOL       *File;\r
-  CHAR8                   *Buffer;\r
-  UINTN                   BufferSize;\r
-  UINT64                  StoredPosition;\r
-\r
-  OldSize = BootMonFsFile->Info->FileSize;\r
-\r
-  //\r
-  // In case of file truncation, force the regions waiting for writing to\r
-  // not overflow the new size of the file.\r
-  //\r
-  if (NewSize < OldSize) {\r
-    for (RegionToFlushLink = GetFirstNode (&BootMonFsFile->RegionToFlushLink);\r
-         !IsNull (&BootMonFsFile->RegionToFlushLink, RegionToFlushLink);\r
-         )\r
-    {\r
-      NextRegionToFlushLink = GetNextNode (&BootMonFsFile->RegionToFlushLink, RegionToFlushLink);\r
-      Region = (BOOTMON_FS_FILE_REGION*)RegionToFlushLink;\r
-      if (Region->Offset > NewSize) {\r
-        RemoveEntryList (RegionToFlushLink);\r
-        FreePool (Region->Buffer);\r
-        FreePool (Region);\r
-      } else {\r
-        Region->Size = MIN (Region->Size, NewSize - Region->Offset);\r
-      }\r
-      RegionToFlushLink = NextRegionToFlushLink;\r
-    }\r
-\r
-  } else if (NewSize > OldSize) {\r
-    // Increasing a file's size is potentially complicated as it may require\r
-    // moving the image description on media. The simplest way to do it is to\r
-    // seek past the end of the file (which is valid in UEFI) and perform a\r
-    // Write.\r
-    File = &BootMonFsFile->File;\r
-\r
-    // Save position\r
-    Status = File->GetPosition (File, &StoredPosition);\r
-    if (EFI_ERROR (Status)) {\r
-      return Status;\r
-    }\r
-    // Set position at the end of the file\r
-    Status = File->SetPosition (File, OldSize);\r
-    if (EFI_ERROR (Status)) {\r
-      return Status;\r
-    }\r
-\r
-    BufferSize = NewSize - OldSize;\r
-    Buffer = AllocateZeroPool (BufferSize);\r
-    if (Buffer == NULL) {\r
-      return EFI_OUT_OF_RESOURCES;\r
-    }\r
-\r
-    Status = File->Write (File, &BufferSize, Buffer);\r
-    FreePool (Buffer);\r
-    if (EFI_ERROR (Status)) {\r
-      return Status;\r
-    }\r
-\r
-    // Restore saved position\r
-    Status = File->SetPosition (File, StoredPosition);\r
-    if (EFI_ERROR (Status)) {\r
-      return Status;\r
-    }\r
-  }\r
-\r
-  BootMonFsFile->Info->FileSize = NewSize;\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
-  Set information about a file.\r
-\r
-  @param[in]  Instance  A pointer to the description of the volume\r
-                        the file belongs to.\r
-  @param[in]  File      A pointer to the description of the file.\r
-  @param[in]  Info      A pointer to the file information to write.\r
-\r
-  @retval  EFI_SUCCESS           The information was set.\r
-  @retval  EFI_ACCESS_DENIED     An attempt is being made to change the\r
-                                 EFI_FILE_DIRECTORY Attribute.\r
-  @retval  EFI_ACCESS_DENIED     The file was opened in read-only mode and an\r
-                                 attempt is being made to modify a field other\r
-                                 than Attribute.\r
-  @retval  EFI_ACCESS_DENIED     An attempt is made to change the name of a file\r
-                                 to a file that is already present.\r
-  @retval  EFI_WRITE_PROTECTED   An attempt is being made to modify a read-only\r
-                                 attribute.\r
-  @retval  EFI_OUT_OF_RESOURCES  An allocation needed to process the request\r
-                                 failed.\r
-\r
-**/\r
-STATIC\r
-EFI_STATUS\r
-SetFileInfo (\r
-  IN BOOTMON_FS_INSTANCE  *Instance,\r
-  IN BOOTMON_FS_FILE      *File,\r
-  IN EFI_FILE_INFO        *Info\r
-  )\r
-{\r
-  EFI_STATUS  Status;\r
-  BOOLEAN     FileSizeIsDifferent;\r
-  BOOLEAN     FileNameIsDifferent;\r
-  BOOLEAN     TimeIsDifferent;\r
-\r
-  //\r
-  // A directory can not be changed to a file and a file can\r
-  // not be changed to a directory.\r
-  //\r
-  if ((Info->Attribute & EFI_FILE_DIRECTORY)      !=\r
-      (File->Info->Attribute & EFI_FILE_DIRECTORY)  ) {\r
-    return EFI_ACCESS_DENIED;\r
-  }\r
-\r
-  FileSizeIsDifferent = (Info->FileSize != File->Info->FileSize);\r
-  FileNameIsDifferent = (StrnCmp (\r
-                           Info->FileName,\r
-                           File->Info->FileName,\r
-                           MAX_NAME_LENGTH - 1\r
-                           ) != 0);\r
-  //\r
-  // Check if the CreateTime, LastAccess or ModificationTime\r
-  // have been changed. The file system does not support file\r
-  // timestamps thus the three times in "File->Info" are\r
-  // always equal to zero. The following comparison actually\r
-  // checks if all three times are still equal to 0 or not.\r
-  //\r
-  TimeIsDifferent = CompareMem (\r
-                      &Info->CreateTime,\r
-                      &File->Info->CreateTime,\r
-                      3 * sizeof (EFI_TIME)\r
-                      ) != 0;\r
-\r
-  //\r
-  // For a file opened in read-only mode, only the Attribute field can be\r
-  // modified. The root directory open mode is forced to read-only at opening\r
-  // thus the following test protects the root directory to be somehow modified.\r
-  //\r
-  if (File->OpenMode == EFI_FILE_MODE_READ) {\r
-    if (FileSizeIsDifferent || FileNameIsDifferent || TimeIsDifferent) {\r
-      return EFI_ACCESS_DENIED;\r
-    }\r
-  }\r
-\r
-  if (TimeIsDifferent) {\r
-    return EFI_WRITE_PROTECTED;\r
-  }\r
-\r
-  if (FileSizeIsDifferent) {\r
-    Status = SetFileSize (Instance, File, Info->FileSize);\r
-    if (EFI_ERROR (Status)) {\r
-      return Status;\r
-    }\r
-  }\r
-\r
-  //\r
-  // Note down in RAM the Attribute field but we can not\r
-  // ask to store it in flash for the time being.\r
-  //\r
-  File->Info->Attribute = Info->Attribute;\r
-\r
-  if (FileNameIsDifferent) {\r
-    Status = SetFileName (Instance, File, Info->FileName);\r
-    if (EFI_ERROR (Status)) {\r
-      return Status;\r
-    }\r
-  }\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-EFIAPI\r
-EFI_STATUS\r
-BootMonFsGetInfo (\r
-  IN EFI_FILE_PROTOCOL  *This,\r
-  IN EFI_GUID           *InformationType,\r
-  IN OUT UINTN          *BufferSize,\r
-  OUT VOID              *Buffer\r
-  )\r
-{\r
-  EFI_STATUS           Status;\r
-  BOOTMON_FS_FILE     *File;\r
-  BOOTMON_FS_INSTANCE *Instance;\r
-\r
-  if ((This == NULL)                         ||\r
-      (InformationType == NULL)              ||\r
-      (BufferSize == NULL)                   ||\r
-      ((Buffer == NULL) && (*BufferSize > 0))  ) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-  File = BOOTMON_FS_FILE_FROM_FILE_THIS (This);\r
-  if (File->Info == NULL) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-  Instance = File->Instance;\r
-\r
-  // If the instance has not been initialized yet then do it ...\r
-  if (!Instance->Initialized) {\r
-    Status = BootMonFsInitialize (Instance);\r
-  } else {\r
-    Status = EFI_SUCCESS;\r
-  }\r
-\r
-  if (!EFI_ERROR (Status)) {\r
-    if (CompareGuid (InformationType, &gEfiFileSystemVolumeLabelInfoIdGuid)\r
-        != 0) {\r
-      Status = GetFileSystemVolumeLabelInfo (Instance, BufferSize, Buffer);\r
-    } else if (CompareGuid (InformationType, &gEfiFileSystemInfoGuid) != 0) {\r
-      Status = GetFilesystemInfo (Instance, BufferSize, Buffer);\r
-    } else if (CompareGuid (InformationType, &gEfiFileInfoGuid) != 0) {\r
-      Status = GetFileInfo (Instance, File, BufferSize, Buffer);\r
-    } else if (CompareGuid (InformationType, &gArmBootMonFsFileInfoGuid) != 0) {\r
-      Status = GetBootMonFsFileInfo (Instance, File, BufferSize, Buffer);\r
-    } else {\r
-      Status = EFI_UNSUPPORTED;\r
-    }\r
-  }\r
-\r
-  return Status;\r
-}\r
-\r
-/**\r
-  Set information about a file or a volume.\r
-\r
-  @param[in]  This             A pointer to the EFI_FILE_PROTOCOL instance that\r
-                               is the file handle the information is for.\r
-  @param[in]  InformationType  The type identifier for the information being set :\r
-                               EFI_FILE_INFO_ID or EFI_FILE_SYSTEM_INFO_ID or\r
-                               EFI_FILE_SYSTEM_VOLUME_LABEL_ID\r
-  @param[in]  BufferSize       The size, in bytes, of Buffer.\r
-  @param[in]  Buffer           A pointer to the data buffer to write. The type of the\r
-                               data inside the buffer is indicated by InformationType.\r
-\r
-  @retval  EFI_SUCCESS            The information was set.\r
-  @retval  EFI_UNSUPPORTED        The InformationType is not known.\r
-  @retval  EFI_DEVICE_ERROR       The last issued semi-hosting operation failed.\r
-  @retval  EFI_ACCESS_DENIED      An attempt is made to change the name of a file\r
-                                  to a file that is already present.\r
-  @retval  EFI_ACCESS_DENIED      An attempt is being made to change the\r
-                                  EFI_FILE_DIRECTORY Attribute.\r
-  @retval  EFI_ACCESS_DENIED      InformationType is EFI_FILE_INFO_ID and\r
-                                  the file was opened in read-only mode and an\r
-                                  attempt is being made to modify a field other\r
-                                  than Attribute.\r
-  @retval  EFI_WRITE_PROTECTED    An attempt is being made to modify a read-only\r
-                                  attribute.\r
-  @retval  EFI_BAD_BUFFER_SIZE    The size of the buffer is lower than that indicated by\r
-                                  the data inside the buffer.\r
-  @retval  EFI_OUT_OF_RESOURCES   A allocation needed to process the request failed.\r
-  @retval  EFI_INVALID_PARAMETER  At least one of the parameters is invalid.\r
-\r
-**/\r
-EFIAPI\r
-EFI_STATUS\r
-BootMonFsSetInfo (\r
-  IN EFI_FILE_PROTOCOL  *This,\r
-  IN EFI_GUID           *InformationType,\r
-  IN UINTN              BufferSize,\r
-  IN VOID               *Buffer\r
-  )\r
-{\r
-  BOOTMON_FS_FILE       *File;\r
-  EFI_FILE_INFO         *Info;\r
-  EFI_FILE_SYSTEM_INFO  *SystemInfo;\r
-\r
-  if ((This == NULL)            ||\r
-      (InformationType == NULL) ||\r
-      (Buffer == NULL)             ) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-  File = BOOTMON_FS_FILE_FROM_FILE_THIS (This);\r
-  if (File->Info == NULL) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-  if (CompareGuid (InformationType, &gEfiFileInfoGuid)) {\r
-    Info = Buffer;\r
-    if (Info->Size < (SIZE_OF_EFI_FILE_INFO + StrSize (Info->FileName))) {\r
-      return EFI_INVALID_PARAMETER;\r
-    }\r
-    if (BufferSize < Info->Size) {\r
-      return EFI_BAD_BUFFER_SIZE;\r
-    }\r
-    return (SetFileInfo (File->Instance, File, Info));\r
-  }\r
-\r
-  //\r
-  // The only writable field in the other two information types\r
-  // (i.e. EFI_FILE_SYSTEM_INFO and EFI_FILE_SYSTEM_VOLUME_LABEL) is the\r
-  // filesystem volume label. This can be retrieved with GetInfo, but it is\r
-  // hard-coded into this driver, not stored on media.\r
-  //\r
-\r
-  if (CompareGuid (InformationType, &gEfiFileSystemInfoGuid)) {\r
-    SystemInfo = Buffer;\r
-    if (SystemInfo->Size <\r
-        (SIZE_OF_EFI_FILE_SYSTEM_INFO + StrSize (SystemInfo->VolumeLabel))) {\r
-      return EFI_INVALID_PARAMETER;\r
-    }\r
-    if (BufferSize < SystemInfo->Size) {\r
-      return EFI_BAD_BUFFER_SIZE;\r
-    }\r
-    return EFI_WRITE_PROTECTED;\r
-  }\r
-\r
-  if (CompareGuid (InformationType, &gEfiFileSystemVolumeLabelInfoIdGuid)) {\r
-    return EFI_WRITE_PROTECTED;\r
-  }\r
-\r
-  return EFI_UNSUPPORTED;\r
-}\r
-\r
-EFIAPI\r
-EFI_STATUS\r
-BootMonFsReadDirectory (\r
-  IN EFI_FILE_PROTOCOL    *This,\r
-  IN OUT UINTN            *BufferSize,\r
-  OUT VOID                *Buffer\r
-  )\r
-{\r
-  BOOTMON_FS_INSTANCE *Instance;\r
-  BOOTMON_FS_FILE     *RootFile;\r
-  BOOTMON_FS_FILE     *File;\r
-  EFI_FILE_INFO       *Info;\r
-  UINTN               NameSize;\r
-  UINTN               ResultSize;\r
-  EFI_STATUS          Status;\r
-  UINTN               Index;\r
-\r
-  RootFile = BOOTMON_FS_FILE_FROM_FILE_THIS (This);\r
-  if (RootFile == NULL) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-  Instance = RootFile->Instance;\r
-  Status = BootMonGetFileFromPosition (Instance, RootFile->Position, &File);\r
-  if (EFI_ERROR (Status)) {\r
-    // No more file\r
-    *BufferSize = 0;\r
-    return EFI_SUCCESS;\r
-  }\r
-\r
-  NameSize   = AsciiStrLen (File->HwDescription.Footer.Filename) + 1;\r
-  ResultSize = SIZE_OF_EFI_FILE_INFO + (NameSize * sizeof (CHAR16));\r
-  if (*BufferSize < ResultSize) {\r
-    *BufferSize = ResultSize;\r
-    return EFI_BUFFER_TOO_SMALL;\r
-  }\r
-\r
-  // Zero out the structure\r
-  Info = Buffer;\r
-  ZeroMem (Info, ResultSize);\r
-\r
-  // Fill in the structure\r
-  Info->Size         = ResultSize;\r
-  Info->FileSize     = BootMonFsGetImageLength (File);\r
-  Info->PhysicalSize = BootMonFsGetPhysicalSize (File);\r
-  for (Index = 0; Index < NameSize; Index++) {\r
-    Info->FileName[Index] = File->HwDescription.Footer.Filename[Index];\r
-  }\r
-\r
-  *BufferSize = ResultSize;\r
-  RootFile->Position++;\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-EFIAPI\r
-EFI_STATUS\r
-BootMonFsFlushDirectory (\r
-  IN EFI_FILE_PROTOCOL  *This\r
-  )\r
-{\r
-  BOOTMON_FS_FILE *RootFile;\r
-  LIST_ENTRY      *ListFiles;\r
-  LIST_ENTRY      *Link;\r
-  BOOTMON_FS_FILE *File;\r
-\r
-  RootFile = BOOTMON_FS_FILE_FROM_FILE_THIS (This);\r
-  if (RootFile == NULL) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-  ListFiles = &RootFile->Link;\r
-\r
-  if (IsListEmpty (ListFiles)) {\r
-    return EFI_SUCCESS;\r
-  }\r
-\r
-  //\r
-  // Flush all the files that need to be flushed\r
-  //\r
-\r
-  // Go through all the list of files to flush them\r
-  for (Link = GetFirstNode (ListFiles);\r
-       !IsNull (ListFiles, Link);\r
-       Link = GetNextNode (ListFiles, Link)\r
-       )\r
-  {\r
-    File = BOOTMON_FS_FILE_FROM_LINK_THIS (Link);\r
-    File->File.Flush (&File->File);\r
-  }\r
-\r
-  return EFI_SUCCESS;\r
-}\r
diff --git a/ArmPlatformPkg/FileSystem/BootMonFs/BootMonFsEntryPoint.c b/ArmPlatformPkg/FileSystem/BootMonFs/BootMonFsEntryPoint.c
deleted file mode 100644 (file)
index a115085..0000000
+++ /dev/null
@@ -1,529 +0,0 @@
-/** @file\r
-*\r
-*  Copyright (c) 2012-2014, ARM Limited. All rights reserved.\r
-*\r
-*  This program and the accompanying materials\r
-*  are licensed and made available under the terms and conditions of the BSD License\r
-*  which accompanies this distribution.  The full text of the license may be found at\r
-*  http://opensource.org/licenses/bsd-license.php\r
-*\r
-*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-*\r
-**/\r
-\r
-#include <Library/BaseMemoryLib.h>\r
-#include <Library/DevicePathLib.h>\r
-#include <Library/MemoryAllocationLib.h>\r
-#include <Library/PrintLib.h>\r
-#include <Library/UefiBootServicesTableLib.h>\r
-\r
-#include <Protocol/DevicePathFromText.h>\r
-#include <Protocol/DriverBinding.h>\r
-\r
-#include "BootMonFsInternal.h"\r
-\r
-EFI_DEVICE_PATH* mBootMonFsSupportedDevicePaths;\r
-LIST_ENTRY       mInstances;\r
-\r
-EFI_FILE_PROTOCOL mBootMonFsRootTemplate = {\r
-  EFI_FILE_PROTOCOL_REVISION,\r
-  BootMonFsOpenFile,\r
-  BootMonFsCloseFile,\r
-  BootMonFsDeleteFail,\r
-  BootMonFsReadDirectory,\r
-  BootMonFsWriteFile,\r
-  BootMonFsGetPositionUnsupported,  // UEFI Spec: GetPosition not valid on dirs\r
-  BootMonFsSetDirPosition,\r
-  BootMonFsGetInfo,\r
-  BootMonFsSetInfo,\r
-  BootMonFsFlushDirectory\r
-};\r
-\r
-EFI_FILE_PROTOCOL mBootMonFsFileTemplate = {\r
-  EFI_FILE_PROTOCOL_REVISION,\r
-  BootMonFsOpenFile,\r
-  BootMonFsCloseFile,\r
-  BootMonFsDelete,\r
-  BootMonFsReadFile,\r
-  BootMonFsWriteFile,\r
-  BootMonFsGetPosition,\r
-  BootMonFsSetPosition,\r
-  BootMonFsGetInfo,\r
-  BootMonFsSetInfo,\r
-  BootMonFsFlushFile\r
-};\r
-\r
-/**\r
-  Search for a file given its name coded in Ascii.\r
-\r
-  When searching through the files of the volume, if a file is currently not\r
-  open, its name was written on the media and is kept in RAM in the\r
-  "HwDescription.Footer.Filename[]" field of the file's description.\r
-\r
-  If a file is currently open, its name might not have been written on the\r
-  media yet, and as the "HwDescription" is a mirror in RAM of what is on the\r
-  media the "HwDescription.Footer.Filename[]" might be outdated. In that case,\r
-  the up to date name of the file is stored in the "Info" field of the file's\r
-  description.\r
-\r
-  @param[in]   Instance       Pointer to the description of the volume in which\r
-                              the file has to be search for.\r
-  @param[in]   AsciiFileName  Name of the file.\r
-\r
-  @param[out]  File           Pointer to the description of the file if the\r
-                              file was found.\r
-\r
-  @retval  EFI_SUCCESS    The file was found.\r
-  @retval  EFI_NOT_FOUND  The file was not found.\r
-\r
-**/\r
-EFI_STATUS\r
-BootMonGetFileFromAsciiFileName (\r
-  IN  BOOTMON_FS_INSTANCE   *Instance,\r
-  IN  CHAR8*                AsciiFileName,\r
-  OUT BOOTMON_FS_FILE       **File\r
-  )\r
-{\r
-  LIST_ENTRY       *Entry;\r
-  BOOTMON_FS_FILE  *FileEntry;\r
-  CHAR8            OpenFileAsciiFileName[MAX_NAME_LENGTH];\r
-  CHAR8            *AsciiFileNameToCompare;\r
-\r
-  // Go through all the files in the list and return the file handle\r
-  for (Entry = GetFirstNode (&Instance->RootFile->Link);\r
-       !IsNull (&Instance->RootFile->Link, Entry);\r
-       Entry = GetNextNode (&Instance->RootFile->Link, Entry)\r
-       )\r
-  {\r
-    FileEntry = BOOTMON_FS_FILE_FROM_LINK_THIS (Entry);\r
-    if (FileEntry->Info != NULL) {\r
-      UnicodeStrToAsciiStrS (FileEntry->Info->FileName, OpenFileAsciiFileName,\r
-        MAX_NAME_LENGTH);\r
-      AsciiFileNameToCompare = OpenFileAsciiFileName;\r
-    } else {\r
-      AsciiFileNameToCompare = FileEntry->HwDescription.Footer.Filename;\r
-    }\r
-\r
-    if (AsciiStrCmp (AsciiFileNameToCompare, AsciiFileName) == 0) {\r
-      *File = FileEntry;\r
-      return EFI_SUCCESS;\r
-    }\r
-  }\r
-  return EFI_NOT_FOUND;\r
-}\r
-\r
-EFI_STATUS\r
-BootMonGetFileFromPosition (\r
-  IN  BOOTMON_FS_INSTANCE   *Instance,\r
-  IN  UINTN                 Position,\r
-  OUT BOOTMON_FS_FILE       **File\r
-  )\r
-{\r
-  LIST_ENTRY        *Entry;\r
-  BOOTMON_FS_FILE   *FileEntry;\r
-\r
-  // Go through all the files in the list and return the file handle\r
-  for (Entry = GetFirstNode (&Instance->RootFile->Link);\r
-       !IsNull (&Instance->RootFile->Link, Entry) && (&Instance->RootFile->Link != Entry);\r
-       Entry = GetNextNode (&Instance->RootFile->Link, Entry)\r
-       )\r
-  {\r
-    if (Position == 0) {\r
-      FileEntry = BOOTMON_FS_FILE_FROM_LINK_THIS (Entry);\r
-      *File = FileEntry;\r
-      return EFI_SUCCESS;\r
-    }\r
-    Position--;\r
-  }\r
-  return EFI_NOT_FOUND;\r
-}\r
-\r
-EFI_STATUS\r
-BootMonFsCreateFile (\r
-  IN  BOOTMON_FS_INSTANCE *Instance,\r
-  OUT BOOTMON_FS_FILE     **File\r
-  )\r
-{\r
-  BOOTMON_FS_FILE *NewFile;\r
-\r
-  NewFile = (BOOTMON_FS_FILE*)AllocateZeroPool (sizeof (BOOTMON_FS_FILE));\r
-  if (NewFile == NULL) {\r
-    return EFI_OUT_OF_RESOURCES;\r
-  }\r
-\r
-  NewFile->Signature = BOOTMON_FS_FILE_SIGNATURE;\r
-  InitializeListHead (&NewFile->Link);\r
-  InitializeListHead (&NewFile->RegionToFlushLink);\r
-  NewFile->Instance = Instance;\r
-\r
-  // If the created file is the root file then create a directory EFI_FILE_PROTOCOL\r
-  if (Instance->RootFile == *File) {\r
-    CopyMem (&NewFile->File, &mBootMonFsRootTemplate, sizeof (mBootMonFsRootTemplate));\r
-  } else {\r
-    CopyMem (&NewFile->File, &mBootMonFsFileTemplate, sizeof (mBootMonFsFileTemplate));\r
-  }\r
-  *File = NewFile;\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-STATIC\r
-EFI_STATUS\r
-SupportedDevicePathsInit (\r
-  VOID\r
-  )\r
-{\r
-  EFI_STATUS                          Status;\r
-  CHAR16*                             DevicePathListStr;\r
-  CHAR16*                             DevicePathStr;\r
-  CHAR16*                             NextDevicePathStr;\r
-  EFI_DEVICE_PATH_FROM_TEXT_PROTOCOL *EfiDevicePathFromTextProtocol;\r
-  EFI_DEVICE_PATH_PROTOCOL           *Instance;\r
-\r
-  Status = gBS->LocateProtocol (&gEfiDevicePathFromTextProtocolGuid, NULL, (VOID **)&EfiDevicePathFromTextProtocol);\r
-  ASSERT_EFI_ERROR (Status);\r
-\r
-  // Initialize Variable\r
-  DevicePathListStr = (CHAR16*)PcdGetPtr (PcdBootMonFsSupportedDevicePaths);\r
-  mBootMonFsSupportedDevicePaths = NULL;\r
-\r
-  // Extract the Device Path instances from the multi-device path string\r
-  while ((DevicePathListStr != NULL) && (DevicePathListStr[0] != L'\0')) {\r
-    NextDevicePathStr = StrStr (DevicePathListStr, L";");\r
-    if (NextDevicePathStr == NULL) {\r
-      DevicePathStr = DevicePathListStr;\r
-      DevicePathListStr = NULL;\r
-    } else {\r
-      DevicePathStr = (CHAR16*)AllocateCopyPool ((NextDevicePathStr - DevicePathListStr + 1) * sizeof (CHAR16), DevicePathListStr);\r
-      if (DevicePathStr == NULL) {\r
-        return EFI_OUT_OF_RESOURCES;\r
-      }\r
-      *(DevicePathStr + (NextDevicePathStr - DevicePathListStr)) = L'\0';\r
-      DevicePathListStr = NextDevicePathStr;\r
-      if (DevicePathListStr[0] == L';') {\r
-        DevicePathListStr++;\r
-      }\r
-    }\r
-\r
-    Instance = EfiDevicePathFromTextProtocol->ConvertTextToDevicePath (DevicePathStr);\r
-    ASSERT (Instance != NULL);\r
-    mBootMonFsSupportedDevicePaths = AppendDevicePathInstance (mBootMonFsSupportedDevicePaths, Instance);\r
-\r
-    if (NextDevicePathStr != NULL) {\r
-      FreePool (DevicePathStr);\r
-    }\r
-    FreePool (Instance);\r
-  }\r
-\r
-  if (mBootMonFsSupportedDevicePaths == NULL) {\r
-    return EFI_UNSUPPORTED;\r
-  } else {\r
-    return EFI_SUCCESS;\r
-  }\r
-}\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-BootMonFsDriverSupported (\r
-  IN        EFI_DRIVER_BINDING_PROTOCOL *DriverBinding,\r
-  IN        EFI_HANDLE                   ControllerHandle,\r
-  IN        EFI_DEVICE_PATH_PROTOCOL    *DevicePath OPTIONAL\r
-  )\r
-{\r
-  EFI_DISK_IO_PROTOCOL  *DiskIo;\r
-  EFI_DEVICE_PATH_PROTOCOL *DevicePathProtocol;\r
-  EFI_DEVICE_PATH_PROTOCOL *SupportedDevicePath;\r
-  EFI_DEVICE_PATH_PROTOCOL *SupportedDevicePaths;\r
-  EFI_STATUS Status;\r
-  UINTN Size1;\r
-  UINTN Size2;\r
-\r
-  //\r
-  // Open the IO Abstraction(s) needed to perform the supported test\r
-  //\r
-  Status = gBS->OpenProtocol (\r
-                  ControllerHandle,\r
-                  &gEfiDiskIoProtocolGuid,\r
-                  (VOID **) &DiskIo,\r
-                  gImageHandle,\r
-                  ControllerHandle,\r
-                  EFI_OPEN_PROTOCOL_BY_DRIVER\r
-                  );\r
-\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
-  //\r
-  // Close the I/O Abstraction(s) used to perform the supported test\r
-  //\r
-  gBS->CloseProtocol (\r
-         ControllerHandle,\r
-         &gEfiDiskIoProtocolGuid,\r
-         gImageHandle,\r
-         ControllerHandle\r
-         );\r
-\r
-  // Check that BlockIo protocol instance exists\r
-  Status = gBS->OpenProtocol (\r
-                  ControllerHandle,\r
-                  &gEfiBlockIoProtocolGuid,\r
-                  NULL,\r
-                  gImageHandle,\r
-                  ControllerHandle,\r
-                  EFI_OPEN_PROTOCOL_TEST_PROTOCOL\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
-\r
-  // Check if a DevicePath is attached to the handle\r
-  Status = gBS->OpenProtocol (\r
-                  ControllerHandle,\r
-                  &gEfiDevicePathProtocolGuid,\r
-                  (VOID **)&DevicePathProtocol,\r
-                  gImageHandle,\r
-                  ControllerHandle,\r
-                  EFI_OPEN_PROTOCOL_BY_DRIVER\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
-\r
-  // Check if the Device Path is the one which contains the Boot Monitor File System\r
-  Size1 = GetDevicePathSize (DevicePathProtocol);\r
-\r
-  // Go through the list of Device Path Instances\r
-  Status = EFI_UNSUPPORTED;\r
-  SupportedDevicePaths = mBootMonFsSupportedDevicePaths;\r
-  while (SupportedDevicePaths != NULL) {\r
-    SupportedDevicePath = GetNextDevicePathInstance (&SupportedDevicePaths, &Size2);\r
-\r
-    if ((Size1 == Size2) && (CompareMem (DevicePathProtocol, SupportedDevicePath, Size1) == 0)) {\r
-      // The Device Path is supported\r
-      Status = EFI_SUCCESS;\r
-      break;\r
-    }\r
-  }\r
-\r
-  gBS->CloseProtocol (ControllerHandle, &gEfiDevicePathProtocolGuid, gImageHandle, ControllerHandle);\r
-  return Status;\r
-}\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-BootMonFsDriverStart (\r
-  IN        EFI_DRIVER_BINDING_PROTOCOL *DriverBinding,\r
-  IN        EFI_HANDLE                   ControllerHandle,\r
-  IN        EFI_DEVICE_PATH_PROTOCOL    *DevicePath OPTIONAL\r
-  )\r
-{\r
-  BOOTMON_FS_INSTANCE *Instance;\r
-  EFI_STATUS           Status;\r
-  UINTN                VolumeNameSize;\r
-  EFI_FILE_INFO       *Info;\r
-\r
-  Instance = AllocateZeroPool (sizeof (BOOTMON_FS_INSTANCE));\r
-  if (Instance == NULL) {\r
-    return EFI_OUT_OF_RESOURCES;\r
-  }\r
-\r
-  // Initialize the BlockIo of the Instance\r
-  Status = gBS->OpenProtocol (\r
-                  ControllerHandle,\r
-                  &gEfiBlockIoProtocolGuid,\r
-                  (VOID **)&(Instance->BlockIo),\r
-                  gImageHandle,\r
-                  ControllerHandle,\r
-                  EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    goto Error;\r
-  }\r
-\r
-  Status = gBS->OpenProtocol (\r
-                  ControllerHandle,\r
-                  &gEfiDiskIoProtocolGuid,\r
-                  (VOID **)&(Instance->DiskIo),\r
-                  gImageHandle,\r
-                  ControllerHandle,\r
-                  EFI_OPEN_PROTOCOL_BY_DRIVER\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    goto Error;\r
-  }\r
-\r
-  //\r
-  // Initialize the attributes of the Instance\r
-  //\r
-  Instance->Signature = BOOTMON_FS_SIGNATURE;\r
-  Instance->ControllerHandle = ControllerHandle;\r
-  Instance->Media = Instance->BlockIo->Media;\r
-  Instance->Binding = DriverBinding;\r
-\r
-    // Initialize the Simple File System Protocol\r
-  Instance->Fs.Revision = EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_REVISION;\r
-  Instance->Fs.OpenVolume = OpenBootMonFsOpenVolume;\r
-\r
-  // Volume name + L' ' + '2' digit number\r
-  VolumeNameSize = StrSize (BOOTMON_FS_VOLUME_LABEL) + (3 * sizeof (CHAR16));\r
-\r
-  // Initialize FileSystem Information\r
-  Instance->FsInfo.Size = SIZE_OF_EFI_FILE_SYSTEM_INFO + VolumeNameSize;\r
-  Instance->FsInfo.BlockSize = Instance->Media->BlockSize;\r
-  Instance->FsInfo.ReadOnly = FALSE;\r
-  Instance->FsInfo.VolumeSize =\r
-    Instance->Media->BlockSize * (Instance->Media->LastBlock - Instance->Media->LowestAlignedLba);\r
-  CopyMem (Instance->FsInfo.VolumeLabel, BOOTMON_FS_VOLUME_LABEL, StrSize (BOOTMON_FS_VOLUME_LABEL));\r
-\r
-  // Initialize the root file\r
-  Status = BootMonFsCreateFile (Instance, &Instance->RootFile);\r
-  if (EFI_ERROR (Status)) {\r
-    goto Error;\r
-  }\r
-\r
-  Info = AllocateZeroPool (sizeof (EFI_FILE_INFO));\r
-  if (Info == NULL) {\r
-    Status = EFI_OUT_OF_RESOURCES;\r
-    goto Error;\r
-  }\r
-  Instance->RootFile->Info = Info;\r
-\r
-  // Initialize the DevicePath of the Instance\r
-  Status = gBS->OpenProtocol (\r
-                  ControllerHandle,\r
-                  &gEfiDevicePathProtocolGuid,\r
-                  (VOID **)&(Instance->DevicePath),\r
-                  gImageHandle,\r
-                  ControllerHandle,\r
-                  EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    goto Error;\r
-  }\r
-\r
-  //\r
-  // Install the Simple File System Protocol\r
-  //\r
-  Status = gBS->InstallMultipleProtocolInterfaces (\r
-                      &ControllerHandle,\r
-                      &gEfiSimpleFileSystemProtocolGuid, &Instance->Fs,\r
-                      NULL\r
-                      );\r
-  if (EFI_ERROR (Status)) {\r
-    goto Error;\r
-  }\r
-\r
-  InsertTailList (&mInstances, &Instance->Link);\r
-\r
-  return EFI_SUCCESS;\r
-\r
-Error:\r
-\r
-    if (Instance->RootFile != NULL) {\r
-      if (Instance->RootFile->Info != NULL) {\r
-        FreePool (Instance->RootFile->Info);\r
-      }\r
-      FreePool (Instance->RootFile);\r
-    }\r
-    FreePool (Instance);\r
-\r
-  return Status;\r
-}\r
-\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-BootMonFsDriverStop (\r
-  IN        EFI_DRIVER_BINDING_PROTOCOL *DriverBinding,\r
-  IN        EFI_HANDLE                   ControllerHandle,\r
-  IN        UINTN                        NumberOfChildren,\r
-  IN        EFI_HANDLE                  *ChildHandleBuffer OPTIONAL\r
-  )\r
-{\r
-  BOOTMON_FS_INSTANCE *Instance;\r
-  LIST_ENTRY          *Link;\r
-  EFI_STATUS           Status;\r
-  BOOLEAN              InstanceFound;\r
-\r
-  // Find instance from ControllerHandle.\r
-  Instance = NULL;\r
-  InstanceFound = FALSE;\r
-  // For each instance in mInstances:\r
-  for (Link = GetFirstNode (&mInstances); !IsNull (&mInstances, Link); Link = GetNextNode (&mInstances, Link)) {\r
-    Instance = BOOTMON_FS_FROM_LINK (Link);\r
-\r
-    if (Instance->ControllerHandle == ControllerHandle) {\r
-      InstanceFound = TRUE;\r
-      break;\r
-    }\r
-  }\r
-  ASSERT (InstanceFound == TRUE);\r
-\r
-  gBS->CloseProtocol (\r
-      ControllerHandle,\r
-      &gEfiDevicePathProtocolGuid,\r
-      DriverBinding->ImageHandle,\r
-      ControllerHandle);\r
-\r
-  gBS->CloseProtocol (\r
-      ControllerHandle,\r
-      &gEfiDiskIoProtocolGuid,\r
-      DriverBinding->ImageHandle,\r
-      ControllerHandle);\r
-\r
-  gBS->CloseProtocol (\r
-      ControllerHandle,\r
-      &gEfiBlockIoProtocolGuid,\r
-      DriverBinding->ImageHandle,\r
-      ControllerHandle);\r
-\r
-  Status = gBS->UninstallMultipleProtocolInterfaces (\r
-      &ControllerHandle,\r
-      &gEfiSimpleFileSystemProtocolGuid, &Instance->Fs,\r
-      NULL);\r
-\r
-  FreePool (Instance->RootFile->Info);\r
-  FreePool (Instance->RootFile);\r
-  FreePool (Instance);\r
-\r
-  return Status;\r
-}\r
-\r
-//\r
-// Simple Network Protocol Driver Global Variables\r
-//\r
-EFI_DRIVER_BINDING_PROTOCOL mBootMonFsDriverBinding = {\r
-  BootMonFsDriverSupported,\r
-  BootMonFsDriverStart,\r
-  BootMonFsDriverStop,\r
-  0xa,\r
-  NULL,\r
-  NULL\r
-};\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-BootMonFsEntryPoint (\r
-  IN EFI_HANDLE                            ImageHandle,\r
-  IN EFI_SYSTEM_TABLE                      *SystemTable\r
-  )\r
-{\r
-  EFI_STATUS  Status;\r
-\r
-  InitializeListHead (&mInstances);\r
-\r
-  // Initialize the list of Device Paths that could support BootMonFs\r
-  Status = SupportedDevicePathsInit ();\r
-  if (!EFI_ERROR (Status)) {\r
-    Status = gBS->InstallMultipleProtocolInterfaces (\r
-                    &ImageHandle,\r
-                    &gEfiDriverBindingProtocolGuid, &mBootMonFsDriverBinding,\r
-                    NULL\r
-                    );\r
-    ASSERT_EFI_ERROR (Status);\r
-  } else {\r
-    DEBUG((EFI_D_ERROR,"Warning: No Device Paths supporting BootMonFs have been defined in the PCD.\n"));\r
-  }\r
-\r
-  return Status;\r
-}\r
diff --git a/ArmPlatformPkg/FileSystem/BootMonFs/BootMonFsHw.h b/ArmPlatformPkg/FileSystem/BootMonFs/BootMonFsHw.h
deleted file mode 100644 (file)
index c1bef75..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/** @file\r
-*\r
-*  Copyright (c) 2012-2014, ARM Limited. All rights reserved.\r
-*\r
-*  This program and the accompanying materials\r
-*  are licensed and made available under the terms and conditions of the BSD License\r
-*  which accompanies this distribution.  The full text of the license may be found at\r
-*  http://opensource.org/licenses/bsd-license.php\r
-*\r
-*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-*\r
-**/\r
-\r
-#ifndef __BOOTMON_FS_HW_H__\r
-#define __BOOTMON_FS_HW_H__\r
-\r
-#define MAX_NAME_LENGTH 32\r
-\r
-#define HW_IMAGE_FOOTER_SIGNATURE_1 0x464C5348\r
-#define HW_IMAGE_FOOTER_SIGNATURE_2 0x464F4F54\r
-\r
-#define HW_IMAGE_FOOTER_VERSION     1\r
-#define HW_IMAGE_FOOTER_OFFSET      92\r
-\r
-#define HW_IMAGE_FOOTER_VERSION2    2\r
-#define HW_IMAGE_FOOTER_OFFSET2     96\r
-\r
-typedef struct {\r
-  CHAR8  Filename[MAX_NAME_LENGTH];\r
-  UINT32 Offset;\r
-  UINT32 Version;\r
-  UINT32 FooterSignature1;\r
-  UINT32 FooterSignature2;\r
-} HW_IMAGE_FOOTER;\r
-\r
-#define HW_IMAGE_DESCRIPTION_REGION_MAX 4\r
-\r
-// This structure is located at the end of a block when a file is present\r
-typedef struct {\r
-  UINT32  EntryPoint;\r
-  UINT32  Attributes;\r
-  UINT32  RegionCount;\r
-  struct {\r
-    UINT32 LoadAddress;\r
-    UINT32 Size;\r
-    UINT32 Offset;\r
-    UINT32 Checksum;\r
-  } Region[HW_IMAGE_DESCRIPTION_REGION_MAX];\r
-  UINT32  BlockStart;\r
-  UINT32  BlockEnd;\r
-  UINT32  FooterChecksum;\r
-\r
-  HW_IMAGE_FOOTER Footer;\r
-} HW_IMAGE_DESCRIPTION;\r
-\r
-#endif\r
diff --git a/ArmPlatformPkg/FileSystem/BootMonFs/BootMonFsImages.c b/ArmPlatformPkg/FileSystem/BootMonFs/BootMonFsImages.c
deleted file mode 100644 (file)
index 346c360..0000000
+++ /dev/null
@@ -1,222 +0,0 @@
-/** @file\r
-*\r
-*  Copyright (c) 2012-2014, ARM Limited. All rights reserved.\r
-*\r
-*  This program and the accompanying materials\r
-*  are licensed and made available under the terms and conditions of the BSD License\r
-*  which accompanies this distribution.  The full text of the license may be found at\r
-*  http://opensource.org/licenses/bsd-license.php\r
-*\r
-*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-*\r
-**/\r
-\r
-#include <Library/IoLib.h>\r
-#include <Library/NorFlashPlatformLib.h>\r
-#include <Library/BaseMemoryLib.h>\r
-#include <Library/MemoryAllocationLib.h>\r
-\r
-#include <Protocol/SimpleFileSystem.h>\r
-\r
-#include "BootMonFsInternal.h"\r
-\r
-UINT32\r
-BootMonFsChecksum (\r
-  IN VOID   *Data,\r
-  IN UINT32 Size\r
-  )\r
-{\r
-  UINT32  *Ptr;\r
-  UINT32  Word;\r
-  UINT32  Checksum;\r
-\r
-  ASSERT (Size % 4 == 0);\r
-\r
-  Checksum = 0;\r
-  Ptr = (UINT32*)Data;\r
-\r
-  while (Size > 0) {\r
-    Word = *Ptr++;\r
-    Size -= 4;\r
-\r
-    if (Word > ~Checksum) {\r
-      Checksum++;\r
-    }\r
-\r
-    Checksum += Word;\r
-  }\r
-\r
-  return ~Checksum;\r
-}\r
-\r
-EFI_STATUS\r
-BootMonFsComputeFooterChecksum (\r
-  IN OUT HW_IMAGE_DESCRIPTION *Footer\r
-  )\r
-{\r
-  HW_IMAGE_DESCRIPTION *Description;\r
-  UINT32                Index;\r
-\r
-  Footer->Attributes = 1;\r
-\r
-  Description = AllocateZeroPool (sizeof (HW_IMAGE_DESCRIPTION));\r
-  if (Description == NULL) {\r
-    DEBUG ((DEBUG_ERROR, "BootMonFsComputeFooterChecksum: Unable to allocate memory.\n"));\r
-    return EFI_OUT_OF_RESOURCES;\r
-  }\r
-\r
-  // Copy over to temporary shim\r
-  CopyMem (Description, Footer, sizeof (HW_IMAGE_DESCRIPTION));\r
-\r
-  // BootMon doesn't checksum the previous checksum\r
-  Description->FooterChecksum = 0;\r
-\r
-  // Blank out regions which aren't being used.\r
-  for (Index = Footer->RegionCount; Index < HW_IMAGE_DESCRIPTION_REGION_MAX; Index++) {\r
-    Description->Region[Index].Checksum = 0;\r
-    Description->Region[Index].LoadAddress = 0;\r
-    Description->Region[Index].Offset = 0;\r
-    Description->Region[Index].Size = 0;\r
-  }\r
-\r
-  // Compute the checksum\r
-  Footer->FooterChecksum = BootMonFsChecksum (Description, sizeof (HW_IMAGE_DESCRIPTION));\r
-\r
-  FreePool (Description);\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-BOOLEAN\r
-BootMonFsIsImageValid (\r
-  IN HW_IMAGE_DESCRIPTION  *Desc,\r
-  IN EFI_LBA                Lba\r
-  )\r
-{\r
-  EFI_STATUS            Status;\r
-  HW_IMAGE_FOOTER      *Footer;\r
-  UINT32                Checksum;\r
-\r
-  Footer = &Desc->Footer;\r
-\r
-  // Check that the verification bytes are present\r
-  if ((Footer->FooterSignature1 != HW_IMAGE_FOOTER_SIGNATURE_1) ||\r
-      (Footer->FooterSignature2 != HW_IMAGE_FOOTER_SIGNATURE_2)) {\r
-    return FALSE;\r
-  }\r
-\r
-  if (Footer->Version == HW_IMAGE_FOOTER_VERSION) {\r
-    if (Footer->Offset != HW_IMAGE_FOOTER_OFFSET) {\r
-      return FALSE;\r
-    }\r
-  } else if (Footer->Version == HW_IMAGE_FOOTER_VERSION2) {\r
-    if (Footer->Offset != HW_IMAGE_FOOTER_OFFSET2) {\r
-      return FALSE;\r
-    }\r
-  } else {\r
-    return FALSE;\r
-  }\r
-\r
-  Checksum = Desc->FooterChecksum;\r
-  Status = BootMonFsComputeFooterChecksum (Desc);\r
-  if (EFI_ERROR (Status)) {\r
-    DEBUG ((DEBUG_ERROR, "Warning: failed to compute checksum for image '%a'\n", Desc->Footer.Filename));\r
-  }\r
-\r
-  if (Desc->FooterChecksum != Checksum) {\r
-    DEBUG ((DEBUG_ERROR, "Warning: image '%a' checksum mismatch.\n", Desc->Footer.Filename));\r
-  }\r
-\r
-  if ((Desc->BlockEnd != Lba) || (Desc->BlockStart > Desc->BlockEnd)) {\r
-    return FALSE;\r
-  }\r
-\r
-  return TRUE;\r
-}\r
-\r
-STATIC\r
-EFI_STATUS\r
-BootMonFsDiscoverNextImage (\r
-  IN     BOOTMON_FS_INSTANCE      *Instance,\r
-  IN OUT EFI_LBA                  *LbaStart,\r
-  IN OUT BOOTMON_FS_FILE          *File\r
-  )\r
-{\r
-  EFI_DISK_IO_PROTOCOL  *DiskIo;\r
-  EFI_LBA                CurrentLba;\r
-  UINT64                 DescOffset;\r
-  EFI_STATUS             Status;\r
-\r
-  DiskIo = Instance->DiskIo;\r
-\r
-  CurrentLba = *LbaStart;\r
-\r
-  // Look for images in the rest of this block\r
-  while (CurrentLba <= Instance->Media->LastBlock) {\r
-    // Work out the byte offset into media of the image description in this block\r
-    // If present, the image description is at the very end of the block.\r
-    DescOffset = ((CurrentLba + 1) * Instance->Media->BlockSize) - sizeof (HW_IMAGE_DESCRIPTION);\r
-\r
-    // Read the image description from media\r
-    Status = DiskIo->ReadDisk (DiskIo,\r
-                       Instance->Media->MediaId,\r
-                       DescOffset,\r
-                       sizeof (HW_IMAGE_DESCRIPTION),\r
-                       &File->HwDescription\r
-                       );\r
-    if (EFI_ERROR (Status)) {\r
-      return Status;\r
-    }\r
-\r
-    // If we found a valid image description...\r
-    if (BootMonFsIsImageValid (&File->HwDescription, (CurrentLba - Instance->Media->LowestAlignedLba))) {\r
-      DEBUG ((EFI_D_ERROR, "Found image: %a in block %d.\n",\r
-        &(File->HwDescription.Footer.Filename),\r
-        (UINTN)(CurrentLba - Instance->Media->LowestAlignedLba)\r
-        ));\r
-      File->HwDescAddress = DescOffset;\r
-\r
-      *LbaStart = CurrentLba + 1;\r
-      return EFI_SUCCESS;\r
-    } else {\r
-      CurrentLba++;\r
-    }\r
-  }\r
-\r
-  *LbaStart = CurrentLba;\r
-  return EFI_NOT_FOUND;\r
-}\r
-\r
-EFI_STATUS\r
-BootMonFsInitialize (\r
-  IN BOOTMON_FS_INSTANCE *Instance\r
-  )\r
-{\r
-  EFI_STATUS               Status;\r
-  EFI_LBA                  Lba;\r
-  UINT32                   ImageCount;\r
-  BOOTMON_FS_FILE          *NewFile;\r
-\r
-  ImageCount = 0;\r
-  Lba = 0;\r
-\r
-  while (1) {\r
-    Status = BootMonFsCreateFile (Instance, &NewFile);\r
-    if (EFI_ERROR (Status)) {\r
-      return Status;\r
-    }\r
-\r
-    Status = BootMonFsDiscoverNextImage (Instance, &Lba, NewFile);\r
-    if (EFI_ERROR (Status)) {\r
-      // Free NewFile allocated by BootMonFsCreateFile ()\r
-      FreePool (NewFile);\r
-      break;\r
-    }\r
-    InsertTailList (&Instance->RootFile->Link, &NewFile->Link);\r
-    ImageCount++;\r
-  }\r
-\r
-  Instance->Initialized = TRUE;\r
-  return EFI_SUCCESS;\r
-}\r
diff --git a/ArmPlatformPkg/FileSystem/BootMonFs/BootMonFsInternal.h b/ArmPlatformPkg/FileSystem/BootMonFs/BootMonFsInternal.h
deleted file mode 100644 (file)
index c0c6599..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-/** @file\r
-*\r
-*  Copyright (c) 2012-2014, ARM Limited. All rights reserved.\r
-*\r
-*  This program and the accompanying materials\r
-*  are licensed and made available under the terms and conditions of the BSD License\r
-*  which accompanies this distribution.  The full text of the license may be found at\r
-*  http://opensource.org/licenses/bsd-license.php\r
-*\r
-*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-*\r
-**/\r
-\r
-#ifndef __BOOTMONFS_INTERNAL_H__\r
-#define __BOOTMONFS_INTERNAL_H__\r
-\r
-#include <PiDxe.h>\r
-#include <Library/UefiLib.h>\r
-#include <Library/DebugLib.h>\r
-#include <Library/BaseMemoryLib.h>\r
-#include <Library/MemoryAllocationLib.h>\r
-\r
-#include <Protocol/BlockIo.h>\r
-#include <Protocol/DiskIo.h>\r
-#include <Protocol/FirmwareVolumeBlock.h>\r
-#include <Protocol/SimpleFileSystem.h>\r
-\r
-#include <Guid/BootMonFsFileInfo.h>\r
-#include <Guid/FileInfo.h>\r
-#include <Guid/FileSystemInfo.h>\r
-#include <Guid/FileSystemVolumeLabelInfo.h>\r
-\r
-#include "BootMonFsHw.h"\r
-\r
-#define BOOTMON_FS_VOLUME_LABEL   L"NOR Flash"\r
-\r
-typedef struct _BOOTMON_FS_INSTANCE BOOTMON_FS_INSTANCE;\r
-\r
-typedef struct {\r
-  LIST_ENTRY            Link;\r
-  VOID*                 Buffer;\r
-  UINTN                 Size;\r
-  UINT64                Offset; // Offset from the start of the file\r
-} BOOTMON_FS_FILE_REGION;\r
-\r
-typedef struct {\r
-  UINT32                Signature;\r
-  LIST_ENTRY            Link;\r
-  BOOTMON_FS_INSTANCE   *Instance;\r
-\r
-  UINTN                 HwDescAddress;\r
-  HW_IMAGE_DESCRIPTION  HwDescription;\r
-\r
-  EFI_FILE_PROTOCOL     File;\r
-\r
-  //\r
-  // The following fields are relevant only if the file is open.\r
-  //\r
-\r
-  EFI_FILE_INFO         *Info;\r
-  UINT64                Position;\r
-  // If the file needs to be flushed then this list contain the memory\r
-  // buffer that creates this file\r
-  LIST_ENTRY            RegionToFlushLink;\r
-  UINT64                OpenMode;\r
-} BOOTMON_FS_FILE;\r
-\r
-#define BOOTMON_FS_FILE_SIGNATURE              SIGNATURE_32('b', 'o', 't', 'f')\r
-#define BOOTMON_FS_FILE_FROM_FILE_THIS(a)      CR (a, BOOTMON_FS_FILE, File, BOOTMON_FS_FILE_SIGNATURE)\r
-#define BOOTMON_FS_FILE_FROM_LINK_THIS(a)      CR (a, BOOTMON_FS_FILE, Link, BOOTMON_FS_FILE_SIGNATURE)\r
-\r
-struct _BOOTMON_FS_INSTANCE {\r
-  UINT32                               Signature;\r
-  EFI_HANDLE                           ControllerHandle;\r
-\r
-  LIST_ENTRY                           Link;\r
-\r
-  EFI_DRIVER_BINDING_PROTOCOL         *Binding;\r
-  EFI_DISK_IO_PROTOCOL                *DiskIo;\r
-  EFI_BLOCK_IO_PROTOCOL               *BlockIo;\r
-  EFI_BLOCK_IO_MEDIA                  *Media;\r
-  EFI_DEVICE_PATH_PROTOCOL            *DevicePath;\r
-\r
-  EFI_SIMPLE_FILE_SYSTEM_PROTOCOL      Fs;\r
-\r
-  EFI_FILE_SYSTEM_INFO                 FsInfo;\r
-  CHAR16                               Label[20];\r
-\r
-  BOOTMON_FS_FILE                     *RootFile; // All the other files are linked to this root\r
-  BOOLEAN                              Initialized;\r
-};\r
-\r
-#define BOOTMON_FS_SIGNATURE            SIGNATURE_32('b', 'o', 't', 'm')\r
-#define BOOTMON_FS_FROM_FS_THIS(a)      CR (a, BOOTMON_FS_INSTANCE, Fs, BOOTMON_FS_SIGNATURE)\r
-#define BOOTMON_FS_FROM_LINK(a)         CR (a, BOOTMON_FS_INSTANCE, Link, BOOTMON_FS_SIGNATURE)\r
-\r
-#include "BootMonFsApi.h"\r
-\r
-#endif\r
-\r
diff --git a/ArmPlatformPkg/FileSystem/BootMonFs/BootMonFsOpenClose.c b/ArmPlatformPkg/FileSystem/BootMonFs/BootMonFsOpenClose.c
deleted file mode 100644 (file)
index ae10055..0000000
+++ /dev/null
@@ -1,795 +0,0 @@
-/** @file\r
-*\r
-*  Copyright (c) 2012-2015, ARM Limited. All rights reserved.\r
-*\r
-*  This program and the accompanying materials\r
-*  are licensed and made available under the terms and conditions of the BSD License\r
-*  which accompanies this distribution.  The full text of the license may be found at\r
-*  http://opensource.org/licenses/bsd-license.php\r
-*\r
-*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-*\r
-**/\r
-\r
-#include "BootMonFsInternal.h"\r
-\r
-// Clear a file's image description on storage media:\r
-// UEFI allows you to seek past the end of a file, a subsequent write will grow\r
-// the file. It does not specify how space between the former end of the file\r
-// and the beginning of the write should be filled. It's therefore possible that\r
-// BootMonFs metadata, that comes after the end of a file, could be left there\r
-// and wrongly detected by BootMonFsImageInBlock.\r
-STATIC\r
-EFI_STATUS\r
-InvalidateImageDescription (\r
-  IN  BOOTMON_FS_FILE  *File\r
-  )\r
-{\r
-  EFI_DISK_IO_PROTOCOL   *DiskIo;\r
-  EFI_BLOCK_IO_PROTOCOL  *BlockIo;\r
-  UINT32                  MediaId;\r
-  VOID                   *Buffer;\r
-  EFI_STATUS              Status;\r
-\r
-  DiskIo = File->Instance->DiskIo;\r
-  BlockIo = File->Instance->BlockIo;\r
-  MediaId = BlockIo->Media->MediaId;\r
-\r
-  Buffer = AllocateZeroPool (sizeof (HW_IMAGE_DESCRIPTION));\r
-\r
-  if (Buffer == NULL) {\r
-    return EFI_OUT_OF_RESOURCES;\r
-  }\r
-\r
-  Status = DiskIo->WriteDisk (DiskIo,\r
-                    MediaId,\r
-                    File->HwDescAddress,\r
-                    sizeof (HW_IMAGE_DESCRIPTION),\r
-                    Buffer\r
-                    );\r
-\r
-  FreePool(Buffer);\r
-\r
-  return Status;\r
-}\r
-\r
-/**\r
-  Write the description of a file to storage media.\r
-\r
-  This function uses DiskIo to write to the media, so call BlockIo->FlushBlocks()\r
-  after calling it to ensure the data are written on the media.\r
-\r
-  @param[in]  File       Description of the file whose description on the\r
-                         storage media has to be updated.\r
-  @param[in]  FileName   Name of the file. Its length is assumed to be\r
-                         lower than MAX_NAME_LENGTH.\r
-  @param[in]  DataSize   Number of data bytes of the file.\r
-  @param[in]  FileStart  File's starting position on media. FileStart must\r
-                         be aligned to the media's block size.\r
-\r
-  @retval  EFI_WRITE_PROTECTED  The device cannot be written to.\r
-  @retval  EFI_DEVICE_ERROR     The device reported an error while performing\r
-                                the write operation.\r
-\r
-**/\r
-STATIC\r
-EFI_STATUS\r
-WriteFileDescription (\r
-  IN  BOOTMON_FS_FILE  *File,\r
-  IN  CHAR8            *FileName,\r
-  IN  UINT32            DataSize,\r
-  IN  UINT64            FileStart\r
-  )\r
-{\r
-  EFI_STATUS            Status;\r
-  EFI_DISK_IO_PROTOCOL  *DiskIo;\r
-  UINTN                 BlockSize;\r
-  UINT32                FileSize;\r
-  HW_IMAGE_DESCRIPTION  *Description;\r
-\r
-  DiskIo    = File->Instance->DiskIo;\r
-  BlockSize = File->Instance->BlockIo->Media->BlockSize;\r
-  ASSERT (FileStart % BlockSize == 0);\r
-\r
-  //\r
-  // Construct the file description\r
-  //\r
-\r
-  FileSize = DataSize + sizeof (HW_IMAGE_DESCRIPTION);\r
-  Description = &File->HwDescription;\r
-  Description->Attributes = 1;\r
-  Description->BlockStart = FileStart / BlockSize;\r
-  Description->BlockEnd   = Description->BlockStart + (FileSize / BlockSize);\r
-  AsciiStrCpyS (Description->Footer.Filename,\r
-    sizeof Description->Footer.Filename, FileName);\r
-\r
-#ifdef MDE_CPU_ARM\r
-  Description->Footer.Offset  = HW_IMAGE_FOOTER_OFFSET;\r
-  Description->Footer.Version = HW_IMAGE_FOOTER_VERSION;\r
-#else\r
-  Description->Footer.Offset  = HW_IMAGE_FOOTER_OFFSET2;\r
-  Description->Footer.Version = HW_IMAGE_FOOTER_VERSION2;\r
-#endif\r
-  Description->Footer.FooterSignature1 = HW_IMAGE_FOOTER_SIGNATURE_1;\r
-  Description->Footer.FooterSignature2 = HW_IMAGE_FOOTER_SIGNATURE_2;\r
-  Description->RegionCount = 1;\r
-  Description->Region[0].Checksum = 0;\r
-  Description->Region[0].Offset = Description->BlockStart * BlockSize;\r
-  Description->Region[0].Size = DataSize;\r
-\r
-  Status = BootMonFsComputeFooterChecksum (Description);\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
-\r
-  File->HwDescAddress = ((Description->BlockEnd + 1) * BlockSize) - sizeof (HW_IMAGE_DESCRIPTION);\r
-\r
-  // Update the file description on the media\r
-  Status = DiskIo->WriteDisk (\r
-                    DiskIo,\r
-                    File->Instance->Media->MediaId,\r
-                    File->HwDescAddress,\r
-                    sizeof (HW_IMAGE_DESCRIPTION),\r
-                    Description\r
-                    );\r
-  ASSERT_EFI_ERROR (Status);\r
-\r
-  return Status;\r
-}\r
-\r
-// Find a space on media for a file that has not yet been flushed to disk.\r
-// Just returns the first space that's big enough.\r
-// This function could easily be adapted to:\r
-// - Find space for moving an existing file that has outgrown its space\r
-//   (We do not currently move files, just return EFI_VOLUME_FULL)\r
-// - Find space for a fragment of a file that has outgrown its space\r
-//   (We do not currently fragment files - it's not clear whether fragmentation\r
-//    is actually part of BootMonFs as there is no spec)\r
-// - Be more clever about finding space (choosing the largest or smallest\r
-//   suitable space)\r
-// Parameters:\r
-// File - the new (not yet flushed) file for which we need to find space.\r
-// FileStart - the position on media of the file (in bytes).\r
-STATIC\r
-EFI_STATUS\r
-BootMonFsFindSpaceForNewFile (\r
-  IN  BOOTMON_FS_FILE     *File,\r
-  IN  UINT64              FileSize,\r
-  OUT UINT64              *FileStart\r
-  )\r
-{\r
-  LIST_ENTRY              *FileLink;\r
-  BOOTMON_FS_FILE         *RootFile;\r
-  BOOTMON_FS_FILE         *FileEntry;\r
-  UINTN                    BlockSize;\r
-  EFI_BLOCK_IO_MEDIA      *Media;\r
-\r
-  Media = File->Instance->BlockIo->Media;\r
-  BlockSize = Media->BlockSize;\r
-  RootFile = File->Instance->RootFile;\r
-\r
-  // This function must only be called for file which has not been flushed into\r
-  // Flash yet\r
-  ASSERT (File->HwDescription.RegionCount == 0);\r
-\r
-  *FileStart = 0;\r
-  // Go through all the files in the list\r
-  for (FileLink = GetFirstNode (&RootFile->Link);\r
-         !IsNull (&RootFile->Link, FileLink);\r
-         FileLink = GetNextNode (&RootFile->Link, FileLink)\r
-         )\r
-  {\r
-    FileEntry = BOOTMON_FS_FILE_FROM_LINK_THIS (FileLink);\r
-    // Skip files that aren't on disk yet\r
-    if (FileEntry->HwDescription.RegionCount == 0) {\r
-      continue;\r
-    }\r
-\r
-    // If the free space preceding the file is big enough to contain the new\r
-    // file then use it!\r
-    if (((FileEntry->HwDescription.BlockStart * BlockSize) - *FileStart)\r
-        >= FileSize) {\r
-      // The file list must be in disk-order\r
-      RemoveEntryList (&File->Link);\r
-      File->Link.BackLink = FileLink->BackLink;\r
-      File->Link.ForwardLink = FileLink;\r
-      FileLink->BackLink->ForwardLink = &File->Link;\r
-      FileLink->BackLink = &File->Link;\r
-\r
-      return EFI_SUCCESS;\r
-    } else {\r
-      *FileStart = (FileEntry->HwDescription.BlockEnd + 1) * BlockSize;\r
-    }\r
-  }\r
-  // See if there's space after the last file\r
-  if ((((Media->LastBlock + 1) * BlockSize) - *FileStart) >= FileSize) {\r
-    return EFI_SUCCESS;\r
-  } else {\r
-    return EFI_VOLUME_FULL;\r
-  }\r
-}\r
-\r
-// Free the resources in the file's Region list.\r
-STATIC\r
-VOID\r
-FreeFileRegions (\r
-  IN  BOOTMON_FS_FILE *File\r
-  )\r
-{\r
-  LIST_ENTRY              *RegionToFlushLink;\r
-  BOOTMON_FS_FILE_REGION  *Region;\r
-\r
-  RegionToFlushLink = GetFirstNode (&File->RegionToFlushLink);\r
-  while (!IsNull (&File->RegionToFlushLink, RegionToFlushLink)) {\r
-    // Repeatedly remove the first node from the list and free its resources.\r
-    Region = (BOOTMON_FS_FILE_REGION *) RegionToFlushLink;\r
-    RemoveEntryList (RegionToFlushLink);\r
-    FreePool (Region->Buffer);\r
-    FreePool (Region);\r
-\r
-    RegionToFlushLink = GetFirstNode (&File->RegionToFlushLink);\r
-  }\r
-}\r
-\r
-/**\r
-  Flush all modified data associated with a file to a device.\r
-\r
-  @param[in]  This  A pointer to the EFI_FILE_PROTOCOL instance that is the\r
-                    file handle to flush.\r
-\r
-  @retval  EFI_SUCCESS            The data was flushed.\r
-  @retval  EFI_ACCESS_DENIED      The file was opened read-only.\r
-  @retval  EFI_DEVICE_ERROR       The device reported an error.\r
-  @retval  EFI_VOLUME_FULL        The volume is full.\r
-  @retval  EFI_OUT_OF_RESOURCES   Not enough resources were available to flush the data.\r
-  @retval  EFI_INVALID_PARAMETER  At least one of the parameters is invalid.\r
-\r
-**/\r
-EFIAPI\r
-EFI_STATUS\r
-BootMonFsFlushFile (\r
-  IN EFI_FILE_PROTOCOL  *This\r
-  )\r
-{\r
-  EFI_STATUS               Status;\r
-  BOOTMON_FS_INSTANCE     *Instance;\r
-  EFI_FILE_INFO           *Info;\r
-  EFI_BLOCK_IO_PROTOCOL   *BlockIo;\r
-  EFI_BLOCK_IO_MEDIA      *Media;\r
-  EFI_DISK_IO_PROTOCOL    *DiskIo;\r
-  UINTN                    BlockSize;\r
-  CHAR8                    AsciiFileName[MAX_NAME_LENGTH];\r
-  LIST_ENTRY              *RegionToFlushLink;\r
-  BOOTMON_FS_FILE         *File;\r
-  BOOTMON_FS_FILE         *NextFile;\r
-  BOOTMON_FS_FILE_REGION  *Region;\r
-  LIST_ENTRY              *FileLink;\r
-  UINTN                    CurrentPhysicalSize;\r
-  UINT64                   FileStart;\r
-  UINT64                   FileEnd;\r
-  UINT64                   RegionStart;\r
-  UINT64                   RegionEnd;\r
-  UINT64                   NewDataSize;\r
-  UINT64                   NewFileSize;\r
-  UINT64                   EndOfAppendSpace;\r
-  BOOLEAN                  HasSpace;\r
-\r
-  if (This == NULL) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-  File = BOOTMON_FS_FILE_FROM_FILE_THIS (This);\r
-  if (File->Info == NULL) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-  if (File->OpenMode == EFI_FILE_MODE_READ) {\r
-    return EFI_ACCESS_DENIED;\r
-  }\r
-\r
-  Instance  = File->Instance;\r
-  Info      = File->Info;\r
-  BlockIo   = Instance->BlockIo;\r
-  Media     = BlockIo->Media;\r
-  DiskIo    = Instance->DiskIo;\r
-  BlockSize = Media->BlockSize;\r
-\r
-  UnicodeStrToAsciiStrS (Info->FileName, AsciiFileName, MAX_NAME_LENGTH);\r
-\r
-  // If the file doesn't exist then find a space for it\r
-  if (File->HwDescription.RegionCount == 0) {\r
-    Status = BootMonFsFindSpaceForNewFile (\r
-               File,\r
-               Info->FileSize + sizeof (HW_IMAGE_DESCRIPTION),\r
-               &FileStart\r
-               );\r
-    if (EFI_ERROR (Status)) {\r
-      return Status;\r
-    }\r
-  } else {\r
-    FileStart = File->HwDescription.BlockStart * BlockSize;\r
-  }\r
-  // FileEnd is the current NOR address of the end of the file's data\r
-  FileEnd = FileStart + File->HwDescription.Region[0].Size;\r
-\r
-  for (RegionToFlushLink = GetFirstNode (&File->RegionToFlushLink);\r
-       !IsNull (&File->RegionToFlushLink, RegionToFlushLink);\r
-       RegionToFlushLink = GetNextNode (&File->RegionToFlushLink, RegionToFlushLink)\r
-       )\r
-  {\r
-    Region = (BOOTMON_FS_FILE_REGION*)RegionToFlushLink;\r
-    if (Region->Size == 0) {\r
-      continue;\r
-    }\r
-\r
-    // RegionStart and RegionEnd are the the intended NOR address of the\r
-    // start and end of the region\r
-    RegionStart = FileStart   + Region->Offset;\r
-    RegionEnd   = RegionStart + Region->Size;\r
-\r
-    if (RegionEnd < FileEnd) {\r
-      // Handle regions representing edits to existing portions of the file\r
-      // Write the region data straight into the file\r
-      Status = DiskIo->WriteDisk (DiskIo,\r
-                        Media->MediaId,\r
-                        RegionStart,\r
-                        Region->Size,\r
-                        Region->Buffer\r
-                        );\r
-      if (EFI_ERROR (Status)) {\r
-        return Status;\r
-      }\r
-    } else {\r
-      // Handle regions representing appends to the file\r
-      //\r
-      // Note: Since seeking past the end of the file with SetPosition() is\r
-      //  valid, it's possible there will be a gap between the current end of\r
-      //  the file and the beginning of the new region. Since the UEFI spec\r
-      //  says nothing about this case (except "a subsequent write would grow\r
-      //  the file"), we just leave garbage in the gap.\r
-\r
-      // Check if there is space to append the new region\r
-      HasSpace = FALSE;\r
-      NewDataSize = RegionEnd - FileStart;\r
-      NewFileSize = NewDataSize + sizeof (HW_IMAGE_DESCRIPTION);\r
-      CurrentPhysicalSize = BootMonFsGetPhysicalSize (File);\r
-      if (NewFileSize <= CurrentPhysicalSize) {\r
-        HasSpace = TRUE;\r
-      } else {\r
-        // Get the File Description for the next file\r
-        FileLink = GetNextNode (&Instance->RootFile->Link, &File->Link);\r
-        if (!IsNull (&Instance->RootFile->Link, FileLink)) {\r
-          NextFile = BOOTMON_FS_FILE_FROM_LINK_THIS (FileLink);\r
-\r
-          // If there is space between the beginning of the current file and the\r
-          // beginning of the next file then use it\r
-          EndOfAppendSpace = NextFile->HwDescription.BlockStart * BlockSize;\r
-        } else {\r
-          // We are flushing the last file.\r
-          EndOfAppendSpace = (Media->LastBlock + 1) * BlockSize;\r
-        }\r
-        if (EndOfAppendSpace - FileStart >= NewFileSize) {\r
-          HasSpace = TRUE;\r
-        }\r
-      }\r
-\r
-      if (HasSpace == TRUE) {\r
-        // Invalidate the current image description of the file if any.\r
-        if (File->HwDescAddress != 0) {\r
-          Status = InvalidateImageDescription (File);\r
-          if (EFI_ERROR (Status)) {\r
-            return Status;\r
-          }\r
-        }\r
-\r
-        // Write the new file data\r
-        Status = DiskIo->WriteDisk (\r
-                    DiskIo,\r
-                    Media->MediaId,\r
-                    RegionStart,\r
-                    Region->Size,\r
-                    Region->Buffer\r
-                    );\r
-        if (EFI_ERROR (Status)) {\r
-          return Status;\r
-        }\r
-\r
-        Status = WriteFileDescription (File, AsciiFileName, NewDataSize, FileStart);\r
-        if (EFI_ERROR (Status)) {\r
-          return Status;\r
-        }\r
-\r
-      } else {\r
-        // There isn't a space for the file.\r
-        // Options here are to move the file or fragment it. However as files\r
-        // may represent boot images at fixed positions, these options will\r
-        // break booting if the bootloader doesn't use BootMonFs to find the\r
-        // image.\r
-\r
-        return EFI_VOLUME_FULL;\r
-      }\r
-    }\r
-  }\r
-\r
-  FreeFileRegions (File);\r
-  Info->PhysicalSize = BootMonFsGetPhysicalSize (File);\r
-\r
-  if ((AsciiStrCmp (AsciiFileName, File->HwDescription.Footer.Filename) != 0) ||\r
-      (Info->FileSize != File->HwDescription.Region[0].Size)               ) {\r
-    Status = WriteFileDescription (File, AsciiFileName, Info->FileSize, FileStart);\r
-    if (EFI_ERROR (Status)) {\r
-      return Status;\r
-    }\r
-  }\r
-\r
-  // Flush DiskIo Buffers (see UEFI Spec 12.7 - DiskIo buffers are flushed by\r
-  // calling FlushBlocks on the same device's BlockIo).\r
-  BlockIo->FlushBlocks (BlockIo);\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
-  Close a specified file handle.\r
-\r
-  @param[in]  This  A pointer to the EFI_FILE_PROTOCOL instance that is the file\r
-                    handle to close.\r
-\r
-  @retval  EFI_SUCCESS            The file was closed.\r
-  @retval  EFI_INVALID_PARAMETER  The parameter "This" is NULL or is not an open\r
-                                  file handle.\r
-\r
-**/\r
-EFIAPI\r
-EFI_STATUS\r
-BootMonFsCloseFile (\r
-  IN EFI_FILE_PROTOCOL  *This\r
-  )\r
-{\r
-  BOOTMON_FS_FILE  *File;\r
-\r
-  if (This == NULL) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-  File = BOOTMON_FS_FILE_FROM_FILE_THIS (This);\r
-  if (File->Info == NULL) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-  // In the case of a file and not the root directory\r
-  if (This != &File->Instance->RootFile->File) {\r
-    This->Flush (This);\r
-    FreePool (File->Info);\r
-    File->Info = NULL;\r
-  }\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
-  Open a file on the boot monitor file system.\r
-\r
-  The boot monitor file system does not allow for sub-directories. There is only\r
-  one directory, the root one. On any attempt to create a directory, the function\r
-  returns in error with the EFI_WRITE_PROTECTED error code.\r
-\r
-  @param[in]   This        A pointer to the EFI_FILE_PROTOCOL instance that is\r
-                           the file handle to source location.\r
-  @param[out]  NewHandle   A pointer to the location to return the opened\r
-                           handle for the new file.\r
-  @param[in]   FileName    The Null-terminated string of the name of the file\r
-                           to be opened.\r
-  @param[in]   OpenMode    The mode to open the file : Read or Read/Write or\r
-                           Read/Write/Create\r
-  @param[in]   Attributes  Attributes of the file in case of a file creation\r
-\r
-  @retval  EFI_SUCCESS            The file was open.\r
-  @retval  EFI_NOT_FOUND          The specified file could not be found or the specified\r
-                                  directory in which to create a file could not be found.\r
-  @retval  EFI_DEVICE_ERROR       The device reported an error.\r
-  @retval  EFI_WRITE_PROTECTED    Attempt to create a directory. This is not possible\r
-                                  with the Boot Monitor file system.\r
-  @retval  EFI_OUT_OF_RESOURCES   Not enough resources were available to open the file.\r
-  @retval  EFI_INVALID_PARAMETER  At least one of the parameters is invalid.\r
-\r
-**/\r
-EFIAPI\r
-EFI_STATUS\r
-BootMonFsOpenFile (\r
-  IN EFI_FILE_PROTOCOL   *This,\r
-  OUT EFI_FILE_PROTOCOL  **NewHandle,\r
-  IN CHAR16              *FileName,\r
-  IN UINT64              OpenMode,\r
-  IN UINT64              Attributes\r
-  )\r
-{\r
-  EFI_STATUS           Status;\r
-  BOOTMON_FS_FILE      *Directory;\r
-  BOOTMON_FS_FILE      *File;\r
-  BOOTMON_FS_INSTANCE  *Instance;\r
-  CHAR8                *Buf;\r
-  CHAR16               *Path;\r
-  CHAR16               *Separator;\r
-  CHAR8                *AsciiFileName;\r
-  EFI_FILE_INFO        *Info;\r
-  UINTN                AsciiFileNameSize;\r
-\r
-  if (This == NULL) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-  Directory = BOOTMON_FS_FILE_FROM_FILE_THIS (This);\r
-  if (Directory->Info == NULL) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-  if ((FileName == NULL) || (NewHandle == NULL)) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-  //\r
-  // The only valid modes are read, read/write, and read/write/create\r
-  //\r
-  if ( (OpenMode != EFI_FILE_MODE_READ) &&\r
-       (OpenMode != (EFI_FILE_MODE_READ | EFI_FILE_MODE_WRITE)) &&\r
-       (OpenMode != (EFI_FILE_MODE_READ | EFI_FILE_MODE_WRITE | EFI_FILE_MODE_CREATE)) ) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-  Instance = Directory->Instance;\r
-\r
-  //\r
-  // If the instance has not been initialized yet then do it ...\r
-  //\r
-  if (!Instance->Initialized) {\r
-    Status = BootMonFsInitialize (Instance);\r
-    if (EFI_ERROR (Status)) {\r
-      return Status;\r
-    }\r
-  }\r
-\r
-  //\r
-  // Copy the file path to be able to work on it. We do not want to\r
-  // modify the input file name string "FileName".\r
-  //\r
-  Buf = AllocateCopyPool (StrSize (FileName), FileName);\r
-  if (Buf == NULL) {\r
-    return EFI_OUT_OF_RESOURCES;\r
-  }\r
-  Path = (CHAR16*)Buf;\r
-  AsciiFileName = NULL;\r
-  Info = NULL;\r
-\r
-  //\r
-  // Handle single periods, double periods and convert forward slashes '/'\r
-  // to backward '\' ones. Does not handle a '.' at the beginning of the\r
-  // path for the time being.\r
-  //\r
-  if (PathCleanUpDirectories (Path) == NULL) {\r
-    Status = EFI_INVALID_PARAMETER;\r
-    goto Error;\r
-  }\r
-\r
-  //\r
-  // Detect if the first component of the path refers to a directory.\r
-  // This is done to return the correct error code when trying to\r
-  // access or create a directory other than the root directory.\r
-  //\r
-\r
-  //\r
-  // Search for the '\\' sequence and if found return in error\r
-  // with the EFI_INVALID_PARAMETER error code. ere in the path.\r
-  //\r
-  if (StrStr (Path, L"\\\\") != NULL) {\r
-    Status = EFI_INVALID_PARAMETER;\r
-    goto Error;\r
-  }\r
-  //\r
-  // Get rid of the leading '\' if any.\r
-  //\r
-  Path += (Path[0] == L'\\');\r
-\r
-  //\r
-  // Look for a '\' in the file path. If one is found then\r
-  // the first component of the path refers to a directory\r
-  // that is not the root directory.\r
-  //\r
-  Separator = StrStr (Path, L"\\");\r
-  if (Separator != NULL) {\r
-    //\r
-    // In the case '<dir name>\' and a creation, return\r
-    // EFI_WRITE_PROTECTED if this is for a directory\r
-    // creation, EFI_INVALID_PARAMETER otherwise.\r
-    //\r
-    if ((*(Separator + 1) == '\0') && ((OpenMode & EFI_FILE_MODE_CREATE) != 0)) {\r
-      if (Attributes & EFI_FILE_DIRECTORY) {\r
-        Status = EFI_WRITE_PROTECTED;\r
-      } else {\r
-        Status = EFI_INVALID_PARAMETER;\r
-      }\r
-    } else {\r
-      //\r
-      // Attempt to open a file or a directory that is not in the\r
-      // root directory or to open without creation a directory\r
-      // located in the root directory, returns EFI_NOT_FOUND.\r
-      //\r
-      Status = EFI_NOT_FOUND;\r
-    }\r
-    goto Error;\r
-  }\r
-\r
-  //\r
-  // BootMonFs interface requires ASCII filenames\r
-  //\r
-  AsciiFileNameSize = StrLen (Path) + 1;\r
-  if (AsciiFileNameSize > MAX_NAME_LENGTH) {\r
-    AsciiFileNameSize = MAX_NAME_LENGTH;\r
-  }\r
-  AsciiFileName = AllocatePool (AsciiFileNameSize);\r
-  if (AsciiFileName == NULL) {\r
-    Status = EFI_OUT_OF_RESOURCES;\r
-    goto Error;\r
-  }\r
-  UnicodeStrToAsciiStrS (Path, AsciiFileName, AsciiFileNameSize);\r
-\r
-  if ((AsciiFileName[0] == '\0') ||\r
-      (AsciiFileName[0] == '.' )    ) {\r
-    //\r
-    // Opening the root directory\r
-    //\r
-\r
-    *NewHandle = &Instance->RootFile->File;\r
-    Instance->RootFile->Position = 0;\r
-    Status = EFI_SUCCESS;\r
-  } else {\r
-\r
-    if ((OpenMode & EFI_FILE_MODE_CREATE) &&\r
-        (Attributes & EFI_FILE_DIRECTORY)    ) {\r
-      Status = EFI_WRITE_PROTECTED;\r
-      goto Error;\r
-    }\r
-\r
-    //\r
-    // Allocate a buffer to store the characteristics of the file while the\r
-    // file is open. We allocate the maximum size to not have to reallocate\r
-    // if the file name is changed.\r
-    //\r
-    Info = AllocateZeroPool (\r
-             SIZE_OF_EFI_FILE_INFO + (sizeof (CHAR16) * MAX_NAME_LENGTH));\r
-    if (Info == NULL) {\r
-      Status = EFI_OUT_OF_RESOURCES;\r
-      goto Error;\r
-    }\r
-\r
-    //\r
-    // Open or create a file in the root directory.\r
-    //\r
-\r
-    Status = BootMonGetFileFromAsciiFileName (Instance, AsciiFileName, &File);\r
-    if (Status == EFI_NOT_FOUND) {\r
-      if ((OpenMode & EFI_FILE_MODE_CREATE) == 0) {\r
-        goto Error;\r
-      }\r
-\r
-      Status = BootMonFsCreateFile (Instance, &File);\r
-      if (EFI_ERROR (Status)) {\r
-        goto Error;\r
-      }\r
-      InsertHeadList (&Instance->RootFile->Link, &File->Link);\r
-      Info->Attribute = Attributes;\r
-    } else {\r
-      //\r
-      // File already open, not supported yet.\r
-      //\r
-      if (File->Info != NULL) {\r
-        Status = EFI_UNSUPPORTED;\r
-        goto Error;\r
-      }\r
-    }\r
-\r
-    Info->FileSize     = BootMonFsGetImageLength (File);\r
-    Info->PhysicalSize = BootMonFsGetPhysicalSize (File);\r
-    AsciiStrToUnicodeStrS (AsciiFileName, Info->FileName, MAX_NAME_LENGTH);\r
-\r
-    File->Info = Info;\r
-    Info = NULL;\r
-    File->Position = 0;\r
-    File->OpenMode = OpenMode;\r
-\r
-    *NewHandle = &File->File;\r
-  }\r
-\r
-Error:\r
-\r
-  FreePool (Buf);\r
-  if (AsciiFileName != NULL) {\r
-    FreePool (AsciiFileName);\r
-  }\r
-  if (Info != NULL) {\r
-    FreePool (Info);\r
-  }\r
-\r
-  return Status;\r
-}\r
-\r
-// Delete() for the root directory's EFI_FILE_PROTOCOL instance\r
-EFIAPI\r
-EFI_STATUS\r
-BootMonFsDeleteFail (\r
-  IN EFI_FILE_PROTOCOL *This\r
-  )\r
-{\r
-  This->Close(This);\r
-  // You can't delete the root directory\r
-  return EFI_WARN_DELETE_FAILURE;\r
-}\r
-\r
-/**\r
-  Close and delete a file from the boot monitor file system.\r
-\r
-  @param[in]  This  A pointer to the EFI_FILE_PROTOCOL instance that is the file\r
-                    handle to delete.\r
-\r
-  @retval  EFI_SUCCESS              The file was closed and deleted.\r
-  @retval  EFI_INVALID_PARAMETER    The parameter "This" is NULL or is not an open\r
-                                    file handle.\r
-  @retval  EFI_WARN_DELETE_FAILURE  The handle was closed, but the file was not deleted.\r
-\r
-**/\r
-EFIAPI\r
-EFI_STATUS\r
-BootMonFsDelete (\r
-  IN EFI_FILE_PROTOCOL *This\r
-  )\r
-{\r
-  EFI_STATUS               Status;\r
-  BOOTMON_FS_FILE         *File;\r
-  LIST_ENTRY              *RegionToFlushLink;\r
-  BOOTMON_FS_FILE_REGION  *Region;\r
-\r
-  if (This == NULL) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-  File = BOOTMON_FS_FILE_FROM_FILE_THIS (This);\r
-  if (File->Info == NULL) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-  if (!IsListEmpty (&File->RegionToFlushLink)) {\r
-    // Free the entries from the Buffer List\r
-    RegionToFlushLink = GetFirstNode (&File->RegionToFlushLink);\r
-    do {\r
-      Region = (BOOTMON_FS_FILE_REGION*)RegionToFlushLink;\r
-\r
-      //\r
-      // Get next element of the list before deleting the region description\r
-      // that contain the LIST_ENTRY structure.\r
-      //\r
-      RegionToFlushLink = RemoveEntryList (RegionToFlushLink);\r
-\r
-      // Free the buffers\r
-      FreePool (Region->Buffer);\r
-      FreePool (Region);\r
-    } while (!IsListEmpty (&File->RegionToFlushLink));\r
-  }\r
-\r
-  // If (RegionCount is greater than 0) then the file already exists\r
-  if (File->HwDescription.RegionCount > 0) {\r
-    // Invalidate the last Block\r
-    Status = InvalidateImageDescription (File);\r
-    ASSERT_EFI_ERROR (Status);\r
-    if (EFI_ERROR (Status)) {\r
-      return  EFI_WARN_DELETE_FAILURE;\r
-    }\r
-  }\r
-\r
-  // Remove the entry from the list\r
-  RemoveEntryList (&File->Link);\r
-  FreePool (File->Info);\r
-  FreePool (File);\r
-\r
-  return EFI_SUCCESS;\r
-}\r
diff --git a/ArmPlatformPkg/FileSystem/BootMonFs/BootMonFsReadWrite.c b/ArmPlatformPkg/FileSystem/BootMonFs/BootMonFsReadWrite.c
deleted file mode 100644 (file)
index f8124e9..0000000
+++ /dev/null
@@ -1,259 +0,0 @@
-/** @file\r
-*\r
-*  Copyright (c) 2012-2014, ARM Limited. All rights reserved.\r
-*\r
-*  This program and the accompanying materials\r
-*  are licensed and made available under the terms and conditions of the BSD License\r
-*  which accompanies this distribution.  The full text of the license may be found at\r
-*  http://opensource.org/licenses/bsd-license.php\r
-*\r
-*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-*\r
-**/\r
-\r
-#include <Protocol/SimpleFileSystem.h>\r
-#include <Library/UefiLib.h>\r
-#include <Library/BaseMemoryLib.h>\r
-#include <Library/MemoryAllocationLib.h>\r
-#include <Library/DebugLib.h>\r
-\r
-#include "BootMonFsInternal.h"\r
-\r
-/**\r
-  Read data from an open file.\r
-\r
-  @param[in]      This        A pointer to the EFI_FILE_PROTOCOL instance that\r
-                              is the file handle to read data from.\r
-  @param[in out]  BufferSize  On input, the size of the Buffer. On output, the\r
-                              amount of data returned in Buffer. In both cases,\r
-                              the size is measured in bytes.\r
-  @param[out]     Buffer      The buffer into which the data is read.\r
-\r
-  @retval  EFI_SUCCESS            The data was read.\r
-  @retval  EFI_DEVICE_ERROR       On entry, the current file position is\r
-                                  beyond the end of the file, or the device\r
-                                  reported an error while performing the read\r
-                                  operation.\r
-  @retval  EFI_INVALID_PARAMETER  At least one of the parameters is invalid.\r
-\r
-**/\r
-EFIAPI\r
-EFI_STATUS\r
-BootMonFsReadFile (\r
-  IN EFI_FILE_PROTOCOL  *This,\r
-  IN OUT UINTN          *BufferSize,\r
-  OUT VOID              *Buffer\r
-  )\r
-{\r
-  BOOTMON_FS_INSTANCE   *Instance;\r
-  BOOTMON_FS_FILE       *File;\r
-  EFI_DISK_IO_PROTOCOL  *DiskIo;\r
-  EFI_BLOCK_IO_MEDIA    *Media;\r
-  UINT64                FileStart;\r
-  EFI_STATUS            Status;\r
-  UINTN                 RemainingFileSize;\r
-\r
-  if ((This == NULL)       ||\r
-      (BufferSize == NULL) ||\r
-      (Buffer == NULL)        ) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-  File = BOOTMON_FS_FILE_FROM_FILE_THIS (This);\r
-  if (File->Info == NULL) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-  // Ensure the file has been written in Flash before reading it.\r
-  // This keeps the code simple and avoids having to manage a non-flushed file.\r
-  BootMonFsFlushFile (This);\r
-\r
-  Instance  = File->Instance;\r
-  DiskIo    = Instance->DiskIo;\r
-  Media     = Instance->Media;\r
-  FileStart = (Media->LowestAlignedLba + File->HwDescription.BlockStart) * Media->BlockSize;\r
-\r
-  if (File->Position >= File->Info->FileSize) {\r
-    // The entire file has been read or the position has been\r
-    // set past the end of the file.\r
-    *BufferSize = 0;\r
-    if (File->Position > File->Info->FileSize) {\r
-      return EFI_DEVICE_ERROR;\r
-    } else {\r
-      return EFI_SUCCESS;\r
-    }\r
-  }\r
-\r
-  // This driver assumes that the entire file is in region 0.\r
-  RemainingFileSize = File->Info->FileSize - File->Position;\r
-\r
-  // If read would go past end of file, truncate the read\r
-  if (*BufferSize > RemainingFileSize) {\r
-    *BufferSize = RemainingFileSize;\r
-  }\r
-\r
-  Status = DiskIo->ReadDisk (\r
-                    DiskIo,\r
-                    Media->MediaId,\r
-                    FileStart + File->Position,\r
-                    *BufferSize,\r
-                    Buffer\r
-                    );\r
-  if (EFI_ERROR (Status)) {\r
-    *BufferSize = 0;\r
-  }\r
-\r
-  File->Position += *BufferSize;\r
-\r
-  return Status;\r
-}\r
-\r
-/**\r
-  Write data to an open file.\r
-\r
-  The data is not written to the flash yet. It will be written when the file\r
-  will be either read, closed or flushed.\r
-\r
-  @param[in]      This        A pointer to the EFI_FILE_PROTOCOL instance that\r
-                              is the file handle to write data to.\r
-  @param[in out]  BufferSize  On input, the size of the Buffer. On output, the\r
-                              size of the data actually written. In both cases,\r
-                              the size is measured in bytes.\r
-  @param[in]      Buffer      The buffer of data to write.\r
-\r
-  @retval  EFI_SUCCESS            The data was written.\r
-  @retval  EFI_ACCESS_DENIED      The file was opened read only.\r
-  @retval  EFI_OUT_OF_RESOURCES   Unable to allocate the buffer to store the\r
-                                  data to write.\r
-  @retval  EFI_INVALID_PARAMETER  At least one of the parameters is invalid.\r
-\r
-**/\r
-EFIAPI\r
-EFI_STATUS\r
-BootMonFsWriteFile (\r
-  IN EFI_FILE_PROTOCOL  *This,\r
-  IN OUT UINTN          *BufferSize,\r
-  IN VOID               *Buffer\r
-  )\r
-{\r
-  BOOTMON_FS_FILE         *File;\r
-  BOOTMON_FS_FILE_REGION  *Region;\r
-\r
-  if (This == NULL) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-  File = BOOTMON_FS_FILE_FROM_FILE_THIS (This);\r
-  if (File->Info == NULL) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-  if (File->OpenMode == EFI_FILE_MODE_READ) {\r
-    return EFI_ACCESS_DENIED;\r
-  }\r
-\r
-  // Allocate and initialize the memory region\r
-  Region = (BOOTMON_FS_FILE_REGION*)AllocateZeroPool (sizeof (BOOTMON_FS_FILE_REGION));\r
-  if (Region == NULL) {\r
-    *BufferSize = 0;\r
-    return EFI_OUT_OF_RESOURCES;\r
-  }\r
-\r
-  Region->Buffer = AllocateCopyPool (*BufferSize, Buffer);\r
-  if (Region->Buffer == NULL) {\r
-    *BufferSize = 0;\r
-    FreePool (Region);\r
-    return EFI_OUT_OF_RESOURCES;\r
-  }\r
-\r
-  Region->Size   = *BufferSize;\r
-  Region->Offset = File->Position;\r
-\r
-  InsertTailList (&File->RegionToFlushLink, &Region->Link);\r
-\r
-  File->Position += *BufferSize;\r
-\r
-  if (File->Position > File->Info->FileSize) {\r
-    File->Info->FileSize = File->Position;\r
-  }\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
-  Set a file's current position.\r
-\r
-  @param[in]  This      A pointer to the EFI_FILE_PROTOCOL instance that is\r
-                        the file handle to set the requested position on.\r
-  @param[in]  Position  The byte position from the start of the file to set.\r
-\r
-  @retval  EFI_SUCCESS            The position was set.\r
-  @retval  EFI_INVALID_PARAMETER  At least one of the parameters is invalid.\r
-\r
-**/\r
-EFIAPI\r
-EFI_STATUS\r
-BootMonFsSetPosition (\r
-  IN EFI_FILE_PROTOCOL  *This,\r
-  IN UINT64             Position\r
-  )\r
-{\r
-  BOOTMON_FS_FILE  *File;\r
-\r
-  if (This == NULL) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-  File = BOOTMON_FS_FILE_FROM_FILE_THIS (This);\r
-  if (File->Info == NULL) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-  //\r
-  // UEFI Spec section 12.5:\r
-  // "Seeking to position 0xFFFFFFFFFFFFFFFF causes the current position to\r
-  // be set to the end of the file."\r
-  //\r
-  if (Position == 0xFFFFFFFFFFFFFFFF) {\r
-    Position = File->Info->FileSize;\r
-  }\r
-\r
-  File->Position = Position;\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
-  Return a file's current position.\r
-\r
-  @param[in]   This      A pointer to the EFI_FILE_PROTOCOL instance that is\r
-                         the file handle to get the current position on.\r
-  @param[out]  Position  The address to return the file's current position value.\r
-\r
-  @retval  EFI_SUCCESS            The position was returned.\r
-  @retval  EFI_INVALID_PARAMETER  At least one of the parameters is invalid.\r
-\r
-**/\r
-EFIAPI\r
-EFI_STATUS\r
-BootMonFsGetPosition (\r
-  IN  EFI_FILE_PROTOCOL *This,\r
-  OUT UINT64            *Position\r
-  )\r
-{\r
-  BOOTMON_FS_FILE         *File;\r
-\r
-  if (This == NULL) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-  File = BOOTMON_FS_FILE_FROM_FILE_THIS (This);\r
-  if (File->Info == NULL) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-  if (Position == NULL) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-  *Position = File->Position;\r
-\r
-  return EFI_SUCCESS;\r
-}\r
diff --git a/ArmPlatformPkg/FileSystem/BootMonFs/BootMonFsUnsupported.c b/ArmPlatformPkg/FileSystem/BootMonFs/BootMonFsUnsupported.c
deleted file mode 100644 (file)
index 4ecc4ea..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-/** @file\r
-*\r
-*  Copyright (c) 2012-2014, ARM Limited. All rights reserved.\r
-*\r
-*  This program and the accompanying materials\r
-*  are licensed and made available under the terms and conditions of the BSD License\r
-*  which accompanies this distribution.  The full text of the license may be found at\r
-*  http://opensource.org/licenses/bsd-license.php\r
-*\r
-*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-*\r
-**/\r
-\r
-#include "BootMonFsInternal.h"\r
-\r
-EFIAPI\r
-EFI_STATUS\r
-BootMonFsSetPositionUnsupported (\r
-  IN EFI_FILE_PROTOCOL  *This,\r
-  IN UINT64             Position\r
-  )\r
-{\r
-  ASSERT(0);\r
-  return EFI_UNSUPPORTED;\r
-}\r
-\r
-EFIAPI\r
-EFI_STATUS\r
-BootMonFsGetPositionUnsupported (\r
-  IN EFI_FILE_PROTOCOL  *This,\r
-  OUT UINT64            *Position\r
-  )\r
-{\r
-  ASSERT(0);\r
-  return EFI_UNSUPPORTED;\r
-}\r
diff --git a/ArmPlatformPkg/Include/Guid/BootMonFsFileInfo.h b/ArmPlatformPkg/Include/Guid/BootMonFsFileInfo.h
deleted file mode 100644 (file)
index c4d805c..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/** @file\r
-*\r
-*  Copyright (c) 2014, ARM Ltd. All rights reserved.\r
-*\r
-*  This program and the accompanying materials are licensed and made available\r
-*  under the terms and conditions of the BSD License which accompanies this\r
-*  distribution. The full text of the license may be found at\r
-*  http://opensource.org/licenses/bsd-license.php\r
-*\r
-*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT\r
-*  WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-*\r
-**/\r
-\r
-#ifndef __BOOTMON_FS_FILE_INFO_H__\r
-#define __BOOTMON_FS_FILE_INFO_H__\r
-\r
-#define BOOTMON_FS_FILE_INFO_ID \\r
-  { \\r
-    0x41e26b9c, 0xada6, 0x45b3, {0x80, 0x8e, 0x23, 0x57, 0xa3, 0x5b, 0x60, 0xd6 } \\r
-  }\r
-\r
-// From BootMonFS header file\r
-#define BOOTMONFS_IMAGE_DESCRIPTION_REGION_MAX 4\r
-\r
-typedef struct {\r
-  // The size of the structure.\r
-  UINT64    Size;\r
-\r
-  // Subset of properties stored in the file meta-data.\r
-  UINT32  EntryPoint;\r
-  UINT32  RegionCount;\r
-  struct {\r
-    UINT32 LoadAddress;\r
-    UINT32 Size;\r
-    UINT32 Offset;\r
-    UINT32 Checksum;\r
-  } Region[BOOTMONFS_IMAGE_DESCRIPTION_REGION_MAX];\r
-\r
-} BOOTMON_FS_FILE_INFO;\r
-\r
-#define SIZE_OF_BOOTMON_FS_FILE_INFO \\r
-  OFFSET_OF (BOOTMON_FS_FILE_INFO, Region[BOOTMONFS_IMAGE_DESCRIPTION_REGION_MAX - 1].Checksum)\r
-\r
-extern EFI_GUID gArmBootMonFsFileInfoGuid;\r
-\r
-#endif // __BOOTMON_FS_FILE_INFO_H__\r
diff --git a/ArmPlatformPkg/Include/Library/ArmShellCmdLib.h b/ArmPlatformPkg/Include/Library/ArmShellCmdLib.h
deleted file mode 100644 (file)
index eb31cd4..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/** @file\r
-*\r
-*  Definitions for the Dynamic Shell command library\r
-*\r
-*  Copyright (C) 2014, ARM Ltd\r
-*\r
-*  This program and the accompanying materials are licensed and made available\r
-*  under the terms and conditions of the BSD License which accompanies this\r
-*  distribution. The full text of the license may be found at\r
-*  http://opensource.org/licenses/bsd-license.php\r
-*\r
-*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT\r
-*  WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-*\r
-**/\r
-\r
-#ifndef _ARM_SHELL_CMD_LIB_H_\r
-#define _ARM_SHELL_CMD_LIB_H_\r
-\r
-/**\r
-\r
-  Initialize and Install EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL for RunAxf command.\r
-\r
-  @param[in] ImageHandle        Handle the protocol should be attached to.\r
-\r
-  @retval EFI_SUCCESS           The command has been installed successfully.\r
-\r
-  @retval EFI_UNSUPPORTED       Help for the command failed to initialise.\r
-\r
-  @return                       Status code returned by InstallProtocolInterface\r
-                                Boot Service function.\r
-\r
-**/\r
-EFI_STATUS\r
-ShellDynCmdRunAxfInstall (\r
-  IN EFI_HANDLE             ImageHandle\r
-  );\r
-\r
-/**\r
-\r
-  Uninstall the RunAxf Command\r
-\r
-  @param[in] ImageHandle  Handle of the device where the protocol should have\r
-                          been installed.\r
-\r
-  @retval EFI_SUCCESS     The device has been un-initialized successfully.\r
-\r
-  @return                 Status code returned by UninstallProtocolInterface\r
-                          Boot Service function.\r
-\r
-**/\r
-EFI_STATUS\r
-ShellDynCmdRunAxfUninstall (\r
-  IN EFI_HANDLE             ImageHandle\r
-  );\r
-\r
-#endif // _ARM_SHELL_CMD_LIB_H_\r
diff --git a/ArmPlatformPkg/Library/ArmShellCmdRunAxf/ArmShellCmdRunAxf.c b/ArmPlatformPkg/Library/ArmShellCmdRunAxf/ArmShellCmdRunAxf.c
deleted file mode 100644 (file)
index 67bbb9e..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-/** @file\r
-*\r
-*  Copyright (c) 2014, ARM Ltd. All rights reserved.<BR>\r
-*\r
-*  This program and the accompanying materials are licensed and made available\r
-*  under the terms and conditions of the BSD License which accompanies this\r
-*  distribution.  The full text of the license may be found at\r
-*  http://opensource.org/licenses/bsd-license.php\r
-*\r
-*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-*\r
-**/\r
-\r
-#include <Uefi.h>\r
-\r
-#include <Library/BaseLib.h>\r
-#include <Library/DebugLib.h>\r
-#include <Library/UefiLib.h>\r
-#include <Library/ArmShellCmdLib.h>\r
-\r
-#include "ArmShellCmdRunAxf.h"\r
-\r
-EFI_HANDLE gRunAxfHiiHandle = NULL;\r
-\r
-#define RUNAXF_HII_GUID \\r
-  { \\r
-  0xf5a6413b, 0x78d5, 0x448e, { 0xa2, 0x15, 0x22, 0x82, 0x8e, 0xbc, 0x61, 0x61 } \\r
-  }\r
-\r
-EFI_GUID gRunAxfHiiGuid = RUNAXF_HII_GUID;\r
-\r
-static EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL mShellDynCmdProtocolRunAxf = {\r
-    L"runaxf",                             // *CommandName\r
-    ShellDynCmdRunAxfHandler,              // Handler\r
-    ShellDynCmdRunAxfGetHelp               // GetHelp\r
-};\r
-\r
-EFI_STATUS\r
-ShellDynCmdRunAxfInstall (\r
-  IN EFI_HANDLE             ImageHandle\r
-  )\r
-{\r
-  EFI_STATUS Status;\r
-\r
-  // Register our shell command\r
-  Status = gBS->InstallMultipleProtocolInterfaces (&ImageHandle,\r
-                 &gEfiShellDynamicCommandProtocolGuid,\r
-                 &mShellDynCmdProtocolRunAxf,\r
-                 NULL);\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
-\r
-  // Load the manual page for our command\r
-  //\r
-  // 3rd parameter 'HII strings array' must be name of .uni strings file\r
-  // followed by 'Strings', e.g. mycommands.uni must be specified as\r
-  // 'mycommandsStrings' because the build Autogen process defines this as a\r
-  // string array for the strings in your .uni file.  Examine your Build folder\r
-  // under your package's DEBUG folder and you will find it defined in a\r
-  // xxxStrDefs.h file.\r
-  //\r
-  gRunAxfHiiHandle = HiiAddPackages (&gRunAxfHiiGuid, ImageHandle,\r
-                                     ArmShellCmdRunAxfStrings, NULL);\r
-  if (gRunAxfHiiHandle == NULL) {\r
-    return EFI_UNSUPPORTED;\r
-  }\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-\r
-EFI_STATUS\r
-ShellDynCmdRunAxfUninstall (\r
-  IN EFI_HANDLE             ImageHandle\r
-  )\r
-{\r
-\r
-  EFI_STATUS Status;\r
-\r
-  if (gRunAxfHiiHandle != NULL) {\r
-    HiiRemovePackages (gRunAxfHiiHandle);\r
-  }\r
-\r
-  Status = gBS->UninstallMultipleProtocolInterfaces (ImageHandle,\r
-                 &gEfiShellDynamicCommandProtocolGuid,\r
-                 &mShellDynCmdProtocolRunAxf,\r
-                 NULL);\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
-\r
-  return EFI_SUCCESS;\r
-}\r
diff --git a/ArmPlatformPkg/Library/ArmShellCmdRunAxf/ArmShellCmdRunAxf.h b/ArmPlatformPkg/Library/ArmShellCmdRunAxf/ArmShellCmdRunAxf.h
deleted file mode 100644 (file)
index 2708b53..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-/** @file\r
-*\r
-*  Copyright (c) 2014, ARM Ltd. All rights reserved.<BR>\r
-*\r
-*  This program and the accompanying materials are licensed and made available\r
-*  under the terms and conditions of the BSD License which accompanies this\r
-*  distribution.  The full text of the license may be found at\r
-*  http://opensource.org/licenses/bsd-license.php\r
-*\r
-*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-*\r
-**/\r
-\r
-#ifndef __ARM_SHELL_CMD_RUNAXF__\r
-#define __ARM_SHELL_CMD_RUNAXF__\r
-\r
-#include <Protocol/Shell.h>\r
-#include <Protocol/ShellDynamicCommand.h>\r
-\r
-#include <Library/HiiLib.h>\r
-#include <Library/ShellLib.h>\r
-#include <Library/UefiBootServicesTableLib.h>\r
-\r
-extern EFI_GUID      gRunAxfHiiGuid;\r
-extern EFI_HANDLE    gRunAxfHiiHandle;\r
-extern EFI_HANDLE    gRunAxfImageHandle;\r
-\r
-// List of data segments to load to memory from AXF/ELF file.\r
-typedef struct {\r
-  LIST_ENTRY  Link;       // This attribute must be the first entry of this\r
-                          // structure (to avoid pointer computation)\r
-  UINTN       MemOffset;  // Where the data should go, Dest\r
-  UINTN       FileOffset; // Where the data is from, Src\r
-  BOOLEAN     Zeroes;     // A section of Zeroes. Like .bss in ELF\r
-  UINTN       Length;     // Number of bytes.\r
-} RUNAXF_LOAD_LIST;\r
-\r
-\r
-/**\r
-  This is the shell command handler function pointer callback type. This\r
-  function handles the command when it is invoked in the shell.\r
-\r
-  @param[in] This             The instance of the\r
-                              EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL.\r
-  @param[in] SystemTable      The pointer to the system table.\r
-  @param[in] ShellParameters  The parameters associated with the command.\r
-  @param[in] Shell            The instance of the shell protocol used in the\r
-                              context of processing this command.\r
-\r
-  @return EFI_SUCCESS         The operation was successful.\r
-  @return other               The operation failed.\r
-**/\r
-SHELL_STATUS\r
-EFIAPI\r
-ShellDynCmdRunAxfHandler (\r
-  IN EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL    *This,\r
-  IN EFI_SYSTEM_TABLE                      *SystemTable,\r
-  IN EFI_SHELL_PARAMETERS_PROTOCOL         *ShellParameters,\r
-  IN EFI_SHELL_PROTOCOL                    *Shell\r
-  );\r
-\r
-\r
-/**\r
-  This is the command help handler function pointer callback type. This\r
-  function is responsible for displaying help information for the associated\r
-  command.\r
-\r
-  @param[in] This             The instance of the\r
-                              EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL.\r
-  @param[in] Language         The pointer to the language string to use.\r
-\r
-  @return string              Pool allocated help string, must be freed by\r
-                              caller.\r
-**/\r
-CHAR16*\r
-EFIAPI\r
-ShellDynCmdRunAxfGetHelp (\r
-  IN EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL    *This,\r
-  IN CONST CHAR8                           *Language\r
-  );\r
-\r
-#endif //__ARM_SHELL_CMD_RUNAXF__\r
diff --git a/ArmPlatformPkg/Library/ArmShellCmdRunAxf/ArmShellCmdRunAxf.inf b/ArmPlatformPkg/Library/ArmShellCmdRunAxf/ArmShellCmdRunAxf.inf
deleted file mode 100644 (file)
index 7d15f69..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-## @file\r
-#\r
-#  Copyright (c) 2014, ARM Ltd. All rights reserved.<BR>\r
-#\r
-#  This program and the accompanying materials are licensed and made available\r
-#  under the terms and conditions of the BSD License which accompanies this\r
-#  distribution.  The full text of the license may be found at\r
-#  http://opensource.org/licenses/bsd-license.php\r
-#\r
-#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-#\r
-##\r
-\r
-[Defines]\r
-  INF_VERSION                    = 0x00010006\r
-  BASE_NAME                      = ArmShellCmdRunAxf\r
-  FILE_GUID                      = 1f78349d-7fba-4686-8098-fa017eda35fb\r
-  MODULE_TYPE                    = UEFI_APPLICATION\r
-  VERSION_STRING                 = 1.0\r
-  LIBRARY_CLASS                  = ArmShellCmdRunAxfLib\r
-\r
-[Sources.common]\r
-  ArmShellCmdRunAxf.c\r
-  ArmShellCmdRunAxf.uni\r
-  RunAxf.c\r
-  BootMonFsLoader.h\r
-  BootMonFsLoader.c\r
-  ElfLoader.h\r
-  ElfLoader.c\r
-  # ELF definitions taken from BaseTools\r
-  elf32.h\r
-  elf64.h\r
-  elf_common.h\r
-\r
-[Packages]\r
-  ArmPkg/ArmPkg.dec\r
-  ArmPlatformPkg/ArmPlatformPkg.dec\r
-  MdeModulePkg/MdeModulePkg.dec\r
-  MdePkg/MdePkg.dec\r
-  ShellPkg/ShellPkg.dec\r
-\r
-[LibraryClasses]\r
-  ArmLib\r
-  BaseLib\r
-  DebugLib\r
-  HiiLib\r
-  ShellLib\r
-\r
-[Protocols]\r
-  gEfiShellDynamicCommandProtocolGuid\r
-\r
-[Guids]\r
-  gArmBootMonFsFileInfoGuid\r
diff --git a/ArmPlatformPkg/Library/ArmShellCmdRunAxf/ArmShellCmdRunAxf.uni b/ArmPlatformPkg/Library/ArmShellCmdRunAxf/ArmShellCmdRunAxf.uni
deleted file mode 100644 (file)
index 6b72960..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-// *++\r
-//\r
-// Copyright (c) 2014, ARM Ltd. All rights reserved.<BR>\r
-//\r
-// This program and the accompanying materials are licensed and made available\r
-// under the terms and conditions of the BSD License which accompanies this\r
-// distribution.  The full text of the license may be found at\r
-// http://opensource.org/licenses/bsd-license.php\r
-//\r
-// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-//\r
-//\r
-// Module Name:\r
-//\r
-//   RunAxfStrings.uni\r
-//\r
-// Abstract:\r
-//\r
-//   String definitions for the Shell 'runaxf' command\r
-//\r
-// Revision History:\r
-//\r
-// --*/\r
-\r
-/=#\r
-\r
-#langdef   en-US "English"\r
-\r
-#string STR_RUNAXF_BAD_FILE        #language en-US  "File type not supported\n"\r
-#string STR_RUNAXF_BAD_ARCH        #language en-US  "Architecture not supported\n"\r
-#string STR_RUNAXF_INVALID_ARG     #language en-US  "Invalid argument(s)\n"\r
-#string STR_RUNAXF_FILE_NOT_FOUND  #language en-US  "File not found : %s\n"\r
-#string STR_RUNAXF_NO_MEM          #language en-US  "Out of Memory\n"\r
-#string STR_RUNAXF_READ_FAIL       #language en-US  "Failed to read file\n"\r
-\r
-#string STR_RUNAXF_ELFMAGIC        #language en-US  "Wrong magic number. The file is either not an ELF binary or it is corrupted.\n"\r
-#string STR_RUNAXF_ELFNOTEXEC      #language en-US  "Wrong ELF file type, expected an executable file.\n"\r
-#string STR_RUNAXF_ELFNOPROG       #language en-US  "No program header table found in ELF file.\n"\r
-#string STR_RUNAXF_ELFWRONGCLASS   #language en-US  "Invalid ELF Class type.\n"\r
-#string STR_RUNAXF_ELFBADFORMAT    #language en-US  "ELF file format is incorrect (filesize > memorysize).\n"\r
-#string STR_RUNAXF_ELFBADHEADER    #language en-US  "Invalid ELF header.\n"\r
-#string STR_RUNAXF_ELFFAILSEG      #language en-US  "Failed to load segment from ELF file.\n\r
-#string STR_RUNAXF_ELFNOSEG        #language en-US  "The ELF file must have at least 1 loadable segment.\n"\r
-\r
-#string STR_RUNAXF_ELFWRONGCLASS_32  #language en-US  "Wrong file class, expected 32-bit ELF file.\n"\r
-#string STR_RUNAXF_ELFWRONGCLASS_64  #language en-US  "Wrong file class, expected 64-bit ELF file.\n"\r
-#string STR_RUNAXF_ELFWRONGMACH_32   #language en-US  "Wrong machine type, expected ARM.\n"\r
-#string STR_RUNAXF_ELFWRONGMACH_64   #language en-US  "Wrong machine type, expected AARCH64.\n"\r
-\r
-#string STR_GET_HELP_RUNAXF        #language en-US ""\r
-".TH runaxf 0 "load and execute AXF binary"\r\n"\r
-".SH NAME\r\n"\r
-"Loads and executes ARM Executable File (AXF).\r\n"\r
-".SH SYNOPSIS\r\n"\r
-"runaxf file\r\n"\r
-".SH OPTIONS\r\n"\r
-"file        AXF binary to load and execute.\r\n"\r
-".SH DESCRIPTION\r\n"\r
-"Loads and executes ARM Executable File (AXF). This function is not expected to return.\r\n"\r
-\r
-".SH RETURNVALUES\r\n"\r
-"SHELL_DEVICE_ERROR       The operation failed to complete.\r\n"\r
-"SHELL_INVALID_PARAMETER  One of the passed in parameters was incorrectly formatted or its value was out of bounds.\r\n"\r
-"SHELL_UNSUPPORTED        The action as requested was unsupported.\r\n"\r
-"SHELL_OUT_OF_RESOURCES   There was insufficient free space for the request to be completed.\r\n"\r
-".SH EXAMPLES\r\n"\r
-"  fs0:\> runaxf file.axf\r\n"\r
diff --git a/ArmPlatformPkg/Library/ArmShellCmdRunAxf/BootMonFsLoader.c b/ArmPlatformPkg/Library/ArmShellCmdRunAxf/BootMonFsLoader.c
deleted file mode 100644 (file)
index 0bce037..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
-/** @file\r
-*\r
-*  Copyright (c) 2014, ARM Ltd. All rights reserved.\r
-*\r
-*  This program and the accompanying materials are licensed and made available\r
-*  under the terms and conditions of the BSD License which accompanies this\r
-*  distribution. The full text of the license may be found at\r
-*  http://opensource.org/licenses/bsd-license.php\r
-*\r
-*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT\r
-*  WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-*\r
-**/\r
-\r
-#include <Library/BaseLib.h>\r
-#include <Library/BaseMemoryLib.h>\r
-#include <Library/MemoryAllocationLib.h>\r
-#include <Library/DebugLib.h>\r
-#include <Library/UefiLib.h>\r
-\r
-#include <Guid/BootMonFsFileInfo.h>\r
-#include <Protocol/SimpleFileSystem.h> // EFI_FILE_HANDLE\r
-\r
-#include "ArmShellCmdRunAxf.h"\r
-#include "BootMonFsLoader.h"\r
-\r
-/**\r
-  Check that loading the file is supported.\r
-\r
-  Not all information is checked, only the properties that matters to us in\r
-  our simplified loader.\r
-\r
-  BootMonFS file properties is not in a file header but in the file-system\r
-  metadata, so we need to pass a handle to the file to allow access to the\r
-  information.\r
-\r
-  @param[in] FileHandle  Handle of the file to check.\r
-\r
-  @retval EFI_SUCCESS on success.\r
-  @retval EFI_INVALID_PARAMETER if the header is invalid.\r
-  @retval EFI_UNSUPPORTED if the file type/platform is not supported.\r
-**/\r
-EFI_STATUS\r
-BootMonFsCheckFile (\r
-  IN  CONST EFI_FILE_HANDLE  FileHandle\r
-  )\r
-{\r
-  EFI_STATUS           Status;\r
-  BOOTMON_FS_FILE_INFO Info;\r
-  UINTN                InfoSize;\r
-  UINTN                Index;\r
-\r
-  ASSERT (FileHandle != NULL);\r
-\r
-  // Try to load the file information as BootMonFS executable.\r
-  InfoSize = sizeof (Info);\r
-  // Get BootMon File info and see if it gives us what we need to load the file.\r
-  Status = FileHandle->GetInfo (FileHandle, &gArmBootMonFsFileInfoGuid,\r
-                               &InfoSize, &Info);\r
-\r
-  if (!EFI_ERROR (Status)) {\r
-    // Check the values return to see if they look reasonable.\r
-    // Do we have a good entrypoint and at least one good load region?\r
-    // We assume here that we cannot load to address 0x0.\r
-    if ((Info.Size == 0) || (Info.EntryPoint == 0) || (Info.RegionCount == 0) ||\r
-        (Info.RegionCount > BOOTMONFS_IMAGE_DESCRIPTION_REGION_MAX)) {\r
-      // The file does not seem to be of the right type.\r
-      Status = EFI_UNSUPPORTED;\r
-    } else {\r
-      // Check load regions. We just check for valid numbers, we dont do the\r
-      // checksums. Info.Offset can be zero if it loads from the start of the\r
-      // file.\r
-      for (Index = 0; Index < Info.RegionCount; Index++) {\r
-        if ((Info.Region[Index].LoadAddress == 0) || (Info.Region[Index].Size == 0)) {\r
-          Status = EFI_UNSUPPORTED;\r
-          break;\r
-        }\r
-      }\r
-    }\r
-  }\r
-\r
-  return Status;\r
-}\r
-\r
-/**\r
-  Load a binary file from BootMonFS.\r
-\r
-  @param[in]  FileHandle    Handle of the file to load.\r
-\r
-  @param[in]  FileData      Address  of the file data in memory.\r
-\r
-  @param[out] EntryPoint    Will be filled with the ELF entry point address.\r
-\r
-  @param[out] ImageSize     Will be filled with the file size in memory. This\r
-                            will effectively be equal to the sum of the load\r
-                            region sizes.\r
-\r
-  This function assumes the file is valid and supported as checked with\r
-  BootMonFsCheckFile().\r
-\r
-  @retval EFI_SUCCESS on success.\r
-  @retval EFI_INVALID_PARAMETER if the file is invalid.\r
-**/\r
-EFI_STATUS\r
-BootMonFsLoadFile (\r
-  IN  CONST EFI_FILE_HANDLE   FileHandle,\r
-  IN  CONST VOID             *FileData,\r
-  OUT VOID                  **EntryPoint,\r
-  OUT LIST_ENTRY             *LoadList\r
-  )\r
-{\r
-  EFI_STATUS            Status;\r
-  BOOTMON_FS_FILE_INFO  Info;\r
-  UINTN                 InfoSize;\r
-  UINTN                 Index;\r
-  UINTN                 ImageSize;\r
-  RUNAXF_LOAD_LIST     *LoadNode;\r
-\r
-  ASSERT (FileHandle != NULL);\r
-  ASSERT (FileData   != NULL);\r
-  ASSERT (EntryPoint != NULL);\r
-  ASSERT (LoadList   != NULL);\r
-\r
-  ImageSize = 0;\r
-\r
-  InfoSize = sizeof (Info);\r
-  Status = FileHandle->GetInfo (FileHandle, &gArmBootMonFsFileInfoGuid,\r
-                               &InfoSize, &Info);\r
-\r
-  if (!EFI_ERROR (Status)) {\r
-    *EntryPoint = (VOID*)((UINTN)Info.EntryPoint);\r
-    // Load all the regions to run-time memory\r
-    for (Index = 0; Index < Info.RegionCount; Index++) {\r
-      LoadNode = AllocateRuntimeZeroPool (sizeof (RUNAXF_LOAD_LIST));\r
-      if (LoadNode == NULL) {\r
-        Status = EFI_OUT_OF_RESOURCES;\r
-        break;\r
-      }\r
-\r
-      LoadNode->MemOffset  = (UINTN)Info.Region[Index].LoadAddress;\r
-      LoadNode->FileOffset = (UINTN)FileData + Info.Region[Index].Offset;\r
-      LoadNode->Length     = (UINTN)Info.Region[Index].Size;\r
-      InsertTailList (LoadList, &LoadNode->Link);\r
-\r
-      ImageSize += LoadNode->Length;\r
-    }\r
-  }\r
-\r
-  if ((!EFI_ERROR (Status)) && (ImageSize == 0)) {\r
-    Status = EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-  return Status;\r
-}\r
diff --git a/ArmPlatformPkg/Library/ArmShellCmdRunAxf/BootMonFsLoader.h b/ArmPlatformPkg/Library/ArmShellCmdRunAxf/BootMonFsLoader.h
deleted file mode 100644 (file)
index de3c0ad..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/** @file\r
-*\r
-*  Copyright (c) 2014, ARM Ltd. All rights reserved.\r
-*\r
-*  This program and the accompanying materials are licensed and made available\r
-*  under the terms and conditions of the BSD License which accompanies this\r
-*  distribution. The full text of the license may be found at\r
-*  http://opensource.org/licenses/bsd-license.php\r
-*\r
-*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT\r
-*  WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-*\r
-**/\r
-\r
-#ifndef __BOOTMONFS_LOADER_H__\r
-#define __BOOTMONFS_LOADER_H__\r
-\r
-/**\r
-  Check that loading the file is supported.\r
-\r
-  Not all information is checked, only the properties that matters to us in\r
-  our simplified loader.\r
-\r
-  BootMonFS file properties is not in a file header but in the file-system\r
-  metadata, so we need to pass a handle to the file to allow access to the\r
-  information.\r
-\r
-  @param[in] FileHandle  Handle of the file to check.\r
-\r
-  @retval EFI_SUCCESS on success.\r
-  @retval EFI_INVALID_PARAMETER if the header is invalid.\r
-  @retval EFI_UNSUPPORTED if the file type/platform is not supported.\r
-**/\r
-EFI_STATUS\r
-BootMonFsCheckFile (\r
-  IN  CONST EFI_FILE_HANDLE  FileHandle\r
-  );\r
-\r
-/**\r
-  Load a binary file from BootMonFS.\r
-\r
-  @param[in]  FileHandle    Handle of the file to load.\r
-\r
-  @param[in]  FileData      Address  of the file data in memory.\r
-\r
-  @param[out] EntryPoint    Will be filled with the ELF entry point address.\r
-\r
-  @param[out] ImageSize     Will be filled with the file size in memory. This\r
-                            will effectively be equal to the sum of the load\r
-                            region sizes.\r
-\r
-  This function assumes the file is valid and supported as checked with\r
-  BootMonFsCheckFile().\r
-\r
-  @retval EFI_SUCCESS on success.\r
-  @retval EFI_INVALID_PARAMETER if the file is invalid.\r
-**/\r
-EFI_STATUS\r
-BootMonFsLoadFile (\r
-  IN  CONST EFI_FILE_HANDLE   FileHandle,\r
-  IN  CONST VOID             *FileData,\r
-  OUT VOID                  **EntryPoint,\r
-  OUT LIST_ENTRY             *LoadList\r
-  );\r
-\r
-#endif // __BOOTMONFS_LOADER_H__\r
diff --git a/ArmPlatformPkg/Library/ArmShellCmdRunAxf/ElfLoader.c b/ArmPlatformPkg/Library/ArmShellCmdRunAxf/ElfLoader.c
deleted file mode 100644 (file)
index 6bb0d22..0000000
+++ /dev/null
@@ -1,340 +0,0 @@
-/** @file\r
-*\r
-*  Copyright (c) 2014, ARM Limited. All rights reserved.\r
-*\r
-*  This program and the accompanying materials\r
-*  are licensed and made available under the terms and conditions of the BSD License\r
-*  which accompanies this distribution.  The full text of the license may be found at\r
-*  http://opensource.org/licenses/bsd-license.php\r
-*\r
-*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-*\r
-**/\r
-\r
-#include <Library/BaseLib.h>\r
-#include <Library/BaseMemoryLib.h>\r
-#include <Library/MemoryAllocationLib.h>\r
-#include <Library/DebugLib.h>\r
-#include <Library/UefiLib.h>\r
-\r
-#include "ArmShellCmdRunAxf.h"\r
-#include "ElfLoader.h"\r
-#include "elf_common.h"\r
-#include "elf32.h"\r
-#include "elf64.h"\r
-\r
-\r
-// Put the functions the #ifdef. We only use the appropriate one for the platform.\r
-// This prevents 'defined but not used' compiler warning.\r
-#ifdef MDE_CPU_ARM\r
-STATIC\r
-BOOLEAN\r
-IsArmElf (\r
-  IN  CONST VOID *Buf\r
-  )\r
-{\r
-  Elf32_Ehdr *Hdr = (Elf32_Ehdr*)Buf;\r
-\r
-  if (Hdr->e_ident[EI_CLASS] != ELFCLASS32) {\r
-    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_RUNAXF_ELFWRONGCLASS_32), gRunAxfHiiHandle);\r
-    return FALSE;\r
-  }\r
-\r
-  if (Hdr->e_machine != EM_ARM) {\r
-    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_RUNAXF_ELFWRONGMACH_32), gRunAxfHiiHandle);\r
-    return FALSE;\r
-  }\r
-\r
-  // We don't currently check endianness of ELF data (hdr->e_ident[EI_DATA])\r
-\r
-  return TRUE;\r
-}\r
-#elif defined(MDE_CPU_AARCH64)\r
-STATIC\r
-BOOLEAN\r
-IsAarch64Elf (\r
-  IN  CONST VOID *Buf\r
-  )\r
-{\r
-  Elf64_Ehdr *Hdr = (Elf64_Ehdr*)Buf;\r
-\r
-  if (Hdr->e_ident[EI_CLASS] != ELFCLASS64) {\r
-    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_RUNAXF_ELFWRONGCLASS_64), gRunAxfHiiHandle);\r
-    return FALSE;\r
-  }\r
-\r
-  if (Hdr->e_machine != EM_AARCH64) {\r
-    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_RUNAXF_ELFWRONGMACH_64), gRunAxfHiiHandle);\r
-    return FALSE;\r
-  }\r
-\r
-  // We don't currently check endianness of ELF data (hdr->e_ident[EI_DATA])\r
-\r
-  return TRUE;\r
-}\r
-#endif // MDE_CPU_ARM , MDE_CPU_AARCH64\r
-\r
-\r
-/**\r
- Support checking 32 and 64bit as the header could be valid, we might just\r
- not support loading it.\r
-**/\r
-STATIC\r
-EFI_STATUS\r
-ElfCheckHeader (\r
-  IN  CONST VOID *Buf\r
-  )\r
-{\r
-  Elf32_Ehdr *Hdr32 = (Elf32_Ehdr*)Buf;\r
-\r
-  if (!IS_ELF (*Hdr32)) {\r
-    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_RUNAXF_ELFMAGIC), gRunAxfHiiHandle);\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-  if (Hdr32->e_type != ET_EXEC) {\r
-    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_RUNAXF_ELFNOTEXEC), gRunAxfHiiHandle);\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-  if (Hdr32->e_ident[EI_CLASS] == ELFCLASS32) {\r
-    if ((Hdr32->e_phoff == 0) || (Hdr32->e_phentsize == 0) || (Hdr32->e_phnum == 0)) {\r
-      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_RUNAXF_ELFNOPROG), gRunAxfHiiHandle);\r
-      return EFI_INVALID_PARAMETER;\r
-    }\r
-\r
-    if (Hdr32->e_flags != 0) {\r
-      DEBUG ((EFI_D_INFO, "Warning: Wrong processor-specific flags, expected 0.\n"));\r
-    }\r
-\r
-    DEBUG ((EFI_D_INFO, "Entry point addr: 0x%lx\n", Hdr32->e_entry));\r
-    DEBUG ((EFI_D_INFO, "Start of program headers: 0x%lx\n", Hdr32->e_phoff));\r
-    DEBUG ((EFI_D_INFO, "Size of 1 program header: %d\n", Hdr32->e_phentsize));\r
-    DEBUG ((EFI_D_INFO, "Number of program headers: %d\n", Hdr32->e_phnum));\r
-  } else if (Hdr32->e_ident[EI_CLASS] == ELFCLASS64) {\r
-      Elf64_Ehdr *Hdr64 = (Elf64_Ehdr*)Buf;\r
-\r
-    if ((Hdr64->e_phoff == 0) || (Hdr64->e_phentsize == 0) || (Hdr64->e_phnum == 0)) {\r
-      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_RUNAXF_ELFNOPROG), gRunAxfHiiHandle);\r
-      return EFI_INVALID_PARAMETER;\r
-    }\r
-\r
-    if (Hdr64->e_flags != 0) {\r
-      DEBUG ((EFI_D_INFO, "Warning: Wrong processor-specific flags, expected 0.\n"));\r
-    }\r
-\r
-    DEBUG ((EFI_D_INFO, "Entry point addr: 0x%lx\n", Hdr64->e_entry));\r
-    DEBUG ((EFI_D_INFO, "Start of program headers: 0x%lx\n", Hdr64->e_phoff));\r
-    DEBUG ((EFI_D_INFO, "Size of 1 program header: %d\n", Hdr64->e_phentsize));\r
-    DEBUG ((EFI_D_INFO, "Number of program headers: %d\n", Hdr64->e_phnum));\r
-  } else {\r
-    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_RUNAXF_ELFWRONGCLASS), gRunAxfHiiHandle);\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-\r
-/**\r
- Load an ELF segment into memory.\r
-\r
- This function assumes the ELF file is valid.\r
- This function is meant to be called for PT_LOAD type segments only.\r
-**/\r
-STATIC\r
-EFI_STATUS\r
-ElfLoadSegment (\r
-  IN  CONST VOID  *ElfImage,\r
-  IN  CONST VOID  *PHdr,\r
-  IN  LIST_ENTRY  *LoadList\r
-  )\r
-{\r
-  VOID             *FileSegment;\r
-  VOID             *MemSegment;\r
-  UINTN             ExtraZeroes;\r
-  UINTN             ExtraZeroesCount;\r
-  RUNAXF_LOAD_LIST *LoadNode;\r
-\r
-#ifdef MDE_CPU_ARM\r
-  Elf32_Phdr  *ProgramHdr;\r
-  ProgramHdr = (Elf32_Phdr *)PHdr;\r
-#elif defined(MDE_CPU_AARCH64)\r
-  Elf64_Phdr  *ProgramHdr;\r
-  ProgramHdr = (Elf64_Phdr *)PHdr;\r
-#endif\r
-\r
-  ASSERT (ElfImage != NULL);\r
-  ASSERT (ProgramHdr != NULL);\r
-\r
-  FileSegment = (VOID *)((UINTN)ElfImage + ProgramHdr->p_offset);\r
-  MemSegment = (VOID *)ProgramHdr->p_vaddr;\r
-\r
-  // If the segment's memory size p_memsz is larger than the file size p_filesz,\r
-  // the "extra" bytes are defined to hold the value 0 and to follow the\r
-  // segment's initialised area.\r
-  // This is typically the case for the .bss segment.\r
-  // The file size may not be larger than the memory size.\r
-  if (ProgramHdr->p_filesz > ProgramHdr->p_memsz) {\r
-    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_RUNAXF_ELFBADFORMAT), gRunAxfHiiHandle);\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-  // Load the segment in memory.\r
-  if (ProgramHdr->p_filesz != 0) {\r
-    DEBUG ((EFI_D_INFO, "Loading segment from 0x%lx to 0x%lx (size = %ld)\n",\r
-                 FileSegment, MemSegment, ProgramHdr->p_filesz));\r
-\r
-    LoadNode = AllocateRuntimeZeroPool (sizeof (RUNAXF_LOAD_LIST));\r
-    if (LoadNode == NULL) {\r
-      return EFI_OUT_OF_RESOURCES;\r
-    }\r
-    LoadNode->MemOffset  = (UINTN)MemSegment;\r
-    LoadNode->FileOffset = (UINTN)FileSegment;\r
-    LoadNode->Length     = (UINTN)ProgramHdr->p_filesz;\r
-    InsertTailList (LoadList, &LoadNode->Link);\r
-  }\r
-\r
-  ExtraZeroes = ((UINTN)MemSegment + ProgramHdr->p_filesz);\r
-  ExtraZeroesCount = ProgramHdr->p_memsz - ProgramHdr->p_filesz;\r
-  DEBUG ((EFI_D_INFO, "Completing segment with %d zero bytes.\n", ExtraZeroesCount));\r
-  if (ExtraZeroesCount > 0) {\r
-    // Extra Node to add the Zeroes.\r
-    LoadNode = AllocateRuntimeZeroPool (sizeof (RUNAXF_LOAD_LIST));\r
-    if (LoadNode == NULL) {\r
-      return EFI_OUT_OF_RESOURCES;\r
-    }\r
-    LoadNode->MemOffset  = (UINTN)ExtraZeroes;\r
-    LoadNode->Zeroes     = TRUE;\r
-    LoadNode->Length     = ExtraZeroesCount;\r
-    InsertTailList (LoadList, &LoadNode->Link);\r
-  }\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-\r
-/**\r
- Check that the ELF File Header is valid and Machine type supported.\r
-\r
- Not all information is checked in the ELF header, only the stuff that\r
- matters to us in our simplified ELF loader.\r
-\r
- @param[in] ElfImage  Address of the ELF file to check.\r
-\r
- @retval EFI_SUCCESS on success.\r
- @retval EFI_INVALID_PARAMETER if the header is invalid.\r
- @retval EFI_UNSUPPORTED if the file type/platform is not supported.\r
-**/\r
-EFI_STATUS\r
-ElfCheckFile (\r
-  IN  CONST VOID *ElfImage\r
-  )\r
-{\r
-  EFI_STATUS Status;\r
-\r
-  ASSERT (ElfImage != NULL);\r
-\r
-  // Check that the ELF header is valid.\r
-  Status = ElfCheckHeader (ElfImage);\r
-  if (EFI_ERROR(Status)) {\r
-    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_RUNAXF_ELFBADHEADER), gRunAxfHiiHandle);\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-#ifdef MDE_CPU_ARM\r
-  if (IsArmElf (ElfImage)) {\r
-    return EFI_SUCCESS;\r
-  }\r
-#elif defined(MDE_CPU_AARCH64)\r
-  if (IsAarch64Elf (ElfImage)) {\r
-    return EFI_SUCCESS;\r
-  }\r
-#endif\r
-\r
-  ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_RUNAXF_BAD_ARCH), gRunAxfHiiHandle);\r
-  return EFI_UNSUPPORTED;\r
-}\r
-\r
-\r
-/**\r
-  Load a ELF file.\r
-\r
-  @param[in] ElfImage       Address of the ELF file in memory.\r
-\r
-  @param[out] EntryPoint    Will be filled with the ELF entry point address.\r
-\r
-  @param[out] ImageSize     Will be filled with the ELF size in memory. This will\r
-                            effectively be equal to the sum of the segments sizes.\r
-\r
-  This functon assumes the header is valid and supported as checked with\r
-  ElfCheckFile().\r
-\r
-  @retval EFI_SUCCESS on success.\r
-  @retval EFI_INVALID_PARAMETER if the ELF file is invalid.\r
-**/\r
-EFI_STATUS\r
-ElfLoadFile (\r
-  IN  CONST VOID   *ElfImage,\r
-  OUT VOID        **EntryPoint,\r
-  OUT LIST_ENTRY   *LoadList\r
-  )\r
-{\r
-  EFI_STATUS    Status;\r
-  UINT8        *ProgramHdr;\r
-  UINTN         Index;\r
-  UINTN         ImageSize;\r
-\r
-#ifdef MDE_CPU_ARM\r
-  Elf32_Ehdr   *ElfHdr;\r
-  Elf32_Phdr   *ProgramHdrPtr;\r
-\r
-  ElfHdr = (Elf32_Ehdr*)ElfImage;\r
-#elif defined(MDE_CPU_AARCH64)\r
-  Elf64_Ehdr   *ElfHdr;\r
-  Elf64_Phdr   *ProgramHdrPtr;\r
-\r
-  ElfHdr = (Elf64_Ehdr*)ElfImage;\r
-#endif\r
-\r
-  ASSERT (ElfImage   != NULL);\r
-  ASSERT (EntryPoint != NULL);\r
-  ASSERT (LoadList   != NULL);\r
-\r
-  ProgramHdr = (UINT8*)ElfImage + ElfHdr->e_phoff;\r
-  DEBUG ((EFI_D_INFO, "ELF program header entry : 0x%lx\n", ProgramHdr));\r
-\r
-  ImageSize = 0;\r
-\r
-  // Load every loadable ELF segment into memory.\r
-  for (Index = 0; Index < ElfHdr->e_phnum; ++Index) {\r
-\r
-#ifdef MDE_CPU_ARM\r
-    ProgramHdrPtr = (Elf32_Phdr*)ProgramHdr;\r
-#elif defined(MDE_CPU_AARCH64)\r
-    ProgramHdrPtr = (Elf64_Phdr*)ProgramHdr;\r
-#endif\r
-\r
-    // Only consider PT_LOAD type segments, ignore others.\r
-    if (ProgramHdrPtr->p_type == PT_LOAD) {\r
-      Status = ElfLoadSegment (ElfImage, (VOID *)ProgramHdrPtr, LoadList);\r
-      if (EFI_ERROR (Status)) {\r
-        ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_RUNAXF_ELFFAILSEG), gRunAxfHiiHandle);\r
-        return EFI_INVALID_PARAMETER;\r
-      }\r
-      ImageSize += ProgramHdrPtr->p_memsz;\r
-    }\r
-    ProgramHdr += ElfHdr->e_phentsize;\r
-  }\r
-\r
-  if (ImageSize == 0) {\r
-    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_RUNAXF_ELFNOSEG), gRunAxfHiiHandle);\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-  // Return the entry point specified in the ELF header.\r
-  *EntryPoint = (void*)ElfHdr->e_entry;\r
-\r
-  return EFI_SUCCESS;\r
-}\r
diff --git a/ArmPlatformPkg/Library/ArmShellCmdRunAxf/ElfLoader.h b/ArmPlatformPkg/Library/ArmShellCmdRunAxf/ElfLoader.h
deleted file mode 100644 (file)
index 7020a6c..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/** @file\r
-*\r
-*  Copyright (c) 2014, ARM Limited. All rights reserved.\r
-*\r
-*  This program and the accompanying materials\r
-*  are licensed and made available under the terms and conditions of the BSD License\r
-*  which accompanies this distribution.  The full text of the license may be found at\r
-*  http://opensource.org/licenses/bsd-license.php\r
-*\r
-*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-*\r
-**/\r
-\r
-#ifndef ELF_LOADER_H\r
-#define ELF_LOADER_H\r
-\r
-/**\r
-  Check that the ELF File Header is valid and Machine type supported.\r
-\r
-  Not all information is checked in the ELF header, only the stuff that\r
-  matters to us in our simplified ELF loader.\r
-\r
-  @param[in] ElfImage  Address of the ELF file to check.\r
-\r
-  @retval EFI_SUCCESS on success.\r
-  @retval EFI_INVALID_PARAMETER if the header is invalid.\r
-  @retval EFI_UNSUPPORTED if the file type/platform is not supported.\r
-**/\r
-EFI_STATUS\r
-ElfCheckFile (\r
-  IN  CONST VOID *ElfImage\r
-  );\r
-\r
-\r
-/**\r
-  Load a ELF file.\r
-\r
-  @param[in]  ElfImage      Address of the ELF file in memory.\r
-\r
-  @param[out] EntryPoint    Will be filled with the ELF entry point address.\r
-\r
-  @param[out] ImageSize     Will be filled with the ELF size in memory. This will\r
-                            effectively be equal to the sum of the segments sizes.\r
-\r
-  This function assumes the header is valid and supported as checked with\r
-  ElfCheckFile().\r
-\r
-  NOTE:\r
-   - We don't currently take the segment permissions into account (indicated by\r
-     the program headers). It can be used to allocate pages with the right\r
-     read/write/exec permissions.\r
-\r
-  @retval EFI_SUCCESS on success.\r
-  @retval EFI_INVALID_PARAMETER if the ELF file is invalid.\r
-**/\r
-EFI_STATUS\r
-ElfLoadFile (\r
-  IN  CONST VOID   *ElfImage,\r
-  OUT VOID        **EntryPoint,\r
-  OUT LIST_ENTRY   *LoadList\r
-  );\r
-\r
-#endif // ELF_LOADER_H\r
diff --git a/ArmPlatformPkg/Library/ArmShellCmdRunAxf/RunAxf.c b/ArmPlatformPkg/Library/ArmShellCmdRunAxf/RunAxf.c
deleted file mode 100644 (file)
index 9f4fc78..0000000
+++ /dev/null
@@ -1,395 +0,0 @@
-/** @file\r
-*\r
-*  Shell command for launching AXF files.\r
-*\r
-*  Copyright (c) 2014, ARM Limited. All rights reserved.\r
-*\r
-*  This program and the accompanying materials\r
-*  are licensed and made available under the terms and conditions of the BSD License\r
-*  which accompanies this distribution.  The full text of the license may be found at\r
-*  http://opensource.org/licenses/bsd-license.php\r
-*\r
-*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-*\r
-**/\r
-\r
-#include <Guid/GlobalVariable.h>\r
-\r
-#include <Library/PrintLib.h>\r
-#include <Library/HandleParsingLib.h>\r
-#include <Library/DevicePathLib.h>\r
-#include <Library/BaseLib.h>\r
-#include <Library/BaseMemoryLib.h>\r
-#include <Library/MemoryAllocationLib.h>\r
-#include <Library/DebugLib.h>\r
-\r
-#include <Library/ArmLib.h>\r
-\r
-#include "ArmShellCmdRunAxf.h"\r
-#include "ElfLoader.h"\r
-#include "BootMonFsLoader.h"\r
-\r
-// Provide arguments to AXF?\r
-typedef VOID (*ELF_ENTRYPOINT)(UINTN arg0, UINTN arg1,\r
-                               UINTN arg2, UINTN arg3);\r
-\r
-STATIC\r
-EFI_STATUS\r
-ShutdownUefiBootServices (\r
-  VOID\r
-  )\r
-{\r
-  EFI_STATUS              Status;\r
-  UINTN                   MemoryMapSize;\r
-  EFI_MEMORY_DESCRIPTOR   *MemoryMap;\r
-  UINTN                   MapKey;\r
-  UINTN                   DescriptorSize;\r
-  UINT32                  DescriptorVersion;\r
-  UINTN                   Pages;\r
-\r
-  MemoryMap = NULL;\r
-  MemoryMapSize = 0;\r
-  Pages = 0;\r
-\r
-  do {\r
-    Status = gBS->GetMemoryMap (\r
-                    &MemoryMapSize,\r
-                    MemoryMap,\r
-                    &MapKey,\r
-                    &DescriptorSize,\r
-                    &DescriptorVersion\r
-                    );\r
-    if (Status == EFI_BUFFER_TOO_SMALL) {\r
-\r
-      Pages = EFI_SIZE_TO_PAGES (MemoryMapSize) + 1;\r
-      MemoryMap = AllocatePages (Pages);\r
-\r
-      //\r
-      // Get System MemoryMap\r
-      //\r
-      Status = gBS->GetMemoryMap (\r
-                      &MemoryMapSize,\r
-                      MemoryMap,\r
-                      &MapKey,\r
-                      &DescriptorSize,\r
-                      &DescriptorVersion\r
-                      );\r
-    }\r
-\r
-    // Don't do anything between the GetMemoryMap() and ExitBootServices()\r
-    if (!EFI_ERROR(Status)) {\r
-      Status = gBS->ExitBootServices (gImageHandle, MapKey);\r
-      if (EFI_ERROR(Status)) {\r
-        FreePages (MemoryMap, Pages);\r
-        MemoryMap = NULL;\r
-        MemoryMapSize = 0;\r
-      }\r
-    }\r
-  } while (EFI_ERROR(Status));\r
-\r
-  return Status;\r
-}\r
-\r
-\r
-STATIC\r
-EFI_STATUS\r
-PreparePlatformHardware (\r
-  VOID\r
-  )\r
-{\r
-  //Note: Interrupts will be disabled by the GIC driver when ExitBootServices() will be called.\r
-\r
-  // Clean before Disable else the Stack gets corrupted with old data.\r
-  ArmCleanDataCache ();\r
-  ArmDisableDataCache ();\r
-  // Invalidate all the entries that might have snuck in.\r
-  ArmInvalidateDataCache ();\r
-\r
-  // Disable and invalidate the instruction cache\r
-  ArmDisableInstructionCache ();\r
-  ArmInvalidateInstructionCache ();\r
-\r
-  // Turn off MMU\r
-  ArmDisableMmu();\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-// Process arguments to pass to AXF?\r
-STATIC CONST SHELL_PARAM_ITEM ParamList[] = {\r
-  {NULL, TypeMax}\r
-};\r
-\r
-\r
-/**\r
-  This is the shell command handler function pointer callback type. This\r
-  function handles the command when it is invoked in the shell.\r
-\r
-  @param[in] This             The instance of the\r
-                              EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL.\r
-  @param[in] SystemTable      The pointer to the system table.\r
-  @param[in] ShellParameters  The parameters associated with the command.\r
-  @param[in] Shell            The instance of the shell protocol used in the\r
-                              context of processing this command.\r
-\r
-  @return EFI_SUCCESS         The operation was successful.\r
-  @return other               The operation failed.\r
-**/\r
-SHELL_STATUS\r
-EFIAPI\r
-ShellDynCmdRunAxfHandler (\r
-  IN EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL    *This,\r
-  IN EFI_SYSTEM_TABLE                      *SystemTable,\r
-  IN EFI_SHELL_PARAMETERS_PROTOCOL         *ShellParameters,\r
-  IN EFI_SHELL_PROTOCOL                    *Shell\r
-  )\r
-{\r
-  LIST_ENTRY        *ParamPackage;\r
-  EFI_STATUS         Status;\r
-  SHELL_STATUS       ShellStatus;\r
-  SHELL_FILE_HANDLE  FileHandle;\r
-  ELF_ENTRYPOINT     StartElf;\r
-  CONST CHAR16      *FileName;\r
-  EFI_FILE_INFO     *Info;\r
-  UINTN              FileSize;\r
-  VOID              *FileData;\r
-  VOID              *Entrypoint;\r
-  LIST_ENTRY         LoadList;\r
-  LIST_ENTRY        *Node;\r
-  LIST_ENTRY        *NextNode;\r
-  RUNAXF_LOAD_LIST  *LoadNode;\r
-  CHAR16            *TmpFileName;\r
-  CHAR16            *TmpChar16;\r
-\r
-\r
-  ShellStatus = SHELL_SUCCESS;\r
-  FileHandle = NULL;\r
-  FileData = NULL;\r
-  InitializeListHead (&LoadList);\r
-\r
-  // Only install if they are not there yet? First time or every time?\r
-  // These can change if the shell exits and start again.\r
-  Status = gBS->InstallMultipleProtocolInterfaces (&gImageHandle,\r
-                &gEfiShellProtocolGuid, Shell,\r
-                &gEfiShellParametersProtocolGuid, ShellParameters,\r
-                NULL);\r
-\r
-  if (EFI_ERROR (Status)) {\r
-    return SHELL_DEVICE_ERROR;\r
-  }\r
-\r
-  // Update the protocols for the application library\r
-  Status = ShellInitialize ();\r
-  ASSERT_EFI_ERROR (Status);\r
-  // Add support to load AXF with optipnal args?\r
-\r
-  //\r
-  // Process Command Line arguments\r
-  //\r
-  Status = ShellCommandLineParse (ParamList, &ParamPackage, NULL, TRUE);\r
-  if (EFI_ERROR (Status)) {\r
-    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_RUNAXF_INVALID_ARG), gRunAxfHiiHandle);\r
-    ShellStatus = SHELL_INVALID_PARAMETER;\r
-  } else {\r
-    //\r
-    // Check for "-?"\r
-    //\r
-    if ((ShellCommandLineGetFlag (ParamPackage, L"-?")) ||\r
-        (ShellCommandLineGetRawValue (ParamPackage, 1) == NULL)) {\r
-      //\r
-      // We didn't get a file to load\r
-      //\r
-      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_RUNAXF_INVALID_ARG), gRunAxfHiiHandle);\r
-      ShellStatus = SHELL_INVALID_PARAMETER;\r
-    } else {\r
-      // For the moment we assume we only ever get one file to load with no arguments.\r
-      FileName = ShellCommandLineGetRawValue (ParamPackage, 1);\r
-      Status = ShellOpenFileByName (FileName, &FileHandle, EFI_FILE_MODE_READ, 0);\r
-      if (EFI_ERROR (Status)) {\r
-        // BootMonFS supports file extensions, but they are stripped by default\r
-        // when the NOR is programmed.\r
-        // Remove the file extension and try to open again.\r
-        ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_RUNAXF_FILE_NOT_FOUND),\r
-                         gRunAxfHiiHandle, FileName);\r
-        // Go through the filename and remove file extension. Preserve the\r
-        // original name.\r
-        TmpFileName = AllocateCopyPool (StrSize (FileName), (VOID *)FileName);\r
-        if (TmpFileName != NULL) {\r
-          TmpChar16 = StrStr (TmpFileName, L".");\r
-          if (TmpChar16 != NULL) {\r
-            *TmpChar16 = '\0';\r
-            DEBUG((EFI_D_ERROR, "Trying to open file: %s\n", TmpFileName));\r
-            Status = ShellOpenFileByName (TmpFileName, &FileHandle,\r
-                                          EFI_FILE_MODE_READ, 0);\r
-          }\r
-          FreePool (TmpFileName);\r
-        }\r
-        // Do we now have an open file after trying again?\r
-        if (EFI_ERROR (Status)) {\r
-          ShellStatus = SHELL_INVALID_PARAMETER;\r
-          FileHandle = NULL;\r
-        }\r
-      }\r
-\r
-      if (FileHandle != NULL) {\r
-        Info = ShellGetFileInfo (FileHandle);\r
-        FileSize = (UINTN) Info->FileSize;\r
-        FreePool (Info);\r
-\r
-        //\r
-        // Allocate buffer to read file. 'Runtime' so we can access it after\r
-        // ExitBootServices().\r
-        //\r
-        FileData = AllocateRuntimeZeroPool (FileSize);\r
-        if (FileData == NULL) {\r
-          ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_RUNAXF_NO_MEM), gRunAxfHiiHandle);\r
-          ShellStatus = SHELL_OUT_OF_RESOURCES;\r
-        } else {\r
-          //\r
-          // Read file into Buffer\r
-          //\r
-          Status = ShellReadFile (FileHandle, &FileSize, FileData);\r
-          if (EFI_ERROR (Status)) {\r
-            ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_RUNAXF_READ_FAIL), gRunAxfHiiHandle);\r
-            SHELL_FREE_NON_NULL (FileData);\r
-            FileData = NULL;\r
-            ShellStatus = SHELL_DEVICE_ERROR;\r
-          }\r
-        }\r
-      }\r
-    }\r
-\r
-    //\r
-    // Free the command line package\r
-    //\r
-    ShellCommandLineFreeVarList (ParamPackage);\r
-  }\r
-\r
-  // We have a file in memory. Try to work out if we can use it.\r
-  // It can either be in ELF format or BootMonFS format.\r
-  if (FileData != NULL) {\r
-    // Do some validation on the file before we try to load it. The file can\r
-    // either be an proper ELF file or one processed by the FlashLoader.\r
-    // Since the data might need to go to various locations in memory we cannot\r
-    // load the data directly while UEFI is running. We use the file loaders to\r
-    // populate a linked list of data and load addresses. This is processed and\r
-    // data copied to where it needs to go after calling ExitBootServices. At\r
-    // that stage we've reached the point of no return, so overwriting UEFI code\r
-    // does not make a difference.\r
-    Status = ElfCheckFile (FileData);\r
-    if (!EFI_ERROR (Status)) {\r
-      // Load program into memory\r
-      Status = ElfLoadFile ((VOID*)FileData, &Entrypoint, &LoadList);\r
-    } else {\r
-      // Try to see if it is a BootMonFs executable\r
-      Status = BootMonFsCheckFile ((EFI_FILE_HANDLE)FileHandle);\r
-      if (!EFI_ERROR (Status)) {\r
-        // Load program into memory\r
-        Status = BootMonFsLoadFile ((EFI_FILE_HANDLE)FileHandle,\r
-                                    (VOID*)FileData, &Entrypoint, &LoadList);\r
-      } else {\r
-        ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_RUNAXF_BAD_FILE),\r
-                         gRunAxfHiiHandle);\r
-        SHELL_FREE_NON_NULL (FileData);\r
-        ShellStatus = SHELL_UNSUPPORTED;\r
-      }\r
-    }\r
-  }\r
-\r
-  // Program load list created.\r
-  // Shutdown UEFI, copy and jump to code.\r
-  if (!IsListEmpty (&LoadList) && !EFI_ERROR (Status)) {\r
-    // Exit boot services here. This means we cannot return and cannot assume to\r
-    // have access to UEFI functions.\r
-    Status = ShutdownUefiBootServices ();\r
-    if (EFI_ERROR (Status)) {\r
-      DEBUG ((EFI_D_ERROR,"Can not shutdown UEFI boot services. Status=0x%X\n",\r
-              Status));\r
-    } else {\r
-      // Process linked list. Copy data to Memory.\r
-      Node = GetFirstNode (&LoadList);\r
-      while (!IsNull (&LoadList, Node)) {\r
-        LoadNode = (RUNAXF_LOAD_LIST *)Node;\r
-        // Do we have data to copy or do we need to set Zeroes (.bss)?\r
-        if (LoadNode->Zeroes) {\r
-          ZeroMem ((VOID*)LoadNode->MemOffset, LoadNode->Length);\r
-        } else {\r
-          CopyMem ((VOID *)LoadNode->MemOffset, (VOID *)LoadNode->FileOffset,\r
-                   LoadNode->Length);\r
-        }\r
-        Node = GetNextNode (&LoadList, Node);\r
-      }\r
-\r
-      //\r
-      // Switch off interrupts, caches, mmu, etc\r
-      //\r
-      Status = PreparePlatformHardware ();\r
-      ASSERT_EFI_ERROR (Status);\r
-\r
-      StartElf = (ELF_ENTRYPOINT)Entrypoint;\r
-      StartElf (0,0,0,0);\r
-\r
-      // We should never get here.. But if we do, spin..\r
-      ASSERT (FALSE);\r
-      while (1);\r
-    }\r
-  }\r
-\r
-  // Free file related information as we are returning to UEFI.\r
-  Node = GetFirstNode (&LoadList);\r
-  while (!IsNull (&LoadList, Node)) {\r
-    NextNode = RemoveEntryList (Node);\r
-    FreePool (Node);\r
-    Node = NextNode;\r
-  }\r
-  SHELL_FREE_NON_NULL (FileData);\r
-  if (FileHandle != NULL) {\r
-    ShellCloseFile (&FileHandle);\r
-  }\r
-\r
-  // Uninstall protocols as we don't know if they will change.\r
-  // If the shell exits and come in again these mappings may be different\r
-  // and cause a crash.\r
-  Status = gBS->UninstallMultipleProtocolInterfaces (gImageHandle,\r
-                &gEfiShellProtocolGuid, Shell,\r
-                &gEfiShellParametersProtocolGuid, ShellParameters,\r
-                NULL);\r
-\r
-  if (EFI_ERROR (Status) && ShellStatus == SHELL_SUCCESS) {\r
-    ShellStatus = SHELL_DEVICE_ERROR;\r
-  }\r
-\r
-  return ShellStatus;\r
-}\r
-\r
-\r
-/**\r
-  This is the command help handler function pointer callback type. This\r
-  function is responsible for displaying help information for the associated\r
-  command.\r
-\r
-  @param[in] This             The instance of the\r
-                              EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL.\r
-  @param[in] Language         The pointer to the language string to use.\r
-\r
-  @return string              Pool allocated help string, must be freed by\r
-                              caller.\r
-**/\r
-CHAR16*\r
-EFIAPI\r
-ShellDynCmdRunAxfGetHelp (\r
-  IN EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL    *This,\r
-  IN CONST CHAR8                           *Language\r
-  )\r
-{\r
-  CHAR16 *HelpText;\r
-\r
-  ASSERT (gRunAxfHiiHandle != NULL);\r
-\r
-  // This allocates memory. The caller is responsoible to free.\r
-  HelpText = HiiGetString (gRunAxfHiiHandle, STRING_TOKEN (STR_GET_HELP_RUNAXF),\r
-                           Language);\r
-\r
-  return HelpText;\r
-}\r
diff --git a/ArmPlatformPkg/Library/ArmShellCmdRunAxf/elf32.h b/ArmPlatformPkg/Library/ArmShellCmdRunAxf/elf32.h
deleted file mode 100644 (file)
index 3951444..0000000
+++ /dev/null
@@ -1,258 +0,0 @@
-/** @file\r
-Ported ELF include files from FreeBSD\r
-\r
-Copyright (c) 2009 - 2010, Apple Inc. All rights reserved.<BR>\r
-This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution.  The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-\r
-**/\r
-/*-\r
- * Copyright (c) 1996-1998 John D. Polstra.\r
- * All rights reserved.\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions\r
- * are met:\r
- * 1. Redistributions of source code must retain the above copyright\r
- *    notice, this list of conditions and the following disclaimer.\r
- * 2. Redistributions in binary form must reproduce the above copyright\r
- *    notice, this list of conditions and the following disclaimer in the\r
- *    documentation and/or other materials provided with the distribution.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\r
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\r
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
- * SUCH DAMAGE.\r
- *\r
- * $FreeBSD: src/sys/sys/elf32.h,v 1.8.14.2 2007/12/03 21:30:36 marius Exp $\r
- */\r
-\r
-#ifndef _SYS_ELF32_H_\r
-#define _SYS_ELF32_H_ 1\r
-\r
-\r
-/*\r
- * ELF definitions common to all 32-bit architectures.\r
- */\r
-\r
-typedef UINT32  Elf32_Addr;\r
-typedef UINT16  Elf32_Half;\r
-typedef UINT32  Elf32_Off;\r
-typedef INT32   Elf32_Sword;\r
-typedef UINT32  Elf32_Word;\r
-typedef UINT64  Elf32_Lword;\r
-\r
-typedef Elf32_Word      Elf32_Hashelt;\r
-\r
-/* Non-standard class-dependent datatype used for abstraction. */\r
-typedef Elf32_Word      Elf32_Size;\r
-typedef Elf32_Sword     Elf32_Ssize;\r
-\r
-/*\r
- * ELF header.\r
- */\r
-\r
-typedef struct {\r
-  unsigned char   e_ident[EI_NIDENT]; /* File identification. */\r
-  Elf32_Half      e_type;             /* File type. */\r
-  Elf32_Half      e_machine;          /* Machine architecture. */\r
-  Elf32_Word      e_version;          /* ELF format version. */\r
-  Elf32_Addr      e_entry;            /* Entry point. */\r
-  Elf32_Off       e_phoff;            /* Program header file offset. */\r
-  Elf32_Off       e_shoff;            /* Section header file offset. */\r
-  Elf32_Word      e_flags;            /* Architecture-specific flags. */\r
-  Elf32_Half      e_ehsize;           /* Size of ELF header in bytes. */\r
-  Elf32_Half      e_phentsize;        /* Size of program header entry. */\r
-  Elf32_Half      e_phnum;            /* Number of program header entries. */\r
-  Elf32_Half      e_shentsize;        /* Size of section header entry. */\r
-  Elf32_Half      e_shnum;            /* Number of section header entries. */\r
-  Elf32_Half      e_shstrndx;         /* Section name strings section. */\r
-} Elf32_Ehdr;\r
-\r
-/*\r
- * Section header.\r
- */\r
-\r
-typedef struct {\r
-  Elf32_Word      sh_name;        /* Section name (index into the\r
-                                     section header string table). */\r
-  Elf32_Word      sh_type;        /* Section type. */\r
-  Elf32_Word      sh_flags;       /* Section flags. */\r
-  Elf32_Addr      sh_addr;        /* Address in memory image. */\r
-  Elf32_Off       sh_offset;      /* Offset in file. */\r
-  Elf32_Word      sh_size;        /* Size in bytes. */\r
-  Elf32_Word      sh_link;        /* Index of a related section. */\r
-  Elf32_Word      sh_info;        /* Depends on section type. */\r
-  Elf32_Word      sh_addralign;   /* Alignment in bytes. */\r
-  Elf32_Word      sh_entsize;     /* Size of each entry in section. */\r
-} Elf32_Shdr;\r
-\r
-/*\r
- * Program header.\r
- */\r
-\r
-typedef struct {\r
-  Elf32_Word      p_type;         /* Entry type. */\r
-  Elf32_Off       p_offset;       /* File offset of contents. */\r
-  Elf32_Addr      p_vaddr;        /* Virtual address in memory image. */\r
-  Elf32_Addr      p_paddr;        /* Physical address (not used). */\r
-  Elf32_Word      p_filesz;       /* Size of contents in file. */\r
-  Elf32_Word      p_memsz;        /* Size of contents in memory. */\r
-  Elf32_Word      p_flags;        /* Access permission flags. */\r
-  Elf32_Word      p_align;        /* Alignment in memory and file. */\r
-} Elf32_Phdr;\r
-\r
-/*\r
- * Dynamic structure.  The ".dynamic" section contains an array of them.\r
- */\r
-\r
-typedef struct {\r
-  Elf32_Sword     d_tag;          /* Entry type. */\r
-  union {\r
-    Elf32_Word      d_val;  /* Integer value. */\r
-    Elf32_Addr      d_ptr;  /* Address value. */\r
-  } d_un;\r
-} Elf32_Dyn;\r
-\r
-/*\r
- * Relocation entries.\r
- */\r
-\r
-/* Relocations that don't need an addend field. */\r
-typedef struct {\r
-  Elf32_Addr      r_offset;       /* Location to be relocated. */\r
-  Elf32_Word      r_info;         /* Relocation type and symbol index. */\r
-} Elf32_Rel;\r
-\r
-/* Relocations that need an addend field. */\r
-typedef struct {\r
-  Elf32_Addr      r_offset;       /* Location to be relocated. */\r
-  Elf32_Word      r_info;         /* Relocation type and symbol index. */\r
-  Elf32_Sword     r_addend;       /* Addend. */\r
-} Elf32_Rela;\r
-\r
-/* Macros for accessing the fields of r_info. */\r
-#define ELF32_R_SYM(info)       ((info) >> 8)\r
-#define ELF32_R_TYPE(info)      ((unsigned char)(info))\r
-\r
-/* Macro for constructing r_info from field values. */\r
-#define ELF32_R_INFO(sym, type) (((sym) << 8) + (unsigned char)(type))\r
-\r
-/*\r
- *      Note entry header\r
- */\r
-typedef Elf_Note Elf32_Nhdr;\r
-\r
-/*\r
- *      Move entry\r
- */\r
-typedef struct {\r
-  Elf32_Lword     m_value;        /* symbol value */\r
-  Elf32_Word      m_info;         /* size + index */\r
-  Elf32_Word      m_poffset;      /* symbol offset */\r
-  Elf32_Half      m_repeat;       /* repeat count */\r
-  Elf32_Half      m_stride;       /* stride info */\r
-} Elf32_Move;\r
-\r
-/*\r
- *      The macros compose and decompose values for Move.r_info\r
- *\r
- *      sym = ELF32_M_SYM(M.m_info)\r
- *      size = ELF32_M_SIZE(M.m_info)\r
- *      M.m_info = ELF32_M_INFO(sym, size)\r
- */\r
-#define ELF32_M_SYM(info)       ((info)>>8)\r
-#define ELF32_M_SIZE(info)      ((unsigned char)(info))\r
-#define ELF32_M_INFO(sym, size) (((sym)<<8)+(unsigned char)(size))\r
-\r
-/*\r
- *      Hardware/Software capabilities entry\r
- */\r
-typedef struct {\r
-  Elf32_Word      c_tag;          /* how to interpret value */\r
-  union {\r
-    Elf32_Word      c_val;\r
-    Elf32_Addr      c_ptr;\r
-  } c_un;\r
-} Elf32_Cap;\r
-\r
-/*\r
- * Symbol table entries.\r
- */\r
-\r
-typedef struct {\r
-  Elf32_Word      st_name;        /* String table index of name. */\r
-  Elf32_Addr      st_value;       /* Symbol value. */\r
-  Elf32_Word      st_size;        /* Size of associated object. */\r
-  unsigned char   st_info;        /* Type and binding information. */\r
-  unsigned char   st_other;       /* Reserved (not used). */\r
-  Elf32_Half      st_shndx;       /* Section index of symbol. */\r
-} Elf32_Sym;\r
-\r
-/* Macros for accessing the fields of st_info. */\r
-#define ELF32_ST_BIND(info)             ((info) >> 4)\r
-#define ELF32_ST_TYPE(info)             ((info) & 0xf)\r
-\r
-/* Macro for constructing st_info from field values. */\r
-#define ELF32_ST_INFO(bind, type)       (((bind) << 4) + ((type) & 0xf))\r
-\r
-/* Macro for accessing the fields of st_other. */\r
-#define ELF32_ST_VISIBILITY(oth)        ((oth) & 0x3)\r
-\r
-/* Structures used by Sun & GNU symbol versioning. */\r
-typedef struct\r
-{\r
-  Elf32_Half      vd_version;\r
-  Elf32_Half      vd_flags;\r
-  Elf32_Half      vd_ndx;\r
-  Elf32_Half      vd_cnt;\r
-  Elf32_Word      vd_hash;\r
-  Elf32_Word      vd_aux;\r
-  Elf32_Word      vd_next;\r
-} Elf32_Verdef;\r
-\r
-typedef struct\r
-{\r
-  Elf32_Word      vda_name;\r
-  Elf32_Word      vda_next;\r
-} Elf32_Verdaux;\r
-\r
-typedef struct\r
-{\r
-  Elf32_Half      vn_version;\r
-  Elf32_Half      vn_cnt;\r
-  Elf32_Word      vn_file;\r
-  Elf32_Word      vn_aux;\r
-  Elf32_Word      vn_next;\r
-} Elf32_Verneed;\r
-\r
-typedef struct\r
-{\r
-  Elf32_Word      vna_hash;\r
-  Elf32_Half      vna_flags;\r
-  Elf32_Half      vna_other;\r
-  Elf32_Word      vna_name;\r
-  Elf32_Word      vna_next;\r
-} Elf32_Vernaux;\r
-\r
-typedef Elf32_Half Elf32_Versym;\r
-\r
-typedef struct {\r
-  Elf32_Half      si_boundto;     /* direct bindings - symbol bound to */\r
-  Elf32_Half      si_flags;       /* per symbol flags */\r
-} Elf32_Syminfo;\r
-\r
-#endif /* !_SYS_ELF32_H_ */\r
diff --git a/ArmPlatformPkg/Library/ArmShellCmdRunAxf/elf64.h b/ArmPlatformPkg/Library/ArmShellCmdRunAxf/elf64.h
deleted file mode 100644 (file)
index 1cfe0c9..0000000
+++ /dev/null
@@ -1,260 +0,0 @@
-/** @file\r
-Ported ELF include files from FreeBSD\r
-\r
-Copyright (c) 2009 - 2010, Apple Inc. All rights reserved.<BR>\r
-This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution.  The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-**/\r
-/*-\r
- * Copyright (c) 1996-1998 John D. Polstra.\r
- * All rights reserved.\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions\r
- * are met:\r
- * 1. Redistributions of source code must retain the above copyright\r
- *    notice, this list of conditions and the following disclaimer.\r
- * 2. Redistributions in binary form must reproduce the above copyright\r
- *    notice, this list of conditions and the following disclaimer in the\r
- *    documentation and/or other materials provided with the distribution.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\r
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\r
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
- * SUCH DAMAGE.\r
- *\r
- * $FreeBSD: src/sys/sys/elf64.h,v 1.10.14.2 2007/12/03 21:30:36 marius Exp $\r
- */\r
-\r
-#ifndef _SYS_ELF64_H_\r
-#define _SYS_ELF64_H_ 1\r
-\r
-\r
-/*\r
- * ELF definitions common to all 64-bit architectures.\r
- */\r
-\r
-typedef UINT64  Elf64_Addr;\r
-typedef UINT16  Elf64_Half;\r
-typedef UINT64  Elf64_Off;\r
-typedef INT32   Elf64_Sword;\r
-typedef INT64   Elf64_Sxword;\r
-typedef UINT32  Elf64_Word;\r
-typedef UINT64  Elf64_Lword;\r
-typedef UINT64  Elf64_Xword;\r
-\r
-/*\r
- * Types of dynamic symbol hash table bucket and chain elements.\r
- *\r
- * This is inconsistent among 64 bit architectures, so a machine dependent\r
- * typedef is required.\r
- */\r
-\r
-typedef Elf64_Word      Elf64_Hashelt;\r
-\r
-/* Non-standard class-dependent datatype used for abstraction. */\r
-typedef Elf64_Xword     Elf64_Size;\r
-typedef Elf64_Sxword    Elf64_Ssize;\r
-\r
-/*\r
- * ELF header.\r
- */\r
-\r
-typedef struct {\r
-  unsigned char   e_ident[EI_NIDENT]; /* File identification. */\r
-  Elf64_Half      e_type;             /* File type. */\r
-  Elf64_Half      e_machine;          /* Machine architecture. */\r
-  Elf64_Word      e_version;          /* ELF format version. */\r
-  Elf64_Addr      e_entry;            /* Entry point. */\r
-  Elf64_Off       e_phoff;            /* Program header file offset. */\r
-  Elf64_Off       e_shoff;            /* Section header file offset. */\r
-  Elf64_Word      e_flags;            /* Architecture-specific flags. */\r
-  Elf64_Half      e_ehsize;           /* Size of ELF header in bytes. */\r
-  Elf64_Half      e_phentsize;        /* Size of program header entry. */\r
-  Elf64_Half      e_phnum;            /* Number of program header entries. */\r
-  Elf64_Half      e_shentsize;        /* Size of section header entry. */\r
-  Elf64_Half      e_shnum;            /* Number of section header entries. */\r
-  Elf64_Half      e_shstrndx;         /* Section name strings section. */\r
-} Elf64_Ehdr;\r
-\r
-/*\r
- * Section header.\r
- */\r
-\r
-typedef struct {\r
-  Elf64_Word      sh_name;        /* Section name (index into the\r
-                                     section header string table). */\r
-  Elf64_Word      sh_type;        /* Section type. */\r
-  Elf64_Xword     sh_flags;       /* Section flags. */\r
-  Elf64_Addr      sh_addr;        /* Address in memory image. */\r
-  Elf64_Off       sh_offset;      /* Offset in file. */\r
-  Elf64_Xword     sh_size;        /* Size in bytes. */\r
-  Elf64_Word      sh_link;        /* Index of a related section. */\r
-  Elf64_Word      sh_info;        /* Depends on section type. */\r
-  Elf64_Xword     sh_addralign;   /* Alignment in bytes. */\r
-  Elf64_Xword     sh_entsize;     /* Size of each entry in section. */\r
-} Elf64_Shdr;\r
-\r
-/*\r
- * Program header.\r
- */\r
-\r
-typedef struct {\r
-  Elf64_Word      p_type;         /* Entry type. */\r
-  Elf64_Word      p_flags;        /* Access permission flags. */\r
-  Elf64_Off       p_offset;       /* File offset of contents. */\r
-  Elf64_Addr      p_vaddr;        /* Virtual address in memory image. */\r
-  Elf64_Addr      p_paddr;        /* Physical address (not used). */\r
-  Elf64_Xword     p_filesz;       /* Size of contents in file. */\r
-  Elf64_Xword     p_memsz;        /* Size of contents in memory. */\r
-  Elf64_Xword     p_align;        /* Alignment in memory and file. */\r
-} Elf64_Phdr;\r
-\r
-/*\r
- * Dynamic structure.  The ".dynamic" section contains an array of them.\r
- */\r
-\r
-typedef struct {\r
-  Elf64_Sxword    d_tag;          /* Entry type. */\r
-  union {\r
-    Elf64_Xword     d_val;  /* Integer value. */\r
-    Elf64_Addr      d_ptr;  /* Address value. */\r
-  } d_un;\r
-} Elf64_Dyn;\r
-\r
-/*\r
- * Relocation entries.\r
- */\r
-\r
-/* Relocations that don't need an addend field. */\r
-typedef struct {\r
-  Elf64_Addr      r_offset;       /* Location to be relocated. */\r
-  Elf64_Xword     r_info;         /* Relocation type and symbol index. */\r
-} Elf64_Rel;\r
-\r
-/* Relocations that need an addend field. */\r
-typedef struct {\r
-  Elf64_Addr      r_offset;       /* Location to be relocated. */\r
-  Elf64_Xword     r_info;         /* Relocation type and symbol index. */\r
-  Elf64_Sxword    r_addend;       /* Addend. */\r
-} Elf64_Rela;\r
-\r
-/* Macros for accessing the fields of r_info. */\r
-#define ELF64_R_SYM(info)       ((info) >> 32)\r
-#define ELF64_R_TYPE(info)      ((info) & 0xffffffffL)\r
-\r
-/* Macro for constructing r_info from field values. */\r
-#define ELF64_R_INFO(sym, type) (((sym) << 32) + ((type) & 0xffffffffL))\r
-\r
-#define ELF64_R_TYPE_DATA(info) (((Elf64_Xword)(info)<<32)>>40)\r
-#define ELF64_R_TYPE_ID(info)   (((Elf64_Xword)(info)<<56)>>56)\r
-#define ELF64_R_TYPE_INFO(data, type)   \\r
-                (((Elf64_Xword)(data)<<8)+(Elf64_Xword)(type))\r
-\r
-/*\r
- *      Note entry header\r
- */\r
-typedef Elf_Note Elf64_Nhdr;\r
-\r
-/*\r
- *      Move entry\r
- */\r
-typedef struct {\r
-  Elf64_Lword     m_value;        /* symbol value */\r
-  Elf64_Xword     m_info;         /* size + index */\r
-  Elf64_Xword     m_poffset;      /* symbol offset */\r
-  Elf64_Half      m_repeat;       /* repeat count */\r
-  Elf64_Half      m_stride;       /* stride info */\r
-} Elf64_Move;\r
-\r
-#define ELF64_M_SYM(info)       ((info)>>8)\r
-#define ELF64_M_SIZE(info)      ((unsigned char)(info))\r
-#define ELF64_M_INFO(sym, size) (((sym)<<8)+(unsigned char)(size))\r
-\r
-/*\r
- *      Hardware/Software capabilities entry\r
- */\r
-typedef struct {\r
-  Elf64_Xword     c_tag;          /* how to interpret value */\r
-  union {\r
-    Elf64_Xword     c_val;\r
-    Elf64_Addr      c_ptr;\r
-  } c_un;\r
-} Elf64_Cap;\r
-\r
-/*\r
- * Symbol table entries.\r
- */\r
-\r
-typedef struct {\r
-  Elf64_Word      st_name;        /* String table index of name. */\r
-  unsigned char   st_info;        /* Type and binding information. */\r
-  unsigned char   st_other;       /* Reserved (not used). */\r
-  Elf64_Half      st_shndx;       /* Section index of symbol. */\r
-  Elf64_Addr      st_value;       /* Symbol value. */\r
-  Elf64_Xword     st_size;        /* Size of associated object. */\r
-} Elf64_Sym;\r
-\r
-/* Macros for accessing the fields of st_info. */\r
-#define ELF64_ST_BIND(info)             ((info) >> 4)\r
-#define ELF64_ST_TYPE(info)             ((info) & 0xf)\r
-\r
-/* Macro for constructing st_info from field values. */\r
-#define ELF64_ST_INFO(bind, type)       (((bind) << 4) + ((type) & 0xf))\r
-\r
-/* Macro for accessing the fields of st_other. */\r
-#define ELF64_ST_VISIBILITY(oth)        ((oth) & 0x3)\r
-\r
-/* Structures used by Sun & GNU-style symbol versioning. */\r
-typedef struct {\r
-  Elf64_Half      vd_version;\r
-  Elf64_Half      vd_flags;\r
-  Elf64_Half      vd_ndx;\r
-  Elf64_Half      vd_cnt;\r
-  Elf64_Word      vd_hash;\r
-  Elf64_Word      vd_aux;\r
-  Elf64_Word      vd_next;\r
-} Elf64_Verdef;\r
-\r
-typedef struct {\r
-  Elf64_Word      vda_name;\r
-  Elf64_Word      vda_next;\r
-} Elf64_Verdaux;\r
-\r
-typedef struct {\r
-  Elf64_Half      vn_version;\r
-  Elf64_Half      vn_cnt;\r
-  Elf64_Word      vn_file;\r
-  Elf64_Word      vn_aux;\r
-  Elf64_Word      vn_next;\r
-} Elf64_Verneed;\r
-\r
-typedef struct {\r
-  Elf64_Word      vna_hash;\r
-  Elf64_Half      vna_flags;\r
-  Elf64_Half      vna_other;\r
-  Elf64_Word      vna_name;\r
-  Elf64_Word      vna_next;\r
-} Elf64_Vernaux;\r
-\r
-typedef Elf64_Half Elf64_Versym;\r
-\r
-typedef struct {\r
-  Elf64_Half      si_boundto;     /* direct bindings - symbol bound to */\r
-  Elf64_Half      si_flags;       /* per symbol flags */\r
-} Elf64_Syminfo;\r
-\r
-#endif /* !_SYS_ELF64_H_ */\r
diff --git a/ArmPlatformPkg/Library/ArmShellCmdRunAxf/elf_common.h b/ArmPlatformPkg/Library/ArmShellCmdRunAxf/elf_common.h
deleted file mode 100644 (file)
index ed3cedc..0000000
+++ /dev/null
@@ -1,1059 +0,0 @@
-/** @file\r
-Ported ELF include files from FreeBSD\r
-\r
-Copyright (c) 2009 - 2010, Apple Inc. All rights reserved.<BR>\r
-Portions Copyright (c) 2011 - 2013, ARM Ltd. All rights reserved.<BR>\r
-This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution.  The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-\r
-**/\r
-/*-\r
- * Copyright (c) 1998 John D. Polstra.\r
- * All rights reserved.\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions\r
- * are met:\r
- * 1. Redistributions of source code must retain the above copyright\r
- *    notice, this list of conditions and the following disclaimer.\r
- * 2. Redistributions in binary form must reproduce the above copyright\r
- *    notice, this list of conditions and the following disclaimer in the\r
- *    documentation and/or other materials provided with the distribution.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\r
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\r
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
- * SUCH DAMAGE.\r
- *\r
- * $FreeBSD: src/sys/sys/elf_common.h,v 1.15.8.2 2007/12/03 21:30:36 marius Exp $\r
- */\r
-\r
-#ifndef _SYS_ELF_COMMON_H_\r
-#define _SYS_ELF_COMMON_H_ 1\r
-\r
-/*\r
- * ELF definitions that are independent of architecture or word size.\r
- */\r
-\r
-/*\r
- * Note header.  The ".note" section contains an array of notes.  Each\r
- * begins with this header, aligned to a word boundary.  Immediately\r
- * following the note header is n_namesz bytes of name, padded to the\r
- * next word boundary.  Then comes n_descsz bytes of descriptor, again\r
- * padded to a word boundary.  The values of n_namesz and n_descsz do\r
- * not include the padding.\r
- */\r
-\r
-typedef struct {\r
-        UINT32  n_namesz;       /* Length of name. */\r
-        UINT32  n_descsz;       /* Length of descriptor. */\r
-        UINT32  n_type;         /* Type of this note. */\r
-} Elf_Note;\r
-\r
-/* Indexes into the e_ident array.  Keep synced with\r
-   http://www.sco.com/developers/gabi/latest/ch4.eheader.html */\r
-#define EI_MAG0         0       /* Magic number, byte 0. */\r
-#define EI_MAG1         1       /* Magic number, byte 1. */\r
-#define EI_MAG2         2       /* Magic number, byte 2. */\r
-#define EI_MAG3         3       /* Magic number, byte 3. */\r
-#define EI_CLASS        4       /* Class of machine. */\r
-#define EI_DATA         5       /* Data format. */\r
-#define EI_VERSION      6       /* ELF format version. */\r
-#define EI_OSABI        7       /* Operating system / ABI identification */\r
-#define EI_ABIVERSION   8       /* ABI version */\r
-#define OLD_EI_BRAND    8       /* Start of architecture identification. */\r
-#define EI_PAD          9       /* Start of padding (per SVR4 ABI). */\r
-#define EI_NIDENT       16      /* Size of e_ident array. */\r
-\r
-/* Values for the magic number bytes. */\r
-#define ELFMAG0         0x7f\r
-#define ELFMAG1         'E'\r
-#define ELFMAG2         'L'\r
-#define ELFMAG3         'F'\r
-#define ELFMAG          "\177ELF"       /* magic string */\r
-#define SELFMAG         4               /* magic string size */\r
-\r
-/* Values for e_ident[EI_VERSION] and e_version. */\r
-#define EV_NONE         0\r
-#define EV_CURRENT      1\r
-\r
-/* Values for e_ident[EI_CLASS]. */\r
-#define ELFCLASSNONE    0       /* Unknown class. */\r
-#define ELFCLASS32      1       /* 32-bit architecture. */\r
-#define ELFCLASS64      2       /* 64-bit architecture. */\r
-\r
-/* Values for e_ident[EI_DATA]. */\r
-#define ELFDATANONE     0       /* Unknown data format. */\r
-#define ELFDATA2LSB     1       /* 2's complement little-endian. */\r
-#define ELFDATA2MSB     2       /* 2's complement big-endian. */\r
-\r
-/* Values for e_ident[EI_OSABI]. */\r
-#define ELFOSABI_NONE           0       /* UNIX System V ABI */\r
-#define ELFOSABI_HPUX           1       /* HP-UX operating system */\r
-#define ELFOSABI_NETBSD         2       /* NetBSD */\r
-#define ELFOSABI_LINUX          3       /* GNU/Linux */\r
-#define ELFOSABI_HURD           4       /* GNU/Hurd */\r
-#define ELFOSABI_86OPEN         5       /* 86Open common IA32 ABI */\r
-#define ELFOSABI_SOLARIS        6       /* Solaris */\r
-#define ELFOSABI_AIX            7       /* AIX */\r
-#define ELFOSABI_IRIX           8       /* IRIX */\r
-#define ELFOSABI_FREEBSD        9       /* FreeBSD */\r
-#define ELFOSABI_TRU64          10      /* TRU64 UNIX */\r
-#define ELFOSABI_MODESTO        11      /* Novell Modesto */\r
-#define ELFOSABI_OPENBSD        12      /* OpenBSD */\r
-#define ELFOSABI_OPENVMS        13      /* Open VMS */\r
-#define ELFOSABI_NSK            14      /* HP Non-Stop Kernel */\r
-#define ELFOSABI_ARM            97      /* ARM */\r
-#define ELFOSABI_STANDALONE     255     /* Standalone (embedded) application */\r
-\r
-#define ELFOSABI_SYSV           ELFOSABI_NONE   /* symbol used in old spec */\r
-#define ELFOSABI_MONTEREY       ELFOSABI_AIX    /* Monterey */\r
-\r
-/* e_ident */\r
-#define IS_ELF(ehdr)    ((ehdr).e_ident[EI_MAG0] == ELFMAG0 && \\r
-                         (ehdr).e_ident[EI_MAG1] == ELFMAG1 && \\r
-                         (ehdr).e_ident[EI_MAG2] == ELFMAG2 && \\r
-                         (ehdr).e_ident[EI_MAG3] == ELFMAG3)\r
-\r
-/* Values for e_type. */\r
-#define ET_NONE         0       /* Unknown type. */\r
-#define ET_REL          1       /* Relocatable. */\r
-#define ET_EXEC         2       /* Executable. */\r
-#define ET_DYN          3       /* Shared object. */\r
-#define ET_CORE         4       /* Core file. */\r
-#define ET_LOOS         0xfe00  /* First operating system specific. */\r
-#define ET_HIOS         0xfeff  /* Last operating system-specific. */\r
-#define ET_LOPROC       0xff00  /* First processor-specific. */\r
-#define ET_HIPROC       0xffff  /* Last processor-specific. */\r
-\r
-/* Values for e_machine. */\r
-#define EM_NONE         0       /* Unknown machine. */\r
-#define EM_M32          1       /* AT&T WE32100. */\r
-#define EM_SPARC        2       /* Sun SPARC. */\r
-#define EM_386          3       /* Intel i386. */\r
-#define EM_68K          4       /* Motorola 68000. */\r
-#define EM_88K          5       /* Motorola 88000. */\r
-#define EM_860          7       /* Intel i860. */\r
-#define EM_MIPS         8       /* MIPS R3000 Big-Endian only. */\r
-#define EM_S370         9       /* IBM System/370. */\r
-#define EM_MIPS_RS3_LE  10      /* MIPS R3000 Little-Endian. */\r
-#define EM_PARISC       15      /* HP PA-RISC. */\r
-#define EM_VPP500       17      /* Fujitsu VPP500. */\r
-#define EM_SPARC32PLUS  18      /* SPARC v8plus. */\r
-#define EM_960          19      /* Intel 80960. */\r
-#define EM_PPC          20      /* PowerPC 32-bit. */\r
-#define EM_PPC64        21      /* PowerPC 64-bit. */\r
-#define EM_S390         22      /* IBM System/390. */\r
-#define EM_V800         36      /* NEC V800. */\r
-#define EM_FR20         37      /* Fujitsu FR20. */\r
-#define EM_RH32         38      /* TRW RH-32. */\r
-#define EM_RCE          39      /* Motorola RCE. */\r
-#define EM_ARM          40      /* ARM. */\r
-#define EM_SH           42      /* Hitachi SH. */\r
-#define EM_SPARCV9      43      /* SPARC v9 64-bit. */\r
-#define EM_TRICORE      44      /* Siemens TriCore embedded processor. */\r
-#define EM_ARC          45      /* Argonaut RISC Core. */\r
-#define EM_H8_300       46      /* Hitachi H8/300. */\r
-#define EM_H8_300H      47      /* Hitachi H8/300H. */\r
-#define EM_H8S          48      /* Hitachi H8S. */\r
-#define EM_H8_500       49      /* Hitachi H8/500. */\r
-#define EM_IA_64        50      /* Intel IA-64 Processor. */\r
-#define EM_MIPS_X       51      /* Stanford MIPS-X. */\r
-#define EM_COLDFIRE     52      /* Motorola ColdFire. */\r
-#define EM_68HC12       53      /* Motorola M68HC12. */\r
-#define EM_MMA          54      /* Fujitsu MMA. */\r
-#define EM_PCP          55      /* Siemens PCP. */\r
-#define EM_NCPU         56      /* Sony nCPU. */\r
-#define EM_NDR1         57      /* Denso NDR1 microprocessor. */\r
-#define EM_STARCORE     58      /* Motorola Star*Core processor. */\r
-#define EM_ME16         59      /* Toyota ME16 processor. */\r
-#define EM_ST100        60      /* STMicroelectronics ST100 processor. */\r
-#define EM_TINYJ        61      /* Advanced Logic Corp. TinyJ processor. */\r
-#define EM_X86_64       62      /* Advanced Micro Devices x86-64 */\r
-#define EM_AMD64        EM_X86_64 /* Advanced Micro Devices x86-64 (compat) */\r
-#define EM_AARCH64      183     /* ARM 64bit Architecture */\r
-\r
-/* Non-standard or deprecated. */\r
-#define EM_486          6       /* Intel i486. */\r
-#define EM_MIPS_RS4_BE  10      /* MIPS R4000 Big-Endian */\r
-#define EM_ALPHA_STD    41      /* Digital Alpha (standard value). */\r
-#define EM_ALPHA        0x9026  /* Alpha (written in the absence of an ABI) */\r
-\r
-/* Special section indexes. */\r
-#define SHN_UNDEF            0          /* Undefined, missing, irrelevant. */\r
-#define SHN_LORESERVE   0xff00          /* First of reserved range. */\r
-#define SHN_LOPROC      0xff00          /* First processor-specific. */\r
-#define SHN_HIPROC      0xff1f          /* Last processor-specific. */\r
-#define SHN_LOOS        0xff20          /* First operating system-specific. */\r
-#define SHN_HIOS        0xff3f          /* Last operating system-specific. */\r
-#define SHN_ABS         0xfff1          /* Absolute values. */\r
-#define SHN_COMMON      0xfff2          /* Common data. */\r
-#define SHN_XINDEX      0xffff          /* Escape -- index stored elsewhere. */\r
-#define SHN_HIRESERVE   0xffff          /* Last of reserved range. */\r
-\r
-/* sh_type */\r
-#define SHT_NULL                0       /* inactive */\r
-#define SHT_PROGBITS            1       /* program defined information */\r
-#define SHT_SYMTAB              2       /* symbol table section */\r
-#define SHT_STRTAB              3       /* string table section */\r
-#define SHT_RELA                4       /* relocation section with addends */\r
-#define SHT_HASH                5       /* symbol hash table section */\r
-#define SHT_DYNAMIC             6       /* dynamic section */\r
-#define SHT_NOTE                7       /* note section */\r
-#define SHT_NOBITS              8       /* no space section */\r
-#define SHT_REL                 9       /* relocation section - no addends */\r
-#define SHT_SHLIB               10      /* reserved - purpose unknown */\r
-#define SHT_DYNSYM              11      /* dynamic symbol table section */\r
-#define SHT_INIT_ARRAY          14      /* Initialization function pointers. */\r
-#define SHT_FINI_ARRAY          15      /* Termination function pointers. */\r
-#define SHT_PREINIT_ARRAY       16      /* Pre-initialization function ptrs. */\r
-#define SHT_GROUP               17      /* Section group. */\r
-#define SHT_SYMTAB_SHNDX        18      /* Section indexes (see SHN_XINDEX). */\r
-#define SHT_LOOS                0x60000000      /* First of OS specific semantics */\r
-#define SHT_LOSUNW              0x6ffffff4\r
-#define SHT_SUNW_dof            0x6ffffff4\r
-#define SHT_SUNW_cap            0x6ffffff5\r
-#define SHT_SUNW_SIGNATURE      0x6ffffff6\r
-#define SHT_SUNW_ANNOTATE       0x6ffffff7\r
-#define SHT_SUNW_DEBUGSTR       0x6ffffff8\r
-#define SHT_SUNW_DEBUG          0x6ffffff9\r
-#define SHT_SUNW_move           0x6ffffffa\r
-#define SHT_SUNW_COMDAT         0x6ffffffb\r
-#define SHT_SUNW_syminfo        0x6ffffffc\r
-#define SHT_SUNW_verdef         0x6ffffffd\r
-#define SHT_GNU_verdef          0x6ffffffd      /* Symbol versions provided */\r
-#define SHT_SUNW_verneed        0x6ffffffe\r
-#define SHT_GNU_verneed         0x6ffffffe      /* Symbol versions required */\r
-#define SHT_SUNW_versym         0x6fffffff\r
-#define SHT_GNU_versym          0x6fffffff      /* Symbol version table */\r
-#define SHT_HISUNW              0x6fffffff\r
-#define SHT_HIOS                0x6fffffff      /* Last of OS specific semantics */\r
-#define SHT_LOPROC              0x70000000      /* reserved range for processor */\r
-#define SHT_AMD64_UNWIND        0x70000001      /* unwind information */\r
-#define SHT_HIPROC              0x7fffffff      /* specific section header types */\r
-#define SHT_LOUSER              0x80000000      /* reserved range for application */\r
-#define SHT_HIUSER              0xffffffff      /* specific indexes */\r
-\r
-/* Flags for sh_flags. */\r
-#define SHF_WRITE               0x1     /* Section contains writable data. */\r
-#define SHF_ALLOC               0x2     /* Section occupies memory. */\r
-#define SHF_EXECINSTR           0x4     /* Section contains instructions. */\r
-#define SHF_MERGE               0x10    /* Section may be merged. */\r
-#define SHF_STRINGS             0x20    /* Section contains strings. */\r
-#define SHF_INFO_LINK           0x40    /* sh_info holds section index. */\r
-#define SHF_LINK_ORDER          0x80    /* Special ordering requirements. */\r
-#define SHF_OS_NONCONFORMING    0x100   /* OS-specific processing required. */\r
-#define SHF_GROUP               0x200   /* Member of section group. */\r
-#define SHF_TLS                 0x400   /* Section contains TLS data. */\r
-#define SHF_MASKOS      0x0ff00000      /* OS-specific semantics. */\r
-#define SHF_MASKPROC    0xf0000000      /* Processor-specific semantics. */\r
-\r
-/* Values for p_type. */\r
-#define PT_NULL         0       /* Unused entry. */\r
-#define PT_LOAD         1       /* Loadable segment. */\r
-#define PT_DYNAMIC      2       /* Dynamic linking information segment. */\r
-#define PT_INTERP       3       /* Pathname of interpreter. */\r
-#define PT_NOTE         4       /* Auxiliary information. */\r
-#define PT_SHLIB        5       /* Reserved (not used). */\r
-#define PT_PHDR         6       /* Location of program header itself. */\r
-#define PT_TLS          7       /* Thread local storage segment */\r
-#define PT_LOOS         0x60000000      /* First OS-specific. */\r
-#define PT_SUNW_UNWIND  0x6464e550      /* amd64 UNWIND program header */\r
-#define PT_GNU_EH_FRAME 0x6474e550\r
-#define PT_LOSUNW       0x6ffffffa\r
-#define PT_SUNWBSS      0x6ffffffa      /* Sun Specific segment */\r
-#define PT_SUNWSTACK    0x6ffffffb      /* describes the stack segment */\r
-#define PT_SUNWDTRACE   0x6ffffffc      /* private */\r
-#define PT_SUNWCAP      0x6ffffffd      /* hard/soft capabilities segment */\r
-#define PT_HISUNW       0x6fffffff\r
-#define PT_HIOS         0x6fffffff      /* Last OS-specific. */\r
-#define PT_LOPROC       0x70000000      /* First processor-specific type. */\r
-#define PT_HIPROC       0x7fffffff      /* Last processor-specific type. */\r
-\r
-/* Values for p_flags. */\r
-#define PF_X            0x1             /* Executable. */\r
-#define PF_W            0x2             /* Writable. */\r
-#define PF_R            0x4             /* Readable. */\r
-#define PF_MASKOS       0x0ff00000      /* Operating system-specific. */\r
-#define PF_MASKPROC     0xf0000000      /* Processor-specific. */\r
-\r
-/* Extended program header index. */\r
-#define PN_XNUM         0xffff\r
-\r
-/* Values for d_tag. */\r
-#define DT_NULL         0       /* Terminating entry. */\r
-#define DT_NEEDED       1       /* String table offset of a needed shared\r
-                                   library. */\r
-#define DT_PLTRELSZ     2       /* Total size in bytes of PLT relocations. */\r
-#define DT_PLTGOT       3       /* Processor-dependent address. */\r
-#define DT_HASH         4       /* Address of symbol hash table. */\r
-#define DT_STRTAB       5       /* Address of string table. */\r
-#define DT_SYMTAB       6       /* Address of symbol table. */\r
-#define DT_RELA         7       /* Address of ElfNN_Rela relocations. */\r
-#define DT_RELASZ       8       /* Total size of ElfNN_Rela relocations. */\r
-#define DT_RELAENT      9       /* Size of each ElfNN_Rela relocation entry. */\r
-#define DT_STRSZ        10      /* Size of string table. */\r
-#define DT_SYMENT       11      /* Size of each symbol table entry. */\r
-#define DT_INIT         12      /* Address of initialization function. */\r
-#define DT_FINI         13      /* Address of finalization function. */\r
-#define DT_SONAME       14      /* String table offset of shared object\r
-                                   name. */\r
-#define DT_RPATH        15      /* String table offset of library path. [sup] */\r
-#define DT_SYMBOLIC     16      /* Indicates "symbolic" linking. [sup] */\r
-#define DT_REL          17      /* Address of ElfNN_Rel relocations. */\r
-#define DT_RELSZ        18      /* Total size of ElfNN_Rel relocations. */\r
-#define DT_RELENT       19      /* Size of each ElfNN_Rel relocation. */\r
-#define DT_PLTREL       20      /* Type of relocation used for PLT. */\r
-#define DT_DEBUG        21      /* Reserved (not used). */\r
-#define DT_TEXTREL      22      /* Indicates there may be relocations in\r
-                                   non-writable segments. [sup] */\r
-#define DT_JMPREL       23      /* Address of PLT relocations. */\r
-#define DT_BIND_NOW     24      /* [sup] */\r
-#define DT_INIT_ARRAY   25      /* Address of the array of pointers to\r
-                                   initialization functions */\r
-#define DT_FINI_ARRAY   26      /* Address of the array of pointers to\r
-                                   termination functions */\r
-#define DT_INIT_ARRAYSZ 27      /* Size in bytes of the array of\r
-                                   initialization functions. */\r
-#define DT_FINI_ARRAYSZ 28      /* Size in bytes of the array of\r
-                                   terminationfunctions. */\r
-#define DT_RUNPATH      29      /* String table offset of a null-terminated\r
-                                   library search path string. */\r
-#define DT_FLAGS        30      /* Object specific flag values. */\r
-#define DT_ENCODING     32      /* Values greater than or equal to DT_ENCODING\r
-                                   and less than DT_LOOS follow the rules for\r
-                                   the interpretation of the d_un union\r
-                                   as follows: even == 'd_ptr', even == 'd_val'\r
-                                   or none */\r
-#define DT_PREINIT_ARRAY   32   /* Address of the array of pointers to\r
-                                   pre-initialization functions. */\r
-#define DT_PREINIT_ARRAYSZ 33   /* Size in bytes of the array of\r
-                                   pre-initialization functions. */\r
-#define DT_MAXPOSTAGS      34   /* number of positive tags */\r
-#define DT_LOOS            0x6000000d      /* First OS-specific */\r
-#define DT_SUNW_AUXILIARY  0x6000000d      /* symbol auxiliary name */\r
-#define DT_SUNW_RTLDINF    0x6000000e      /* ld.so.1 info (private) */\r
-#define DT_SUNW_FILTER     0x6000000f      /* symbol filter name */\r
-#define DT_SUNW_CAP        0x60000010      /* hardware/software */\r
-#define DT_HIOS            0x6ffff000      /* Last OS-specific */\r
-\r
-/*\r
- * DT_* entries which fall between DT_VALRNGHI & DT_VALRNGLO use the\r
- * Dyn.d_un.d_val field of the Elf*_Dyn structure.\r
- */\r
-#define DT_VALRNGLO     0x6ffffd00\r
-#define DT_CHECKSUM     0x6ffffdf8      /* elf checksum */\r
-#define DT_PLTPADSZ     0x6ffffdf9      /* pltpadding size */\r
-#define DT_MOVEENT      0x6ffffdfa      /* move table entry size */\r
-#define DT_MOVESZ       0x6ffffdfb      /* move table size */\r
-#define DT_FEATURE_1    0x6ffffdfc      /* feature holder */\r
-#define DT_POSFLAG_1    0x6ffffdfd      /* flags for DT_* entries, effecting */\r
-                                        /*      the following DT_* entry. */\r
-                                        /*      See DF_P1_* definitions */\r
-#define DT_SYMINSZ      0x6ffffdfe      /* syminfo table size (in bytes) */\r
-#define DT_SYMINENT     0x6ffffdff      /* syminfo entry size (in bytes) */\r
-#define DT_VALRNGHI     0x6ffffdff\r
-\r
-/*\r
- * DT_* entries which fall between DT_ADDRRNGHI & DT_ADDRRNGLO use the\r
- * Dyn.d_un.d_ptr field of the Elf*_Dyn structure.\r
- *\r
- * If any adjustment is made to the ELF object after it has been\r
- * built, these entries will need to be adjusted.\r
- */\r
-#define DT_ADDRRNGLO    0x6ffffe00\r
-#define DT_CONFIG       0x6ffffefa      /* configuration information */\r
-#define DT_DEPAUDIT     0x6ffffefb      /* dependency auditing */\r
-#define DT_AUDIT        0x6ffffefc      /* object auditing */\r
-#define DT_PLTPAD       0x6ffffefd      /* pltpadding (sparcv9) */\r
-#define DT_MOVETAB      0x6ffffefe      /* move table */\r
-#define DT_SYMINFO      0x6ffffeff      /* syminfo table */\r
-#define DT_ADDRRNGHI    0x6ffffeff\r
-\r
-#define DT_VERSYM       0x6ffffff0      /* Address of versym section. */\r
-#define DT_RELACOUNT    0x6ffffff9      /* number of RELATIVE relocations */\r
-#define DT_RELCOUNT     0x6ffffffa      /* number of RELATIVE relocations */\r
-#define DT_FLAGS_1      0x6ffffffb      /* state flags - see DF_1_* defs */\r
-#define DT_VERDEF       0x6ffffffc      /* Address of verdef section. */\r
-#define DT_VERDEFNUM    0x6ffffffd      /* Number of elems in verdef section */\r
-#define DT_VERNEED      0x6ffffffe      /* Address of verneed section. */\r
-#define DT_VERNEEDNUM   0x6fffffff      /* Number of elems in verneed section */\r
-\r
-#define DT_LOPROC       0x70000000      /* First processor-specific type. */\r
-#define DT_DEPRECATED_SPARC_REGISTER    0x7000001\r
-#define DT_AUXILIARY    0x7ffffffd      /* shared library auxiliary name */\r
-#define DT_USED         0x7ffffffe      /* ignored - same as needed */\r
-#define DT_FILTER       0x7fffffff      /* shared library filter name */\r
-#define DT_HIPROC       0x7fffffff      /* Last processor-specific type. */\r
-\r
-/* Values for DT_FLAGS */\r
-#define DF_ORIGIN       0x0001  /* Indicates that the object being loaded may\r
-                                   make reference to the $ORIGIN substitution\r
-                                   string */\r
-#define DF_SYMBOLIC     0x0002  /* Indicates "symbolic" linking. */\r
-#define DF_TEXTREL      0x0004  /* Indicates there may be relocations in\r
-                                   non-writable segments. */\r
-#define DF_BIND_NOW     0x0008  /* Indicates that the dynamic linker should\r
-                                   process all relocations for the object\r
-                                   containing this entry before transferring\r
-                                   control to the program. */\r
-#define DF_STATIC_TLS   0x0010  /* Indicates that the shared object or\r
-                                   executable contains code using a static\r
-                                   thread-local storage scheme. */\r
-\r
-/* Values for n_type.  Used in core files. */\r
-#define NT_PRSTATUS     1       /* Process status. */\r
-#define NT_FPREGSET     2       /* Floating point registers. */\r
-#define NT_PRPSINFO     3       /* Process state info. */\r
-\r
-/* Symbol Binding - ELFNN_ST_BIND - st_info */\r
-#define STB_LOCAL       0       /* Local symbol */\r
-#define STB_GLOBAL      1       /* Global symbol */\r
-#define STB_WEAK        2       /* like global - lower precedence */\r
-#define STB_LOOS        10      /* Reserved range for operating system */\r
-#define STB_HIOS        12      /*   specific semantics. */\r
-#define STB_LOPROC      13      /* reserved range for processor */\r
-#define STB_HIPROC      15      /*   specific semantics. */\r
-\r
-/* Symbol type - ELFNN_ST_TYPE - st_info */\r
-#define STT_NOTYPE      0       /* Unspecified type. */\r
-#define STT_OBJECT      1       /* Data object. */\r
-#define STT_FUNC        2       /* Function. */\r
-#define STT_SECTION     3       /* Section. */\r
-#define STT_FILE        4       /* Source file. */\r
-#define STT_COMMON      5       /* Uninitialized common block. */\r
-#define STT_TLS         6       /* TLS object. */\r
-#define STT_NUM         7\r
-#define STT_LOOS        10      /* Reserved range for operating system */\r
-#define STT_HIOS        12      /*   specific semantics. */\r
-#define STT_LOPROC      13      /* reserved range for processor */\r
-#define STT_HIPROC      15      /*   specific semantics. */\r
-\r
-/* Symbol visibility - ELFNN_ST_VISIBILITY - st_other */\r
-#define STV_DEFAULT     0x0     /* Default visibility (see binding). */\r
-#define STV_INTERNAL    0x1     /* Special meaning in relocatable objects. */\r
-#define STV_HIDDEN      0x2     /* Not visible. */\r
-#define STV_PROTECTED   0x3     /* Visible but not preemptible. */\r
-\r
-/* Special symbol table indexes. */\r
-#define STN_UNDEF       0       /* Undefined symbol index. */\r
-\r
-/* Symbol versioning flags. */\r
-#define VER_DEF_CURRENT 1\r
-#define VER_DEF_IDX(x)  VER_NDX(x)\r
-\r
-#define VER_FLG_BASE    0x01\r
-#define VER_FLG_WEAK    0x02\r
-\r
-#define VER_NEED_CURRENT        1\r
-#define VER_NEED_WEAK   (1u << 15)\r
-#define VER_NEED_HIDDEN VER_NDX_HIDDEN\r
-#define VER_NEED_IDX(x) VER_NDX(x)\r
-\r
-#define VER_NDX_LOCAL   0\r
-#define VER_NDX_GLOBAL  1\r
-#define VER_NDX_GIVEN   2\r
-\r
-#define VER_NDX_HIDDEN  (1u << 15)\r
-#define VER_NDX(x)      ((x) & ~(1u << 15))\r
-\r
-#define CA_SUNW_NULL    0\r
-#define CA_SUNW_HW_1    1               /* first hardware capabilities entry */\r
-#define CA_SUNW_SF_1    2               /* first software capabilities entry */\r
-\r
-/*\r
- * Syminfo flag values\r
- */\r
-#define SYMINFO_FLG_DIRECT      0x0001  /* symbol ref has direct association */\r
-                                        /*      to object containing defn. */\r
-#define SYMINFO_FLG_PASSTHRU    0x0002  /* ignored - see SYMINFO_FLG_FILTER */\r
-#define SYMINFO_FLG_COPY        0x0004  /* symbol is a copy-reloc */\r
-#define SYMINFO_FLG_LAZYLOAD    0x0008  /* object containing defn should be */\r
-                                        /*      lazily-loaded */\r
-#define SYMINFO_FLG_DIRECTBIND  0x0010  /* ref should be bound directly to */\r
-                                        /*      object containing defn. */\r
-#define SYMINFO_FLG_NOEXTDIRECT 0x0020  /* don't let an external reference */\r
-                                        /*      directly bind to this symbol */\r
-#define SYMINFO_FLG_FILTER      0x0002  /* symbol ref is associated to a */\r
-#define SYMINFO_FLG_AUXILIARY   0x0040  /*      standard or auxiliary filter */\r
-\r
-/*\r
- * Syminfo.si_boundto values.\r
- */\r
-#define SYMINFO_BT_SELF         0xffff  /* symbol bound to self */\r
-#define SYMINFO_BT_PARENT       0xfffe  /* symbol bound to parent */\r
-#define SYMINFO_BT_NONE         0xfffd  /* no special symbol binding */\r
-#define SYMINFO_BT_EXTERN       0xfffc  /* symbol defined as external */\r
-#define SYMINFO_BT_LOWRESERVE   0xff00  /* beginning of reserved entries */\r
-\r
-/*\r
- * Syminfo version values.\r
- */\r
-#define SYMINFO_NONE            0       /* Syminfo version */\r
-#define SYMINFO_CURRENT         1\r
-#define SYMINFO_NUM             2\r
-\r
-/*\r
- * Relocation types.\r
- *\r
- * All machine architectures are defined here to allow tools on one to\r
- * handle others.\r
- */\r
-\r
-#define R_386_NONE              0       /* No relocation. */\r
-#define R_386_32                1       /* Add symbol value. */\r
-#define R_386_PC32              2       /* Add PC-relative symbol value. */\r
-#define R_386_GOT32             3       /* Add PC-relative GOT offset. */\r
-#define R_386_PLT32             4       /* Add PC-relative PLT offset. */\r
-#define R_386_COPY              5       /* Copy data from shared object. */\r
-#define R_386_GLOB_DAT          6       /* Set GOT entry to data address. */\r
-#define R_386_JMP_SLOT          7       /* Set GOT entry to code address. */\r
-#define R_386_RELATIVE          8       /* Add load address of shared object. */\r
-#define R_386_GOTOFF            9       /* Add GOT-relative symbol address. */\r
-#define R_386_GOTPC             10      /* Add PC-relative GOT table address. */\r
-#define R_386_TLS_TPOFF         14      /* Negative offset in static TLS block */\r
-#define R_386_TLS_IE            15      /* Absolute address of GOT for -ve static TLS */\r
-#define R_386_TLS_GOTIE         16      /* GOT entry for negative static TLS block */\r
-#define R_386_TLS_LE            17      /* Negative offset relative to static TLS */\r
-#define R_386_TLS_GD            18      /* 32 bit offset to GOT (index,off) pair */\r
-#define R_386_TLS_LDM           19      /* 32 bit offset to GOT (index,zero) pair */\r
-#define R_386_TLS_GD_32         24      /* 32 bit offset to GOT (index,off) pair */\r
-#define R_386_TLS_GD_PUSH       25      /* pushl instruction for Sun ABI GD sequence */\r
-#define R_386_TLS_GD_CALL       26      /* call instruction for Sun ABI GD sequence */\r
-#define R_386_TLS_GD_POP        27      /* popl instruction for Sun ABI GD sequence */\r
-#define R_386_TLS_LDM_32        28      /* 32 bit offset to GOT (index,zero) pair */\r
-#define R_386_TLS_LDM_PUSH      29      /* pushl instruction for Sun ABI LD sequence */\r
-#define R_386_TLS_LDM_CALL      30      /* call instruction for Sun ABI LD sequence */\r
-#define R_386_TLS_LDM_POP       31      /* popl instruction for Sun ABI LD sequence */\r
-#define R_386_TLS_LDO_32        32      /* 32 bit offset from start of TLS block */\r
-#define R_386_TLS_IE_32         33      /* 32 bit offset to GOT static TLS offset entry */\r
-#define R_386_TLS_LE_32         34      /* 32 bit offset within static TLS block */\r
-#define R_386_TLS_DTPMOD32      35      /* GOT entry containing TLS index */\r
-#define R_386_TLS_DTPOFF32      36      /* GOT entry containing TLS offset */\r
-#define R_386_TLS_TPOFF32       37      /* GOT entry of -ve static TLS offset */\r
-\r
-/* Null relocation */\r
-#define R_AARCH64_NONE                          256     /* No relocation */\r
-/* Static AArch64 relocations */\r
- /* Static data relocations */\r
-#define R_AARCH64_ABS64                         257     /* S + A */\r
-#define R_AARCH64_ABS32                         258     /* S + A */\r
-#define R_AARCH64_ABS16                         259     /* S + A */\r
-#define R_AARCH64_PREL64                        260     /* S + A - P */\r
-#define R_AARCH64_PREL32                        261     /* S + A - P */\r
-#define R_AARCH64_PREL16                        262     /* S + A - P */\r
- /* Group relocations to create a 16, 32, 48, or 64 bit unsigned data value or address inline */\r
-#define R_AARCH64_MOVW_UABS_G0                  263     /* S + A */\r
-#define R_AARCH64_MOVW_UABS_G0_NC               264     /* S + A */\r
-#define R_AARCH64_MOVW_UABS_G1                  265     /* S + A */\r
-#define R_AARCH64_MOVW_UABS_G1_NC               266     /* S + A */\r
-#define R_AARCH64_MOVW_UABS_G2                  267     /* S + A */\r
-#define R_AARCH64_MOVW_UABS_G2_NC               268     /* S + A */\r
-#define R_AARCH64_MOVW_UABS_G3                  269     /* S + A */\r
- /* Group relocations to create a 16, 32, 48, or 64 bit signed data or offset value inline */\r
-#define R_AARCH64_MOVW_SABS_G0                  270     /* S + A */\r
-#define R_AARCH64_MOVW_SABS_G1                  271     /* S + A */\r
-#define R_AARCH64_MOVW_SABS_G2                  272     /* S + A */\r
- /* Relocations to generate 19, 21 and 33 bit PC-relative addresses */\r
-#define R_AARCH64_LD_PREL_LO19                  273     /* S + A - P */\r
-#define R_AARCH64_ADR_PREL_LO21                 274     /* S + A - P */\r
-#define R_AARCH64_ADR_PREL_PG_HI21              275     /* Page(S+A) - Page(P) */\r
-#define R_AARCH64_ADR_PREL_PG_HI21_NC           276     /* Page(S+A) - Page(P) */\r
-#define R_AARCH64_ADD_ABS_LO12_NC               277     /* S + A */\r
-#define R_AARCH64_LDST8_ABS_LO12_NC             278     /* S + A */\r
-#define R_AARCH64_LDST16_ABS_LO12_NC            284     /* S + A */\r
-#define R_AARCH64_LDST32_ABS_LO12_NC            285     /* S + A */\r
-#define R_AARCH64_LDST64_ABS_LO12_NC            286     /* S + A */\r
-#define R_AARCH64_LDST128_ABS_LO12_NC           299     /* S + A */\r
- /* Relocations for control-flow instructions - all offsets are a multiple of 4 */\r
-#define R_AARCH64_TSTBR14                       279     /* S+A-P */\r
-#define R_AARCH64_CONDBR19                      280     /* S+A-P */\r
-#define R_AARCH64_JUMP26                        282     /* S+A-P */\r
-#define R_AARCH64_CALL26                        283     /* S+A-P */\r
- /* Group relocations to create a 16, 32, 48, or 64 bit PC-relative offset inline */\r
-#define R_AARCH64_MOVW_PREL_G0                  287     /* S+A-P */\r
-#define R_AARCH64_MOVW_PREL_G0_NC               288     /* S+A-P */\r
-#define R_AARCH64_MOVW_PREL_G1                  289     /* S+A-P */\r
-#define R_AARCH64_MOVW_PREL_G1_NC               290     /* S+A-P */\r
-#define R_AARCH64_MOVW_PREL_G2                  291     /* S+A-P */\r
-#define R_AARCH64_MOVW_PREL_G2_NC               292     /* S+A-P */\r
-#define R_AARCH64_MOVW_PREL_G3                  293     /* S+A-P */\r
- /* Group relocations to create a 16, 32, 48, or 64 bit GOT-relative offsets inline */\r
-#define R_AARCH64_MOVW_GOTOFF_G0                300     /* G(S)-GOT */\r
-#define R_AARCH64_MOVW_GOTOFF_G0_NC             301     /* G(S)-GOT */\r
-#define R_AARCH64_MOVW_GOTOFF_G1                302     /* G(S)-GOT */\r
-#define R_AARCH64_MOVW_GOTOFF_G1_NC             303     /* G(S)-GOT */\r
-#define R_AARCH64_MOVW_GOTOFF_G2                304     /* G(S)-GOT */\r
-#define R_AARCH64_MOVW_GOTOFF_G2_NC             305     /* G(S)-GOT */\r
-#define R_AARCH64_MOVW_GOTOFF_G3                306     /* G(S)-GOT */\r
- /*  GOT-relative data relocations */\r
-#define R_AARCH64_GOTREL64                      307     /* S+A-GOT */\r
-#define R_AARCH64_GOTREL32                      308     /* S+A-GOT */\r
- /* GOT-relative instruction relocations */\r
-#define R_AARCH64_GOT_LD_PREL19                 309     /* G(S)-P */\r
-#define R_AARCH64_LD64_GOTOFF_LO15              310     /* G(S)-GOT */\r
-#define R_AARCH64_ADR_GOT_PAGE                  311     /* Page(G(S))-Page(P) */\r
-#define R_AARCH64_LD64_GOT_LO12_NC              312     /* G(S) */\r
-#define R_AARCH64_LD64_GOTPAGE_LO15             313     /* G(S)-Page(GOT) */\r
-/* Relocations for thread-local storage */\r
- /* General Dynamic TLS relocations */\r
-#define R_AARCH64_TLSGD_ADR_PREL21              512     /* G(TLSIDX(S+A)) - P */\r
-#define R_AARCH64_TLSGD_ADR_PAGE21              513     /* Page(G(TLSIDX(S+A))) - Page(P) */\r
-#define R_AARCH64_TLSGD_ADD_LO12_NC             514     /* G(TLSIDX(S+A)) */\r
-#define R_AARCH64_TLSGD_MOVW_G1                 515     /* G(TLSIDX(S+A)) - GOT */\r
-#define R_AARCH64_TLSGD_MOVW_G0_NC              516     /* G(TLSIDX(S+A)) - GOT */\r
- /* Local Dynamic TLS relocations */\r
-#define R_AARCH64_TLSLD_ADR_PREL21              517     /* G(LDM(S))) - P */\r
-#define R_AARCH64_TLSLD_ADR_PAGE21              518     /* Page(G(LDM(S)))-Page(P) */\r
-#define R_AARCH64_TLSLD_ADD_LO12_NC             519     /* G(LDM(S)) */\r
-#define R_AARCH64_TLSLD_MOVW_G1                 520     /* G(LDM(S)) - GOT */\r
-#define R_AARCH64_TLSLD_MOVW_G0_NC              521     /* G(LDM(S)) - GOT */\r
-#define R_AARCH64_TLSLD_LD_PREL19               522     /* G(LDM(S)) - P */\r
-#define R_AARCH64_TLSLD_MOVW_DTPREL_G2          523     /* DTPREL(S+A) */\r
-#define R_AARCH64_TLSLD_MOVW_DTPREL_G1          524     /* DTPREL(S+A) */\r
-#define R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC       525     /* DTPREL(S+A) */\r
-#define R_AARCH64_TLSLD_MOVW_DTPREL_G0          526     /* DTPREL(S+A) */\r
-#define R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC       527     /* DTPREL(S+A) */\r
-#define R_AARCH64_TLSLD_ADD_DTPREL_HI12         528     /* DTPREL(S+A) */\r
-#define R_AARCH64_TLSLD_ADD_DTPREL_LO12         529     /* DTPREL(S+A) */\r
-#define R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC      530     /* DTPREL(S+A) */\r
-#define R_AARCH64_TLSLD_LDST8_DTPREL_LO12       531     /* DTPREL(S+A) */\r
-#define R_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC    532     /* DTPREL(S+A) */\r
-#define R_AARCH64_TLSLD_LDST16_DTPREL_LO12      533     /* DTPREL(S+A) */\r
-#define R_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC   534     /* DTPREL(S+A) */\r
-#define R_AARCH64_TLSLD_LDST32_DTPREL_LO12      535     /* DTPREL(S+A) */\r
-#define R_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC   536     /* DTPREL(S+A) */\r
-#define R_AARCH64_TLSLD_LDST64_DTPREL_LO12      537     /* DTPREL(S+A) */\r
-#define R_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC   538     /* DTPREL(S+A) */\r
- /* Initial Exec TLS relocations */\r
-#define R_AARCH64_TLSIE_MOVW_GOTTPREL_G1        539     /* G(TPREL(S+A)) - GOT */\r
-#define R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC     540     /* G(TPREL(S+A)) - GOT */\r
-#define R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21     541     /* Page(G(TPREL(S+A))) - Page(P) */\r
-#define R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC   542     /* G(TPREL(S+A)) */\r
-#define R_AARCH64_TLSIE_LD_GOTTPREL_PREL19      543     /* G(TPREL(S+A)) - P */\r
- /* Local Exec TLS relocations */\r
-#define R_AARCH64_TLSLE_MOVW_TPREL_G2           544     /* TPREL(S+A) */\r
-#define R_AARCH64_TLSLE_MOVW_TPREL_G1           545     /* TPREL(S+A) */\r
-#define R_AARCH64_TLSLE_MOVW_TPREL_G1_NC        546     /* TPREL(S+A) */\r
-#define R_AARCH64_TLSLE_MOVW_TPREL_G0           547     /* TPREL(S+A) */\r
-#define R_AARCH64_TLSLE_MOVW_TPREL_G0_NC        548     /* TPREL(S+A) */\r
-#define R_AARCH64_TLSLE_ADD_TPREL_HI12          549     /* TPREL(S+A) */\r
-#define R_AARCH64_TLSLE_ADD_TPREL_LO12          550     /* TPREL(S+A) */\r
-#define R_AARCH64_TLSLE_ADD_TPREL_LO12_NC       551     /* TPREL(S+A) */\r
-#define R_AARCH64_TLSLE_LDST8_TPREL_LO12        552     /* TPREL(S+A) */\r
-#define R_AARCH64_TLSLE_LDST8_TPREL_LO12_NC     553     /* TPREL(S+A) */\r
-#define R_AARCH64_TLSLE_LDST16_TPREL_LO12       554     /* TPREL(S+A) */\r
-#define R_AARCH64_TLSLE_LDST16_TPREL_LO12_NC    555     /* TPREL(S+A) */\r
-#define R_AARCH64_TLSLE_LDST32_TPREL_LO12       556     /* TPREL(S+A) */\r
-#define R_AARCH64_TLSLE_LDST32_TPREL_LO12_NC    557     /* TPREL(S+A) */\r
-#define R_AARCH64_TLSLE_LDST64_TPREL_LO12       558     /* TPREL(S+A) */\r
-#define R_AARCH64_TLSLE_LDST64_TPREL_LO12_NC    559     /* TPREL(S+A) */\r
-/* Dynamic relocations */\r
- /* Dynamic relocations */\r
-#define R_AARCH64_COPY                          1024\r
-#define R_AARCH64_GLOB_DAT                      1025    /* S + A */\r
-#define R_AARCH64_JUMP_SLOT                     1026    /* S + A */\r
-#define R_AARCH64_RELATIVE                      1027    /* Delta(S) + A , Delta(P) + A */\r
-#define R_AARCH64_TLS_DTPREL64                  1028    /* DTPREL(S+A) */\r
-#define R_AARCH64_TLS_DTPMOD64                  1029    /* LDM(S) */\r
-#define R_AARCH64_TLS_TPREL64                   1030    /* TPREL(S+A) */\r
-#define R_AARCH64_TLS_DTPREL32                  1031    /* DTPREL(S+A) */\r
-#define R_AARCH64_TLS_DTPMOD32                  1032    /* LDM(S) */\r
-#define R_AARCH64_TLS_TPREL32                   1033    /* DTPREL(S+A) */\r
-\r
-#define R_ALPHA_NONE            0       /* No reloc */\r
-#define R_ALPHA_REFLONG         1       /* Direct 32 bit */\r
-#define R_ALPHA_REFQUAD         2       /* Direct 64 bit */\r
-#define R_ALPHA_GPREL32         3       /* GP relative 32 bit */\r
-#define R_ALPHA_LITERAL         4       /* GP relative 16 bit w/optimization */\r
-#define R_ALPHA_LITUSE          5       /* Optimization hint for LITERAL */\r
-#define R_ALPHA_GPDISP          6       /* Add displacement to GP */\r
-#define R_ALPHA_BRADDR          7       /* PC+4 relative 23 bit shifted */\r
-#define R_ALPHA_HINT            8       /* PC+4 relative 16 bit shifted */\r
-#define R_ALPHA_SREL16          9       /* PC relative 16 bit */\r
-#define R_ALPHA_SREL32          10      /* PC relative 32 bit */\r
-#define R_ALPHA_SREL64          11      /* PC relative 64 bit */\r
-#define R_ALPHA_OP_PUSH         12      /* OP stack push */\r
-#define R_ALPHA_OP_STORE        13      /* OP stack pop and store */\r
-#define R_ALPHA_OP_PSUB         14      /* OP stack subtract */\r
-#define R_ALPHA_OP_PRSHIFT      15      /* OP stack right shift */\r
-#define R_ALPHA_GPVALUE         16\r
-#define R_ALPHA_GPRELHIGH       17\r
-#define R_ALPHA_GPRELLOW        18\r
-#define R_ALPHA_IMMED_GP_16     19\r
-#define R_ALPHA_IMMED_GP_HI32   20\r
-#define R_ALPHA_IMMED_SCN_HI32  21\r
-#define R_ALPHA_IMMED_BR_HI32   22\r
-#define R_ALPHA_IMMED_LO32      23\r
-#define R_ALPHA_COPY            24      /* Copy symbol at runtime */\r
-#define R_ALPHA_GLOB_DAT        25      /* Create GOT entry */\r
-#define R_ALPHA_JMP_SLOT        26      /* Create PLT entry */\r
-#define R_ALPHA_RELATIVE        27      /* Adjust by program base */\r
-\r
-#define R_ARM_NONE              0       /* No relocation. */\r
-#define R_ARM_PC24              1\r
-#define R_ARM_ABS32             2\r
-#define R_ARM_REL32             3\r
-#define R_ARM_PC13              4\r
-#define R_ARM_ABS16             5\r
-#define R_ARM_ABS12             6\r
-#define R_ARM_THM_ABS5          7\r
-#define R_ARM_ABS8              8\r
-#define R_ARM_SBREL32           9\r
-#define R_ARM_THM_PC22          10\r
-#define R_ARM_THM_PC8           11\r
-#define R_ARM_AMP_VCALL9        12\r
-#define R_ARM_SWI24             13\r
-#define R_ARM_THM_SWI8          14\r
-#define R_ARM_XPC25             15\r
-#define R_ARM_THM_XPC22         16\r
-#define R_ARM_COPY              20      /* Copy data from shared object. */\r
-#define R_ARM_GLOB_DAT          21      /* Set GOT entry to data address. */\r
-#define R_ARM_JUMP_SLOT         22      /* Set GOT entry to code address. */\r
-#define R_ARM_RELATIVE          23      /* Add load address of shared object. */\r
-#define R_ARM_GOTOFF            24      /* Add GOT-relative symbol address. */\r
-#define R_ARM_GOTPC             25      /* Add PC-relative GOT table address. */\r
-#define R_ARM_GOT32             26      /* Add PC-relative GOT offset. */\r
-#define R_ARM_PLT32             27      /* Add PC-relative PLT offset. */\r
-#define R_ARM_CALL              28\r
-#define R_ARM_JMP24             29\r
-#define R_ARM_MOVW_ABS_NC       43\r
-#define R_ARM_MOVT_ABS          44\r
-#define R_ARM_THM_MOVW_ABS_NC   47\r
-#define R_ARM_THM_MOVT_ABS      48\r
-\r
-// Block of PC-relative relocations added to work around gcc putting\r
-// object relocations in static executables.\r
-#define R_ARM_THM_JUMP24        30\r
-#define R_ARM_PREL31            42\r
-#define R_ARM_MOVW_PREL_NC      45\r
-#define R_ARM_MOVT_PREL         46\r
-#define R_ARM_THM_MOVW_PREL_NC  49\r
-#define R_ARM_THM_MOVT_PREL     50\r
-#define R_ARM_THM_JMP6          52\r
-#define R_ARM_THM_ALU_PREL_11_0 53\r
-#define R_ARM_THM_PC12          54\r
-#define R_ARM_REL32_NOI         56\r
-#define R_ARM_ALU_PC_G0_NC      57\r
-#define R_ARM_ALU_PC_G0         58\r
-#define R_ARM_ALU_PC_G1_NC      59\r
-#define R_ARM_ALU_PC_G1         60\r
-#define R_ARM_ALU_PC_G2         61\r
-#define R_ARM_LDR_PC_G1         62\r
-#define R_ARM_LDR_PC_G2         63\r
-#define R_ARM_LDRS_PC_G0        64\r
-#define R_ARM_LDRS_PC_G1        65\r
-#define R_ARM_LDRS_PC_G2        66\r
-#define R_ARM_LDC_PC_G0         67\r
-#define R_ARM_LDC_PC_G1         68\r
-#define R_ARM_LDC_PC_G2         69\r
-#define R_ARM_GOT_PREL          96\r
-#define R_ARM_THM_JUMP11        102\r
-#define R_ARM_THM_JUMP8         103\r
-#define R_ARM_TLS_GD32          104\r
-#define R_ARM_TLS_LDM32         105\r
-#define R_ARM_TLS_IE32          107\r
-\r
-#define R_ARM_THM_JUMP19        51\r
-#define R_ARM_GNU_VTENTRY       100\r
-#define R_ARM_GNU_VTINHERIT     101\r
-#define R_ARM_RSBREL32          250\r
-#define R_ARM_THM_RPC22         251\r
-#define R_ARM_RREL32            252\r
-#define R_ARM_RABS32            253\r
-#define R_ARM_RPC24             254\r
-#define R_ARM_RBASE             255\r
-\r
-\r
-\r
-/*      Name                    Value      Field        Calculation */\r
-#define R_IA_64_NONE            0       /* None */\r
-#define R_IA_64_IMM14           0x21    /* immediate14  S + A */\r
-#define R_IA_64_IMM22           0x22    /* immediate22  S + A */\r
-#define R_IA_64_IMM64           0x23    /* immediate64  S + A */\r
-#define R_IA_64_DIR32MSB        0x24    /* word32 MSB   S + A */\r
-#define R_IA_64_DIR32LSB        0x25    /* word32 LSB   S + A */\r
-#define R_IA_64_DIR64MSB        0x26    /* word64 MSB   S + A */\r
-#define R_IA_64_DIR64LSB        0x27    /* word64 LSB   S + A */\r
-#define R_IA_64_GPREL22         0x2a    /* immediate22  @gprel(S + A) */\r
-#define R_IA_64_GPREL64I        0x2b    /* immediate64  @gprel(S + A) */\r
-#define R_IA_64_GPREL32MSB      0x2c    /* word32 MSB   @gprel(S + A) */\r
-#define R_IA_64_GPREL32LSB      0x2d    /* word32 LSB   @gprel(S + A) */\r
-#define R_IA_64_GPREL64MSB      0x2e    /* word64 MSB   @gprel(S + A) */\r
-#define R_IA_64_GPREL64LSB      0x2f    /* word64 LSB   @gprel(S + A) */\r
-#define R_IA_64_LTOFF22         0x32    /* immediate22  @ltoff(S + A) */\r
-#define R_IA_64_LTOFF64I        0x33    /* immediate64  @ltoff(S + A) */\r
-#define R_IA_64_PLTOFF22        0x3a    /* immediate22  @pltoff(S + A) */\r
-#define R_IA_64_PLTOFF64I       0x3b    /* immediate64  @pltoff(S + A) */\r
-#define R_IA_64_PLTOFF64MSB     0x3e    /* word64 MSB   @pltoff(S + A) */\r
-#define R_IA_64_PLTOFF64LSB     0x3f    /* word64 LSB   @pltoff(S + A) */\r
-#define R_IA_64_FPTR64I         0x43    /* immediate64  @fptr(S + A) */\r
-#define R_IA_64_FPTR32MSB       0x44    /* word32 MSB   @fptr(S + A) */\r
-#define R_IA_64_FPTR32LSB       0x45    /* word32 LSB   @fptr(S + A) */\r
-#define R_IA_64_FPTR64MSB       0x46    /* word64 MSB   @fptr(S + A) */\r
-#define R_IA_64_FPTR64LSB       0x47    /* word64 LSB   @fptr(S + A) */\r
-#define R_IA_64_PCREL60B        0x48    /* immediate60 form1 S + A - P */\r
-#define R_IA_64_PCREL21B        0x49    /* immediate21 form1 S + A - P */\r
-#define R_IA_64_PCREL21M        0x4a    /* immediate21 form2 S + A - P */\r
-#define R_IA_64_PCREL21F        0x4b    /* immediate21 form3 S + A - P */\r
-#define R_IA_64_PCREL32MSB      0x4c    /* word32 MSB   S + A - P */\r
-#define R_IA_64_PCREL32LSB      0x4d    /* word32 LSB   S + A - P */\r
-#define R_IA_64_PCREL64MSB      0x4e    /* word64 MSB   S + A - P */\r
-#define R_IA_64_PCREL64LSB      0x4f    /* word64 LSB   S + A - P */\r
-#define R_IA_64_LTOFF_FPTR22    0x52    /* immediate22  @ltoff(@fptr(S + A)) */\r
-#define R_IA_64_LTOFF_FPTR64I   0x53    /* immediate64  @ltoff(@fptr(S + A)) */\r
-#define R_IA_64_LTOFF_FPTR32MSB 0x54    /* word32 MSB   @ltoff(@fptr(S + A)) */\r
-#define R_IA_64_LTOFF_FPTR32LSB 0x55    /* word32 LSB   @ltoff(@fptr(S + A)) */\r
-#define R_IA_64_LTOFF_FPTR64MSB 0x56    /* word64 MSB   @ltoff(@fptr(S + A)) */\r
-#define R_IA_64_LTOFF_FPTR64LSB 0x57    /* word64 LSB   @ltoff(@fptr(S + A)) */\r
-#define R_IA_64_SEGREL32MSB     0x5c    /* word32 MSB   @segrel(S + A) */\r
-#define R_IA_64_SEGREL32LSB     0x5d    /* word32 LSB   @segrel(S + A) */\r
-#define R_IA_64_SEGREL64MSB     0x5e    /* word64 MSB   @segrel(S + A) */\r
-#define R_IA_64_SEGREL64LSB     0x5f    /* word64 LSB   @segrel(S + A) */\r
-#define R_IA_64_SECREL32MSB     0x64    /* word32 MSB   @secrel(S + A) */\r
-#define R_IA_64_SECREL32LSB     0x65    /* word32 LSB   @secrel(S + A) */\r
-#define R_IA_64_SECREL64MSB     0x66    /* word64 MSB   @secrel(S + A) */\r
-#define R_IA_64_SECREL64LSB     0x67    /* word64 LSB   @secrel(S + A) */\r
-#define R_IA_64_REL32MSB        0x6c    /* word32 MSB   BD + A */\r
-#define R_IA_64_REL32LSB        0x6d    /* word32 LSB   BD + A */\r
-#define R_IA_64_REL64MSB        0x6e    /* word64 MSB   BD + A */\r
-#define R_IA_64_REL64LSB        0x6f    /* word64 LSB   BD + A */\r
-#define R_IA_64_LTV32MSB        0x74    /* word32 MSB   S + A */\r
-#define R_IA_64_LTV32LSB        0x75    /* word32 LSB   S + A */\r
-#define R_IA_64_LTV64MSB        0x76    /* word64 MSB   S + A */\r
-#define R_IA_64_LTV64LSB        0x77    /* word64 LSB   S + A */\r
-#define R_IA_64_PCREL21BI       0x79    /* immediate21 form1 S + A - P */\r
-#define R_IA_64_PCREL22         0x7a    /* immediate22  S + A - P */\r
-#define R_IA_64_PCREL64I        0x7b    /* immediate64  S + A - P */\r
-#define R_IA_64_IPLTMSB         0x80    /* function descriptor MSB special */\r
-#define R_IA_64_IPLTLSB         0x81    /* function descriptor LSB speciaal */\r
-#define R_IA_64_SUB             0x85    /* immediate64  A - S */\r
-#define R_IA_64_LTOFF22X        0x86    /* immediate22  special */\r
-#define R_IA_64_LDXMOV          0x87    /* immediate22  special */\r
-#define R_IA_64_TPREL14         0x91    /* imm14        @tprel(S + A) */\r
-#define R_IA_64_TPREL22         0x92    /* imm22        @tprel(S + A) */\r
-#define R_IA_64_TPREL64I        0x93    /* imm64        @tprel(S + A) */\r
-#define R_IA_64_TPREL64MSB      0x96    /* word64 MSB   @tprel(S + A) */\r
-#define R_IA_64_TPREL64LSB      0x97    /* word64 LSB   @tprel(S + A) */\r
-#define R_IA_64_LTOFF_TPREL22   0x9a    /* imm22        @ltoff(@tprel(S+A)) */\r
-#define R_IA_64_DTPMOD64MSB     0xa6    /* word64 MSB   @dtpmod(S + A) */\r
-#define R_IA_64_DTPMOD64LSB     0xa7    /* word64 LSB   @dtpmod(S + A) */\r
-#define R_IA_64_LTOFF_DTPMOD22  0xaa    /* imm22        @ltoff(@dtpmod(S+A)) */\r
-#define R_IA_64_DTPREL14        0xb1    /* imm14        @dtprel(S + A) */\r
-#define R_IA_64_DTPREL22        0xb2    /* imm22        @dtprel(S + A) */\r
-#define R_IA_64_DTPREL64I       0xb3    /* imm64        @dtprel(S + A) */\r
-#define R_IA_64_DTPREL32MSB     0xb4    /* word32 MSB   @dtprel(S + A) */\r
-#define R_IA_64_DTPREL32LSB     0xb5    /* word32 LSB   @dtprel(S + A) */\r
-#define R_IA_64_DTPREL64MSB     0xb6    /* word64 MSB   @dtprel(S + A) */\r
-#define R_IA_64_DTPREL64LSB     0xb7    /* word64 LSB   @dtprel(S + A) */\r
-#define R_IA_64_LTOFF_DTPREL22  0xba    /* imm22        @ltoff(@dtprel(S+A)) */\r
-\r
-#define R_PPC_NONE              0       /* No relocation. */\r
-#define R_PPC_ADDR32            1\r
-#define R_PPC_ADDR24            2\r
-#define R_PPC_ADDR16            3\r
-#define R_PPC_ADDR16_LO         4\r
-#define R_PPC_ADDR16_HI         5\r
-#define R_PPC_ADDR16_HA         6\r
-#define R_PPC_ADDR14            7\r
-#define R_PPC_ADDR14_BRTAKEN    8\r
-#define R_PPC_ADDR14_BRNTAKEN   9\r
-#define R_PPC_REL24             10\r
-#define R_PPC_REL14             11\r
-#define R_PPC_REL14_BRTAKEN     12\r
-#define R_PPC_REL14_BRNTAKEN    13\r
-#define R_PPC_GOT16             14\r
-#define R_PPC_GOT16_LO          15\r
-#define R_PPC_GOT16_HI          16\r
-#define R_PPC_GOT16_HA          17\r
-#define R_PPC_PLTREL24          18\r
-#define R_PPC_COPY              19\r
-#define R_PPC_GLOB_DAT          20\r
-#define R_PPC_JMP_SLOT          21\r
-#define R_PPC_RELATIVE          22\r
-#define R_PPC_LOCAL24PC         23\r
-#define R_PPC_UADDR32           24\r
-#define R_PPC_UADDR16           25\r
-#define R_PPC_REL32             26\r
-#define R_PPC_PLT32             27\r
-#define R_PPC_PLTREL32          28\r
-#define R_PPC_PLT16_LO          29\r
-#define R_PPC_PLT16_HI          30\r
-#define R_PPC_PLT16_HA          31\r
-#define R_PPC_SDAREL16          32\r
-#define R_PPC_SECTOFF           33\r
-#define R_PPC_SECTOFF_LO        34\r
-#define R_PPC_SECTOFF_HI        35\r
-#define R_PPC_SECTOFF_HA        36\r
-\r
-/*\r
- * TLS relocations\r
- */\r
-#define R_PPC_TLS               67\r
-#define R_PPC_DTPMOD32          68\r
-#define R_PPC_TPREL16           69\r
-#define R_PPC_TPREL16_LO        70\r
-#define R_PPC_TPREL16_HI        71\r
-#define R_PPC_TPREL16_HA        72\r
-#define R_PPC_TPREL32           73\r
-#define R_PPC_DTPREL16          74\r
-#define R_PPC_DTPREL16_LO       75\r
-#define R_PPC_DTPREL16_HI       76\r
-#define R_PPC_DTPREL16_HA       77\r
-#define R_PPC_DTPREL32          78\r
-#define R_PPC_GOT_TLSGD16       79\r
-#define R_PPC_GOT_TLSGD16_LO    80\r
-#define R_PPC_GOT_TLSGD16_HI    81\r
-#define R_PPC_GOT_TLSGD16_HA    82\r
-#define R_PPC_GOT_TLSLD16       83\r
-#define R_PPC_GOT_TLSLD16_LO    84\r
-#define R_PPC_GOT_TLSLD16_HI    85\r
-#define R_PPC_GOT_TLSLD16_HA    86\r
-#define R_PPC_GOT_TPREL16       87\r
-#define R_PPC_GOT_TPREL16_LO    88\r
-#define R_PPC_GOT_TPREL16_HI    89\r
-#define R_PPC_GOT_TPREL16_HA    90\r
-\r
-/*\r
- * The remaining relocs are from the Embedded ELF ABI, and are not in the\r
- *  SVR4 ELF ABI.\r
- */\r
-\r
-#define R_PPC_EMB_NADDR32       101\r
-#define R_PPC_EMB_NADDR16       102\r
-#define R_PPC_EMB_NADDR16_LO    103\r
-#define R_PPC_EMB_NADDR16_HI    104\r
-#define R_PPC_EMB_NADDR16_HA    105\r
-#define R_PPC_EMB_SDAI16        106\r
-#define R_PPC_EMB_SDA2I16       107\r
-#define R_PPC_EMB_SDA2REL       108\r
-#define R_PPC_EMB_SDA21         109\r
-#define R_PPC_EMB_MRKREF        110\r
-#define R_PPC_EMB_RELSEC16      111\r
-#define R_PPC_EMB_RELST_LO      112\r
-#define R_PPC_EMB_RELST_HI      113\r
-#define R_PPC_EMB_RELST_HA      114\r
-#define R_PPC_EMB_BIT_FLD       115\r
-#define R_PPC_EMB_RELSDA        116\r
-\r
-#define R_SPARC_NONE            0\r
-#define R_SPARC_8               1\r
-#define R_SPARC_16              2\r
-#define R_SPARC_32              3\r
-#define R_SPARC_DISP8           4\r
-#define R_SPARC_DISP16          5\r
-#define R_SPARC_DISP32          6\r
-#define R_SPARC_WDISP30         7\r
-#define R_SPARC_WDISP22         8\r
-#define R_SPARC_HI22            9\r
-#define R_SPARC_22              10\r
-#define R_SPARC_13              11\r
-#define R_SPARC_LO10            12\r
-#define R_SPARC_GOT10           13\r
-#define R_SPARC_GOT13           14\r
-#define R_SPARC_GOT22           15\r
-#define R_SPARC_PC10            16\r
-#define R_SPARC_PC22            17\r
-#define R_SPARC_WPLT30          18\r
-#define R_SPARC_COPY            19\r
-#define R_SPARC_GLOB_DAT        20\r
-#define R_SPARC_JMP_SLOT        21\r
-#define R_SPARC_RELATIVE        22\r
-#define R_SPARC_UA32            23\r
-#define R_SPARC_PLT32           24\r
-#define R_SPARC_HIPLT22         25\r
-#define R_SPARC_LOPLT10         26\r
-#define R_SPARC_PCPLT32         27\r
-#define R_SPARC_PCPLT22         28\r
-#define R_SPARC_PCPLT10         29\r
-#define R_SPARC_10              30\r
-#define R_SPARC_11              31\r
-#define R_SPARC_64              32\r
-#define R_SPARC_OLO10           33\r
-#define R_SPARC_HH22            34\r
-#define R_SPARC_HM10            35\r
-#define R_SPARC_LM22            36\r
-#define R_SPARC_PC_HH22         37\r
-#define R_SPARC_PC_HM10         38\r
-#define R_SPARC_PC_LM22         39\r
-#define R_SPARC_WDISP16         40\r
-#define R_SPARC_WDISP19         41\r
-#define R_SPARC_GLOB_JMP        42\r
-#define R_SPARC_7               43\r
-#define R_SPARC_5               44\r
-#define R_SPARC_6               45\r
-#define R_SPARC_DISP64          46\r
-#define R_SPARC_PLT64           47\r
-#define R_SPARC_HIX22           48\r
-#define R_SPARC_LOX10           49\r
-#define R_SPARC_H44             50\r
-#define R_SPARC_M44             51\r
-#define R_SPARC_L44             52\r
-#define R_SPARC_REGISTER        53\r
-#define R_SPARC_UA64            54\r
-#define R_SPARC_UA16            55\r
-#define R_SPARC_TLS_GD_HI22     56\r
-#define R_SPARC_TLS_GD_LO10     57\r
-#define R_SPARC_TLS_GD_ADD      58\r
-#define R_SPARC_TLS_GD_CALL     59\r
-#define R_SPARC_TLS_LDM_HI22    60\r
-#define R_SPARC_TLS_LDM_LO10    61\r
-#define R_SPARC_TLS_LDM_ADD     62\r
-#define R_SPARC_TLS_LDM_CALL    63\r
-#define R_SPARC_TLS_LDO_HIX22   64\r
-#define R_SPARC_TLS_LDO_LOX10   65\r
-#define R_SPARC_TLS_LDO_ADD     66\r
-#define R_SPARC_TLS_IE_HI22     67\r
-#define R_SPARC_TLS_IE_LO10     68\r
-#define R_SPARC_TLS_IE_LD       69\r
-#define R_SPARC_TLS_IE_LDX      70\r
-#define R_SPARC_TLS_IE_ADD      71\r
-#define R_SPARC_TLS_LE_HIX22    72\r
-#define R_SPARC_TLS_LE_LOX10    73\r
-#define R_SPARC_TLS_DTPMOD32    74\r
-#define R_SPARC_TLS_DTPMOD64    75\r
-#define R_SPARC_TLS_DTPOFF32    76\r
-#define R_SPARC_TLS_DTPOFF64    77\r
-#define R_SPARC_TLS_TPOFF32     78\r
-#define R_SPARC_TLS_TPOFF64     79\r
-\r
-#define R_X86_64_NONE           0       /* No relocation. */\r
-#define R_X86_64_64             1       /* Add 64 bit symbol value. */\r
-#define R_X86_64_PC32           2       /* PC-relative 32 bit signed sym value. */\r
-#define R_X86_64_GOT32          3       /* PC-relative 32 bit GOT offset. */\r
-#define R_X86_64_PLT32          4       /* PC-relative 32 bit PLT offset. */\r
-#define R_X86_64_COPY           5       /* Copy data from shared object. */\r
-#define R_X86_64_GLOB_DAT       6       /* Set GOT entry to data address. */\r
-#define R_X86_64_JMP_SLOT       7       /* Set GOT entry to code address. */\r
-#define R_X86_64_RELATIVE       8       /* Add load address of shared object. */\r
-#define R_X86_64_GOTPCREL       9       /* Add 32 bit signed pcrel offset to GOT. */\r
-#define R_X86_64_32             10      /* Add 32 bit zero extended symbol value */\r
-#define R_X86_64_32S            11      /* Add 32 bit sign extended symbol value */\r
-#define R_X86_64_16             12      /* Add 16 bit zero extended symbol value */\r
-#define R_X86_64_PC16           13      /* Add 16 bit signed extended pc relative symbol value */\r
-#define R_X86_64_8              14      /* Add 8 bit zero extended symbol value */\r
-#define R_X86_64_PC8            15      /* Add 8 bit signed extended pc relative symbol value */\r
-#define R_X86_64_DTPMOD64       16      /* ID of module containing symbol */\r
-#define R_X86_64_DTPOFF64       17      /* Offset in TLS block */\r
-#define R_X86_64_TPOFF64        18      /* Offset in static TLS block */\r
-#define R_X86_64_TLSGD          19      /* PC relative offset to GD GOT entry */\r
-#define R_X86_64_TLSLD          20      /* PC relative offset to LD GOT entry */\r
-#define R_X86_64_DTPOFF32       21      /* Offset in TLS block */\r
-#define R_X86_64_GOTTPOFF       22      /* PC relative offset to IE GOT entry */\r
-#define R_X86_64_TPOFF32        23      /* Offset in static TLS block */\r
-\r
-\r
-#endif /* !_SYS_ELF_COMMON_H_ */\r