]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/CCode/Source/GenBsfFixup/GenBsfFixup.c
Retiring the ANT/JAVA build and removing the older EDK II packages that required...
[mirror_edk2.git] / Tools / CCode / Source / GenBsfFixup / GenBsfFixup.c
diff --git a/Tools/CCode/Source/GenBsfFixup/GenBsfFixup.c b/Tools/CCode/Source/GenBsfFixup/GenBsfFixup.c
deleted file mode 100644 (file)
index 6082b4d..0000000
+++ /dev/null
@@ -1,524 +0,0 @@
-/*++\r
-\r
-Copyright (c)  1999 - 2006 Intel Corporation. All rights reserved\r
-This software and associated documentation (if any) is furnished\r
-under a license and may only be used or copied in accordance\r
-with the terms of the license. Except as permitted by such\r
-license, no part of this software or documentation may be\r
-reproduced, stored in a retrieval system, or transmitted in any\r
-form or by any means without the express written consent of\r
-Intel Corporation.\r
-\r
-\r
-Module Name:\r
-\r
-  GenBsfFixup.c\r
-\r
-Abstract:\r
-\r
-  Utility to Fixup the SEC component for IA32.  This is an \r
-  interim tool in place of the full GenBsfImage support for \r
-  IA32.\r
-  This tool supports the Synch3 update\r
-\r
---*/\r
-\r
-#include "BaseTypes.h"\r
-#include "UefiBaseTypes.h"\r
-#include "EfiImage.h"\r
-#include "FirmwareVolumeHeader.h"\r
-#include "FirmwareVolumeImageFormat.h"\r
-#include "ParseInf.h"\r
-#include "CommonLib.h"\r
-#include "FirmwareFileSystem.h"\r
-#include "FvLib.h"\r
-#include <stdio.h>\r
-#include <stdlib.h>\r
-#include <string.h>\r
-#include <assert.h>\r
-\r
-//\r
-// BugBug -- this port to the new FFS is really weird.\r
-//           A lot of the file-header stuff has been ported, but\r
-//           not the section information.\r
-//\r
-\r
-#define UTILITY_NAME "GenBsfFixup"\r
-#define UTILITY_MAJOR_VERSION 0\r
-#define UTILITY_MINOR_VERSION 1\r
-\r
-UINT32  gFixup;\r
-\r
-UINT32\r
-GetOccupiedSize (\r
-  IN UINT32  ActualSize,\r
-  IN UINT32  Alignment\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  GC_TODO: Add function description\r
-\r
-Arguments:\r
-\r
-  ActualSize  - GC_TODO: add argument description\r
-  Alignment   - GC_TODO: add argument description\r
-\r
-Returns:\r
-\r
-  GC_TODO: add return values\r
-\r
---*/\r
-{\r
-  UINT32  OccupiedSize;\r
-\r
-  OccupiedSize = ActualSize;\r
-  while ((OccupiedSize & (Alignment - 1)) != 0) {\r
-    OccupiedSize++;\r
-  }\r
-\r
-  return OccupiedSize;\r
-}\r
-\r
-static\r
-void\r
-Version (\r
-  VOID\r
-  )\r
-{\r
-  printf ("%s v%d.%d -EDK Utility to Fixup the SEC component for IA32.\n", UTILITY_NAME, UTILITY_MAJOR_VERSION, UTILITY_MINOR_VERSION);\r
-  printf ("Copyright (c) 1999-2006 Intel Corporation. All rights reserved.\n");\r
-}\r
-\r
-\r
-VOID\r
-Usage (\r
-  VOID\r
-  )\r
-{\r
-  Version();\r
-  printf ("\nUsage: " UTILITY_NAME " FvVolumeImageFile AddressOfFvInMemory OffsetOfFixup OutputFileName \n");\r
-}\r
-\r
-int\r
-ReadHeader (\r
-  FILE    *In,\r
-  UINT32  *FvSize\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Reads in Firmware Volume information from the volume header file.\r
-\r
-Arguments:\r
-\r
-  In: Firmware Volume header file to read from\r
-  FvSize: Size of Firmware Volume\r
-\r
-Returns:\r
-\r
-  int: Number of bytes read\r
-\r
---*/\r
-{\r
-  EFI_FIRMWARE_VOLUME_HEADER  VolumeHeader;\r
-  EFI_FV_BLOCK_MAP_ENTRY      BlockMap;\r
-  INT32                       SigTemp[2];\r
-  INT32                       Invert;\r
-  INT32                       bytesread;\r
-  UINT32                      size;\r
-\r
-  size      = 0;\r
-  Invert    = 0;\r
-  bytesread = 0;\r
-\r
-  if (In == NULL) {\r
-    printf ("Error: Input file is NULL.\n");\r
-    return -1;\r
-  }\r
-\r
-  fread (&VolumeHeader, sizeof (EFI_FIRMWARE_VOLUME_HEADER) - sizeof (EFI_FV_BLOCK_MAP_ENTRY), 1, In);\r
-  bytesread   = sizeof (EFI_FIRMWARE_VOLUME_HEADER) - sizeof (EFI_FV_BLOCK_MAP_ENTRY);\r
-  SigTemp[0]  = VolumeHeader.Signature;\r
-  SigTemp[1]  = 0;\r
-\r
-  if (VolumeHeader.Attributes & EFI_FVB_ERASE_POLARITY) {\r
-    Invert = 1;\r
-  }\r
-\r
-  do {\r
-    fread (&BlockMap, sizeof (EFI_FV_BLOCK_MAP_ENTRY), 1, In);\r
-    bytesread += sizeof (EFI_FV_BLOCK_MAP_ENTRY);\r
-\r
-    if (BlockMap.NumBlocks != 0) {\r
-      size += BlockMap.NumBlocks * BlockMap.BlockLength;\r
-    }\r
-\r
-  } while (BlockMap.NumBlocks != 0);\r
-\r
-  *FvSize = size;\r
-  rewind (In);\r
-\r
-  if (Invert == 1) {\r
-    bytesread *= -1;\r
-  }\r
-\r
-  return bytesread;\r
-}\r
-\r
-UINT32\r
-GetSectionLength (\r
-  IN  UINT32  *Length\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Converts a UINT8[3] array to a UINT32\r
-\r
-Arguments:\r
-\r
-  Length        A pointer to a 3 byte array\r
-\r
-Returns:\r
-\r
-  UINT32:       The length.\r
-\r
---*/\r
-{\r
-  return *Length & 0x00FFFFFF;\r
-}\r
-\r
-int\r
-Readfile (\r
-  UINT8   *FvImage,\r
-  int     bytes,\r
-  int     Invert\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  GC_TODO: Add function description\r
-\r
-Arguments:\r
-\r
-  FvImage - GC_TODO: add argument description\r
-  bytes   - GC_TODO: add argument description\r
-  Invert  - GC_TODO: add argument description\r
-\r
-Returns:\r
-\r
-  GC_TODO: add return values\r
-\r
---*/\r
-{\r
-  UINT32                    FileLength;\r
-  UINT32                    OccupiedFileLength;\r
-  EFI_FFS_FILE_HEADER       *FileHeader;\r
-  UINT8                     FileState;\r
-  UINT8                     Checksum;\r
-  UINT8                     *Ptr;\r
-  UINT32                    SectionLength;\r
-  EFI_COMMON_SECTION_HEADER *SectionHeader;\r
-  EFI_IMAGE_NT_HEADERS      *PeHeader;\r
-  UINT32                    PeiCoreOffset;\r
-\r
-  Ptr         = FvImage + bytes;\r
-\r
-  FileHeader  = (EFI_FFS_FILE_HEADER *) Ptr;\r
-\r
-  FileState   = GetFileState ((UINT8) Invert, FileHeader);\r
-\r
-  switch (FileState) {\r
-  case EFI_FILE_HEADER_CONSTRUCTION:\r
-  case EFI_FILE_HEADER_INVALID:\r
-    return sizeof (EFI_FFS_FILE_HEADER);\r
-\r
-  case EFI_FILE_HEADER_VALID:\r
-    Checksum  = CalculateSum8 ((UINT8 *) FileHeader, sizeof (EFI_FFS_FILE_HEADER));\r
-    Checksum  = (UINT8) (Checksum - FileHeader->IntegrityCheck.Checksum.File);\r
-    Checksum  = (UINT8) (Checksum - FileHeader->State);\r
-    if (Checksum != 0) {\r
-      return -1;\r
-    }\r
-    //\r
-    // Now do the fixup stuff - begin\r
-    //\r
-    if (FileHeader->Type == EFI_FV_FILETYPE_PEI_CORE) {\r
-      SectionHeader = (EFI_COMMON_SECTION_HEADER *) FileHeader + sizeof (EFI_FFS_FILE_HEADER);\r
-      SectionLength = GetSectionLength ((UINT32 *) &SectionHeader->Size[0]);\r
-\r
-      printf ("Section length is 0x%X\n", SectionLength);\r
-\r
-      if (SectionHeader->Type == EFI_SECTION_PE32) {\r
-\r
-        gFixup    = bytes + sizeof (EFI_FFS_FILE_HEADER) + sizeof (EFI_COMMON_SECTION_HEADER);\r
-\r
-        PeHeader  = (EFI_IMAGE_NT_HEADERS *) Ptr + sizeof (EFI_FFS_FILE_HEADER) + sizeof (EFI_COMMON_SECTION_HEADER);\r
-\r
-        if (((EFI_IMAGE_DOS_HEADER *) PeHeader)->e_magic == EFI_IMAGE_DOS_SIGNATURE) {\r
-          //\r
-          // DOS image header is present, so read the PE header after the DOS image header\r
-          //\r
-          PeHeader = (EFI_IMAGE_NT_HEADERS *) ((UINTN) PeHeader + (UINTN) ((((EFI_IMAGE_DOS_HEADER *) PeHeader)->e_lfanew) & 0x0ffff));\r
-\r
-        }\r
-\r
-        PeiCoreOffset = (UINTN) ((UINTN) (PeHeader->OptionalHeader.AddressOfEntryPoint & 0x0ffffffff));\r
-\r
-        gFixup += PeiCoreOffset;\r
-      }\r
-    }\r
-\r
-    FileLength          = GetLength (FileHeader->Size);\r
-    OccupiedFileLength  = GetOccupiedSize (FileLength, 8);\r
-    return OccupiedFileLength;\r
-\r
-  case EFI_FILE_DATA_VALID:\r
-    //\r
-    // Calculate header checksum\r
-    //\r
-    Checksum  = CalculateSum8 ((UINT8 *) FileHeader, sizeof (EFI_FFS_FILE_HEADER));\r
-    Checksum  = (UINT8) (Checksum - FileHeader->IntegrityCheck.Checksum.File);\r
-    Checksum  = (UINT8) (Checksum - FileHeader->State);\r
-    if (Checksum != 0) {\r
-      return -1;\r
-    }\r
-    //\r
-    // Determine file length\r
-    //\r
-    FileLength          = GetLength (FileHeader->Size);\r
-    OccupiedFileLength  = GetOccupiedSize (FileLength, 8);\r
-\r
-    //\r
-    // Determine if file checksum is valid or fixed\r
-    //\r
-    if (FileHeader->Attributes & FFS_ATTRIB_CHECKSUM) {\r
-      Checksum  = CalculateSum8 (Ptr, FileLength);\r
-      Checksum  = (UINT8) (Checksum - FileHeader->State);\r
-      if (Checksum != 0) {\r
-        return -1;\r
-      }\r
-    } else {\r
-      if (FileHeader->IntegrityCheck.Checksum.File != FFS_FIXED_CHECKSUM) {\r
-        return -1;\r
-      }\r
-    }\r
-    break;\r
-\r
-  case EFI_FILE_MARKED_FOR_UPDATE:\r
-  case EFI_FILE_DELETED:\r
-    //\r
-    // Calculate header checksum\r
-    //\r
-    Checksum  = CalculateSum8 ((UINT8 *) FileHeader, sizeof (EFI_FFS_FILE_HEADER));\r
-    Checksum  = (UINT8) (Checksum - FileHeader->IntegrityCheck.Checksum.File);\r
-    Checksum  = (UINT8) (Checksum - FileHeader->State);\r
-    if (Checksum != 0) {\r
-      return -1;\r
-    }\r
-    //\r
-    // Determine file length\r
-    //\r
-    FileLength          = GetLength (FileHeader->Size);\r
-    OccupiedFileLength  = GetOccupiedSize (FileLength, 8);\r
-\r
-    //\r
-    // Determine if file checksum is valid or fixed\r
-    //\r
-    if (FileHeader->Attributes & FFS_ATTRIB_CHECKSUM) {\r
-      Checksum  = CalculateSum8 (Ptr, FileLength);\r
-      Checksum  = (UINT8) (Checksum - FileHeader->State);\r
-      if (Checksum != 0) {\r
-        return -1;\r
-      }\r
-    } else {\r
-      if (FileHeader->IntegrityCheck.Checksum.File != FFS_FIXED_CHECKSUM) {\r
-        return -1;\r
-      }\r
-    }\r
-\r
-    return OccupiedFileLength;\r
-\r
-  default:\r
-    return sizeof (EFI_FFS_FILE_HEADER);\r
-  }\r
-\r
-  return OccupiedFileLength;\r
-}\r
-\r
-int\r
-main (\r
-  int argc,\r
-  char*argv[]\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Runs GenBsfFixup\r
-\r
-Arguments:\r
-\r
-  argc: number of command line arguments\r
-\r
-  arg[0] = This file name\r
-  arg[1] = Firmware Volume Name\r
-  arg[2] = Base Address to relocate\r
-  arg[3] = Relative offset of the fixup to perform\r
-  arg[4] = Output File Name\r
-\r
-Returns:\r
-    \r
-  int: 0 code success, -1 code failure\r
-\r
---*/\r
-{\r
-  FILE        *In;\r
-  FILE        *Out;\r
-  int         ByteStart;\r
-  int         Invert;\r
-  int         Index;\r
-  int         cnt;\r
-  UINT8       *FvImage;\r
-  int         ByteRead;\r
-  UINT32      FvSize;\r
-  UINT64      delta;\r
-  UINT32      Idx;\r
-  UINT64      FvOffset;\r
-  EFI_STATUS  Status;\r
-\r
-  Index   = 0;\r
-  Invert  = 0;\r
\r
-  if (argc == 1) {\r
-    Usage();\r
-    return -1;\r
-  }\r
-  \r
-  if ((strcmp(argv[1], "-h") == 0) || (strcmp(argv[1], "--help") == 0) ||\r
-      (strcmp(argv[1], "-?") == 0) || (strcmp(argv[1], "/?") == 0)) {\r
-    Usage();\r
-    return -1;\r
-  }\r
-  \r
-  if ((strcmp(argv[1], "-V") == 0) || (strcmp(argv[1], "--version") == 0)) {\r
-    Version();\r
-    return -1;\r
-  }\r
\r
-  if (argc != 5) {\r
-    Usage();\r
-    return -1;\r
-  }\r
-\r
-  In = fopen (argv[1], "rb");\r
-\r
-  if (In == NULL) {\r
-    printf ("Unable to open FV image file \"%s\"\n", argv[1]);\r
-    return -1;\r
-  }\r
-\r
-  ByteStart = ReadHeader (In, &FvSize);\r
-\r
-  if (ByteStart < 0) {\r
-    Invert = 1;\r
-    ByteStart *= -1;\r
-  }\r
-\r
-  FvImage = malloc (FvSize);\r
-  if (FvImage == NULL) {\r
-    printf ("Cannot allocate memory\n");\r
-    fclose (In);\r
-    return -1;\r
-  }\r
-\r
-  ByteRead = fread (FvImage, 1, FvSize, In);\r
-\r
-  if ((unsigned int) ByteRead != FvSize) {\r
-    printf ("Read File error\n");\r
-    fclose (In);\r
-    return -1;\r
-  }\r
-\r
-  cnt = 0;\r
-  while ((unsigned int) ByteStart < FvSize && cnt != -1) {\r
-    cnt = Readfile (FvImage, ByteStart, Invert);\r
-\r
-    if (cnt != -1) {\r
-      ByteStart += cnt;\r
-    }\r
-\r
-    if (cnt != sizeof (EFI_FFS_FILE_HEADER)) {\r
-      Index++;\r
-    }\r
-  }\r
-\r
-  if (cnt == -1) {\r
-    printf ("Firmware Volume image corrupted\n");\r
-    return -1;\r
-  }\r
-\r
-  fclose (In);\r
-\r
-  Out = fopen (argv[4], "wb");\r
-\r
-  if (Out == NULL) {\r
-    printf ("Unable to open FV image file \"%s\"\n", argv[4]);\r
-    return -1;\r
-  }\r
-\r
-  In = fopen (argv[1], "rb");\r
-\r
-  if (In == NULL) {\r
-    printf ("Unable to open FV image file \"%s\"\n", argv[1]);\r
-    return -1;\r
-  }\r
-\r
-  if (gFixup != 0) {\r
-\r
-    printf ("Fixup of 0x%X\n", gFixup);\r
-\r
-    Status = AsciiStringToUint64 (argv[2], TRUE, &FvOffset);\r
-\r
-    gFixup += (UINT32) FvOffset;\r
-\r
-    ByteStart = ReadHeader (In, &FvSize);\r
-\r
-    Readfile (FvImage, ByteStart, Invert);\r
-\r
-    cnt     = 0;\r
-    Status  = AsciiStringToUint64 (argv[3], TRUE, &delta);\r
-\r
-    fclose (In);\r
-    In = fopen (argv[1], "rb");\r
-\r
-    if (In == NULL) {\r
-      printf ("Unable to open FV image file \"%s\"\n", argv[1]);\r
-      return -1;\r
-    }\r
-\r
-    for (Idx = 0; Idx < delta - FvOffset; Idx++) {\r
-      fputc (fgetc (In), Out);\r
-    }\r
-\r
-    fwrite (&gFixup, sizeof (UINT32), 1, Out);\r
-    fseek (In, sizeof (UINT32), SEEK_CUR);\r
-\r
-    for (Idx = 0; Idx < FvSize - (delta - FvOffset) - sizeof (UINT32); Idx++) {\r
-      fputc (fgetc (In), Out);\r
-    }\r
-\r
-    fclose (In);\r
-    fclose (Out);\r
-  } else {\r
-    printf ("There was no fixup to perform\n");\r
-  }\r
-\r
-  free (FvImage);\r
-\r
-  return 0;\r
-}\r