Changed the path of symbol file to be always the same as vtf file.
authorjwang36 <jwang36@7335b38e-4728-0410-8992-fb3ffe349368>
Fri, 9 May 2008 08:43:45 +0000 (08:43 +0000)
committerjwang36 <jwang36@7335b38e-4728-0410-8992-fb3ffe349368>
Fri, 9 May 2008 08:43:45 +0000 (08:43 +0000)
git-svn-id: https://buildtools.tianocore.org/svn/buildtools/trunk/BaseTools@1202 7335b38e-4728-0410-8992-fb3ffe349368

Source/C/GenVtf/GenVtf.c

index d6dabe6..6b336f7 100644 (file)
@@ -16,7 +16,7 @@ Module Name:
 \r
 Abstract:\r
 \r
-  This file contains functions required to generate a boot strap file (BSF) \r
+  This file contains functions required to generate a boot strap file (BSF)\r
   also known as the Volume Top File (VTF)\r
 \r
 **/\r
@@ -44,6 +44,7 @@ BOOLEAN     QuietMode = FALSE;
 BOOLEAN     VTF_OUTPUT = FALSE;\r
 CHAR8       *OutFileName1;\r
 CHAR8       *OutFileName2;\r
+CHAR8       *SymFileName;\r
 \r
 CHAR8           **TokenStr;\r
 CHAR8           **OrgStrTokPtr;\r
@@ -90,7 +91,7 @@ UINT32          BufferToTop           = 0;
 // IA32 Reset Vector Bin name\r
 //\r
 CHAR8           IA32BinFile[FILE_NAME_SIZE];\r
-  \r
+\r
 //\r
 // Function Implementations\r
 //\r
@@ -153,7 +154,7 @@ TrimLine (
 /*++\r
 Routine Description:\r
 \r
-  This function cleans up the line by removing all whitespace and \r
+  This function cleans up the line by removing all whitespace and\r
   comments\r
 \r
 Arguments:\r
@@ -171,7 +172,7 @@ Returns:
   CHAR8 *Ptr0;\r
   UINTN Index;\r
   UINTN Index2;\r
-  \r
+\r
   //\r
   // Change '#' to '//' for Comment style\r
   //\r
@@ -205,7 +206,7 @@ ValidLineCount (
 Routine Description:\r
 \r
   This function calculated number of valid lines in a input file.\r
-  \r
+\r
 Arguments:\r
 \r
   Fp    - Pointer to a file handle which has been opened.\r
@@ -231,15 +232,15 @@ ParseInputFile (
   IN  FILE *Fp\r
   )\r
 /*++\r
-  \r
+\r
 Routine Description:\r
 \r
   This function parses the input file and tokenize the string\r
-  \r
+\r
 Arguments:\r
 \r
   Fp    - Pointer to a file handle which has been opened.\r
-  \r
+\r
 Returns:\r
 \r
   None\r
@@ -279,7 +280,7 @@ Routine Description:
   This function intializes the relevant global variable which is being\r
   used to store the information retrieved from INF file.  This also initializes\r
   the VTF symbol file.\r
-  \r
+\r
 Arguments:\r
 \r
   None\r
@@ -302,7 +303,7 @@ Returns:
   memset (FileListPtr, 0, sizeof (PARSED_VTF_INFO));\r
   FileListPtr->NextVtfInfo = NULL;\r
 \r
-  remove (VTF_SYM_FILE);\r
+  remove (SymFileName);\r
   return EFI_SUCCESS;\r
 }\r
 \r
@@ -316,11 +317,11 @@ Routine Description:
 \r
   This function intializes the relevant global variable which is being\r
   used to store the information retrieved from INF file.\r
-  \r
+\r
 Arguments:\r
 \r
   VtfInfo  - A pointer to the VTF Info Structure\r
-  \r
+\r
 \r
 Returns:\r
 \r
@@ -424,7 +425,7 @@ Returns:
   SectionOptionFlag = 0;\r
   SectionCompFlag   = 0;\r
   TokenStr          = OrgStrTokPtr;\r
-  \r
+\r
   while (*TokenStr != NULL) {\r
     if (strnicmp (*TokenStr, "[OPTIONS]", 9) == 0) {\r
       SectionOptionFlag = 1;\r
@@ -480,22 +481,22 @@ GetVtfRelatedInfoFromInfFile (
   IN FILE *FilePointer\r
   )\r
 /*++\r
-  \r
+\r
 Routine Description:\r
 \r
   This function reads the input file, parse it and create a list of tokens\r
   which is parsed and used, to intialize the data related to VTF\r
-  \r
+\r
 Arguments:\r
 \r
   FileName  - FileName which needed to be read to parse data\r
 \r
 Returns:\r
-   \r
+\r
   EFI_ABORTED           - Error in opening file\r
   EFI_INVALID_PARAMETER - File doesn't contain any valid information\r
   EFI_OUT_OF_RESOURCES  - Malloc Failed\r
-  EFI_SUCCESS           - The function completed successfully \r
+  EFI_SUCCESS           - The function completed successfully\r
 \r
 --*/\r
 {\r
@@ -503,7 +504,7 @@ Returns:
   UINTN       Index;\r
   UINTN       Index1;\r
   EFI_STATUS  Status;\r
-  \r
+\r
   Status = EFI_SUCCESS;\r
   Fp = FilePointer;\r
   if (Fp == NULL) {\r
@@ -541,18 +542,18 @@ Returns:
 \r
   TokenStr  = OrgStrTokPtr;\r
   fseek (Fp, 0L, SEEK_SET);\r
\r
+\r
   Status = InitializeComps ();\r
 \r
   if (Status != EFI_SUCCESS) {\r
     goto ParseFileError;\r
   }\r
-  \r
+\r
   Status = ParseInputFile (Fp);\r
   if (Status != EFI_SUCCESS) {\r
     goto ParseFileError;\r
   }\r
-  \r
+\r
   InitializeInFileInfo ();\r
 \r
 ParseFileError:\r
@@ -573,14 +574,14 @@ GetRelativeAddressInVtfBuffer (
   IN      LOC_TYPE   LocType\r
   )\r
 /*++\r
-  \r
+\r
 Routine Description:\r
 \r
   This function checks for the address alignmnet for specified data boundary. In\r
-  case the address is not aligned, it returns FALSE and the amount of data in \r
-  terms of byte needed to adjust to get the boundary alignmnet. If data is \r
+  case the address is not aligned, it returns FALSE and the amount of data in\r
+  terms of byte needed to adjust to get the boundary alignmnet. If data is\r
   aligned, TRUE will be returned.\r
-  \r
+\r
 Arguments:\r
 \r
   Address             - The address of the flash map space\r
@@ -590,7 +591,7 @@ Arguments:
 \r
 Returns:\r
 \r
-    \r
+\r
 --*/\r
 {\r
   UINT64  TempAddress;\r
@@ -616,17 +617,17 @@ GetComponentVersionInfo (
 Routine Description:\r
 \r
   This function will extract the version information from File\r
-  \r
+\r
 Arguments:\r
 \r
   VtfInfo  - A Pointer to the VTF Info Structure\r
-  Buffer   - A Pointer to type UINT8 \r
+  Buffer   - A Pointer to type UINT8\r
 \r
 Returns:\r
\r
+\r
    EFI_SUCCESS           - The function completed successfully\r
    EFI_INVALID_PARAMETER - The parameter is invalid\r
-    \r
+\r
 --*/\r
 {\r
   UINT16      VersionInfo;\r
@@ -657,14 +658,14 @@ CheckAddressAlignment (
   IN OUT  UINT64  *AlignAdjustByte\r
   )\r
 /*++\r
-  \r
+\r
 Routine Description:\r
 \r
   This function checks for the address alignmnet for specified data boundary. In\r
-  case the address is not aligned, it returns FALSE and the amount of data in \r
-  terms of byte needed to adjust to get the boundary alignmnet. If data is \r
+  case the address is not aligned, it returns FALSE and the amount of data in\r
+  terms of byte needed to adjust to get the boundary alignmnet. If data is\r
   aligned, TRUE will be returned.\r
-  \r
+\r
 Arguments:\r
 \r
   Address              - Pointer to buffer containing byte data of component.\r
@@ -676,7 +677,7 @@ Returns:
   TRUE                 - Address is aligned to specific data size boundary\r
   FALSE                - Address in not aligned to specified data size boundary\r
                        - Add/Subtract AlignAdjustByte to aling the address.\r
-    \r
+\r
 --*/\r
 {\r
   //\r
@@ -698,19 +699,19 @@ GetFitTableStartAddress (
   IN OUT  FIT_TABLE   **FitTable\r
   )\r
 /*++\r
-  \r
+\r
 Routine Description:\r
 \r
   Get the FIT table start address in VTF Buffer\r
-  \r
+\r
 Arguments:\r
 \r
   FitTable    - Pointer to available fit table where new component can be added\r
-  \r
+\r
 Returns:\r
 \r
   EFI_SUCCESS - The function completed successfully\r
-    \r
+\r
 --*/\r
 {\r
   UINT64  FitTableAdd;\r
@@ -736,7 +737,7 @@ Returns:
   // Buffer.\r
   //\r
   GetRelativeAddressInVtfBuffer (FitTableAdd, &RelativeAddress, FIRST_VTF);\r
-  \r
+\r
   *FitTable = (FIT_TABLE *) RelativeAddress;\r
 \r
   return EFI_SUCCESS;\r
@@ -747,24 +748,24 @@ GetNextAvailableFitPtr (
   IN  FIT_TABLE   **FitPtr\r
   )\r
 /*++\r
-  \r
+\r
 Routine Description:\r
 \r
   Get the FIT table address and locate the free space in fit where we can add\r
   new component. In this process, this function locates the fit table using\r
-  Fit pointer in Itanium-based address map (as per Intel?Itanium(TM) SAL spec) \r
-  and locate the available location in FIT table to be used by new components. \r
-  If there are any Fit table which areg not being used contains ComponentType \r
+  Fit pointer in Itanium-based address map (as per Intel?Itanium(TM) SAL spec)\r
+  and locate the available location in FIT table to be used by new components.\r
+  If there are any Fit table which areg not being used contains ComponentType\r
   field as 0x7F. If needed we can change this and spec this out.\r
-  \r
+\r
 Arguments:\r
 \r
   FitPtr    - Pointer to available fit table where new component can be added\r
-  \r
+\r
 Returns:\r
 \r
   EFI_SUCCESS  - The function completed successfully\r
-    \r
+\r
 --*/\r
 {\r
   FIT_TABLE *TmpFitPtr;\r
@@ -822,10 +823,10 @@ Routine Description:
     Type in their incresing order.\r
 \r
 Arguments:\r
-    \r
+\r
     Arg1  -   Pointer to Arg1\r
     Arg2  -   Pointer to Arg2\r
-    \r
+\r
 Returns:\r
 \r
     None\r
@@ -853,7 +854,7 @@ Routine Description:
     Type in their incresing order.\r
 \r
 Arguments:\r
-    \r
+\r
     VOID\r
 \r
 Returns:\r
@@ -884,19 +885,19 @@ UpdateFitEntryForFwVolume (
   IN  UINT64  Size\r
   )\r
 /*++\r
-  \r
+\r
 Routine Description:\r
 \r
   This function updates the information about Firmware Volume  in FIT TABLE.\r
   This FIT table has to be immediately below the PAL_A Start and it contains\r
   component type and address information. Other information can't be\r
   created this time so we would need to fix it up..\r
-  \r
-  \r
+\r
+\r
 Arguments:\r
 \r
   Size   - Firmware Volume Size\r
-  \r
+\r
 Returns:\r
 \r
   VOID\r
@@ -956,21 +957,21 @@ UpdateFitEntryForNonVTFComp (
   IN  PARSED_VTF_INFO   *VtfInfo\r
   )\r
 /*++\r
-  \r
+\r
 Routine Description:\r
 \r
   This function updates the information about non VTF component in FIT TABLE.\r
   Since non VTF componets binaries are not part of VTF binary, we would still\r
   be required to update its location information in Firmware Volume, inside\r
   FIT table.\r
-  \r
+\r
 Arguments:\r
 \r
   VtfInfo    - Pointer to VTF Info Structure\r
-  \r
+\r
 Returns:\r
 \r
-  EFI_ABORTED  - The function fails to update the component in FIT  \r
+  EFI_ABORTED  - The function fails to update the component in FIT\r
   EFI_SUCCESS  - The function completed successfully\r
 \r
 --*/\r
@@ -1031,16 +1032,16 @@ UpdateEntryPoint (
   IN  UINT64            *CompStartAddress\r
   )\r
 /*++\r
-  \r
+\r
 Routine Description:\r
 \r
   This function updated the architectural entry point in IPF, SALE_ENTRY.\r
-  \r
+\r
 Arguments:\r
 \r
-  VtfInfo            - Pointer to VTF Info Structure \r
+  VtfInfo            - Pointer to VTF Info Structure\r
   CompStartAddress   - Pointer to Component Start Address\r
-  \r
+\r
 Returns:\r
 \r
   EFI_INVALID_PARAMETER  - The parameter is invalid\r
@@ -1094,7 +1095,7 @@ Returns:
   GetRelativeAddressInVtfBuffer (SalEntryAdd, &RelativeAddress, FIRST_VTF);\r
 \r
   memcpy ((VOID *) RelativeAddress, (VOID *) CompStartAddress, sizeof (UINT64));\r
-  \r
+\r
   if (Fp != NULL) {\r
     fclose (Fp);\r
   }\r
@@ -1107,27 +1108,27 @@ CreateAndUpdateComponent (
   IN  PARSED_VTF_INFO   *VtfInfo\r
   )\r
 /*++\r
-  \r
+\r
 Routine Description:\r
 \r
   This function reads the binary file for each components and update them\r
   in VTF Buffer as well as in FIT table. If the component is located in non\r
   VTF area, only the FIT table address will be updated\r
-  \r
+\r
 Arguments:\r
 \r
   VtfInfo    - Pointer to Parsed Info\r
-  \r
+\r
 Returns:\r
 \r
   EFI_SUCCESS      - The function completed successful\r
   EFI_ABORTED      - Aborted due to one of the many reasons like:\r
                       (a) Component Size greater than the specified size.\r
                       (b) Error opening files.\r
-            \r
+\r
   EFI_INVALID_PARAMETER     Value returned from call to UpdateEntryPoint()\r
   EFI_OUT_OF_RESOURCES      Memory allocation failure.\r
-  \r
+\r
 --*/\r
 {\r
   EFI_STATUS  Status;\r
@@ -1221,7 +1222,7 @@ Returns:
   if (!Aligncheck) {\r
     CompStartAddress -= NumAdjustByte;\r
   }\r
-  \r
+\r
   if (VtfInfo->LocationType == SECOND_VTF && SecondVTF == TRUE) {\r
     Vtf2LastStartAddress = CompStartAddress;\r
     Vtf2TotalSize += (UINT32) (FileSize + NumAdjustByte);\r
@@ -1265,7 +1266,7 @@ Returns:
   //\r
   // Update the SYM file for this component based on it's start address.\r
   //\r
-  Status = UpdateSymFile (CompStartAddress, VTF_SYM_FILE, VtfInfo->CompSymName);\r
+  Status = UpdateSymFile (CompStartAddress, SymFileName, VtfInfo->CompSymName);\r
   if (EFI_ERROR (Status)) {\r
 \r
     //\r
@@ -1292,28 +1293,28 @@ CreateAndUpdatePAL_A (
   IN  PARSED_VTF_INFO   *VtfInfo\r
   )\r
 /*++\r
-  \r
+\r
 Routine Description:\r
 \r
   This function reads the binary file for each components and update them\r
   in VTF Buffer as well as FIT table\r
-  \r
+\r
 Arguments:\r
 \r
   VtfInfo    - Pointer to Parsed Info\r
-  \r
+\r
 Returns:\r
 \r
   EFI_ABORTED           - Due to one of the following reasons:\r
                            (a)Error Opening File\r
                            (b)The PAL_A Size is more than specified size status\r
-                              One of the values mentioned below returned from \r
+                              One of the values mentioned below returned from\r
                               call to UpdateSymFile\r
   EFI_SUCCESS           - The function completed successfully.\r
   EFI_INVALID_PARAMETER - One of the input parameters was invalid.\r
   EFI_ABORTED           - An error occurred.UpdateSymFile\r
   EFI_OUT_OF_RESOURCES  - Memory allocation failed.\r
-   \r
+\r
 --*/\r
 {\r
   EFI_STATUS  Status;\r
@@ -1388,7 +1389,7 @@ Returns:
     Error (NULL, 0, 2000, "Invalid parameter", "Binary FileSize must be a multiple of 16.");\r
     return EFI_INVALID_PARAMETER;\r
   }\r
-  \r
+\r
   PalFitPtr->CompSize     = (UINT32) (FileSize / 16);\r
   PalFitPtr->CompVersion  = MAKE_VERSION (VtfInfo->MajorVer, VtfInfo->MinorVer);\r
   PalFitPtr->CvAndType    = CV_N_TYPE (VtfInfo->CheckSumRequired, VtfInfo->CompType);\r
@@ -1404,7 +1405,7 @@ Returns:
   //\r
   // Update the SYM file for this component based on it's start address.\r
   //\r
-  Status = UpdateSymFile (PalStartAddress, VTF_SYM_FILE, VtfInfo->CompSymName);\r
+  Status = UpdateSymFile (PalStartAddress, SymFileName, VtfInfo->CompSymName);\r
   if (EFI_ERROR (Status)) {\r
 \r
     //\r
@@ -1420,16 +1421,16 @@ CreateFitTableAndInitialize (
   IN  PARSED_VTF_INFO   *VtfInfo\r
   )\r
 /*++\r
-  \r
+\r
 Routine Description:\r
 \r
   This function creates and intializes FIT table which would be used to\r
   add component info inside this\r
-  \r
+\r
 Arguments:\r
 \r
   VtfInfo    - Pointer to Parsed Info\r
-  \r
+\r
 Returns:\r
 \r
   EFI_ABORTED  - Aborted due to no size information\r
@@ -1471,7 +1472,7 @@ Returns:
   // Update Fit Table with FIT Signature and FIT info in first 16 bytes.\r
   //\r
   FitStartPtr = (FIT_TABLE *) RelativeAddress;\r
-  \r
+\r
   strncpy ((CHAR8 *) &FitStartPtr->CompAddress, FIT_SIGNATURE, 8);  // "_FIT_   "\r
   assert (((VtfInfo->CompSize & 0x00FFFFFF) % 16) == 0);\r
   FitStartPtr->CompSize     = (VtfInfo->CompSize & 0x00FFFFFF) / 16;\r
@@ -1516,13 +1517,13 @@ WriteVtfBinary (
 Routine Description:\r
 \r
   Write Firmware Volume from memory to a file.\r
-  \r
+\r
 Arguments:\r
 \r
   FileName     - Output File Name which needed to be created/\r
   VtfSize      - FileSize\r
   LocType      - The type of the VTF\r
-  \r
+\r
 Returns:\r
 \r
   EFI_ABORTED - Returned due to one of the following resons:\r
@@ -1577,18 +1578,18 @@ UpdateVtfBuffer (
 Routine Description:\r
 \r
   Update the Firmware Volume Buffer with requested buffer data\r
-  \r
+\r
 Arguments:\r
 \r
   StartAddress   - StartAddress in buffer. This number will automatically\r
-                  point to right address in buffer where data needed \r
+                  point to right address in buffer where data needed\r
                   to be updated.\r
   Buffer         - Buffer pointer from data will be copied to memory mapped buffer.\r
   DataSize       - Size of the data needed to be copied.\r
   LocType        - The type of the VTF: First or Second\r
 \r
 Returns:\r
-  \r
+\r
   EFI_ABORTED  - The input parameter is error\r
   EFI_SUCCESS  - The function completed successfully\r
 \r
@@ -1615,7 +1616,7 @@ Returns:
     LocalBufferPtrToWrite = (UINT8 *) Vtf2EndBuffer;\r
     LocalBufferPtrToWrite -= (Fv2EndAddress - StartAddress);\r
   }\r
-  \r
+\r
   memcpy (LocalBufferPtrToWrite, Buffer, (UINTN) DataSize);\r
 \r
   return EFI_SUCCESS;\r
@@ -1624,14 +1625,14 @@ Returns:
 EFI_STATUS\r
 UpdateFfsHeader (\r
   IN UINT32         TotalVtfSize,\r
-  IN LOC_TYPE       LocType  \r
+  IN LOC_TYPE       LocType\r
   )\r
 /*++\r
 \r
 Routine Description:\r
 \r
   Update the Firmware Volume Buffer with requested buffer data\r
-  \r
+\r
 Arguments:\r
 \r
   TotalVtfSize     - Size of the VTF\r
@@ -1639,7 +1640,7 @@ Arguments:
   LocType          - The type of the VTF\r
 \r
 Returns:\r
-  \r
+\r
   EFI_SUCCESS            - The function completed successfully\r
   EFI_INVALID_PARAMETER  - The Ffs File Header Pointer is NULL\r
 \r
@@ -1702,15 +1703,15 @@ ValidateAddressAndSize (
 Routine Description:\r
 \r
   Update the Firmware Volume Buffer with requested buffer data\r
-  \r
+\r
 Arguments:\r
 \r
   BaseAddress    - Base address for the Fw Volume.\r
-  \r
+\r
   FwVolSize      - Total Size of the FwVolume to which VTF will be attached..\r
 \r
 Returns:\r
-  \r
+\r
   EFI_SUCCESS     - The function completed successfully\r
   EFI_UNSUPPORTED - The input parameter is error\r
 \r
@@ -1733,14 +1734,14 @@ UpdateIA32ResetVector (
 Routine Description:\r
 \r
   Update the 16 byte IA32 Reset vector to maintain the compatibility\r
-  \r
+\r
 Arguments:\r
 \r
   FileName     - Binary file name which contains the IA32 Reset vector info..\r
   FirstFwVSize - Total Size of the FwVolume to which VTF will be attached..\r
 \r
 Returns:\r
-  \r
+\r
   EFI_SUCCESS            - The function completed successfully\r
   EFI_ABORTED            - Invalid File Size\r
   EFI_INVALID_PARAMETER  - Bad File Name\r
@@ -1800,13 +1801,13 @@ CleanUpMemory (
 Routine Description:\r
 \r
   This function cleans up any allocated buffer\r
-  \r
+\r
 Arguments:\r
 \r
   NONE\r
 \r
 Returns:\r
-  \r
+\r
   NONE\r
 \r
 --*/\r
@@ -1842,15 +1843,15 @@ Routine Description:
 \r
   This function process the link list created during INF file parsing\r
   and create component in VTF and updates its info in FIT table\r
-  \r
+\r
 Arguments:\r
 \r
   Size   - Size of the Firmware Volume of which, this VTF belongs to.\r
 \r
 Returns:\r
-  \r
+\r
   EFI_UNSUPPORTED - Unknown FIT type\r
-  EFI_SUCCESS     - The function completed successfully                 \r
+  EFI_SUCCESS     - The function completed successfully\r
 \r
 --*/\r
 {\r
@@ -1935,23 +1936,23 @@ Routine Description:
 \r
 Arguments:\r
 \r
-  StartAddress1  - The start address of the first VTF      \r
+  StartAddress1  - The start address of the first VTF\r
   Size1          - The size of the first VTF\r
-  StartAddress2  - The start address of the second VTF      \r
+  StartAddress2  - The start address of the second VTF\r
   Size2          - The size of the second VTF\r
   fp             - The pointer to BSF inf file\r
 \r
 Returns:\r
\r
+\r
   EFI_OUT_OF_RESOURCES - Can not allocate memory\r
-  The return value can be any of the values \r
+  The return value can be any of the values\r
   returned by the calls to following functions:\r
       GetVtfRelatedInfoFromInfFile\r
       ProcessAndCreateVtf\r
       UpdateIA32ResetVector\r
       UpdateFfsHeader\r
       WriteVtfBinary\r
-  \r
+\r
 --*/\r
 {\r
   EFI_STATUS  Status;\r
@@ -1959,13 +1960,13 @@ Returns:
 \r
   Status          = EFI_UNSUPPORTED;\r
   VtfFP = fp;\r
-  \r
+\r
   if (StartAddress2 == 0) {\r
     SecondVTF = FALSE;\r
   } else {\r
     SecondVTF = TRUE;\r
   }\r
-  \r
+\r
   Fv1BaseAddress        = StartAddress1;\r
   Fv1EndAddress         = Fv1BaseAddress + Size1;\r
   if (Fv1EndAddress != 0x100000000 || Size1 < 0x100000) {\r
@@ -1977,7 +1978,7 @@ Returns:
     }\r
     Usage();\r
     return EFI_INVALID_PARAMETER;\r
-  }  \r
+  }\r
 \r
   //\r
   // The image buffer for the First VTF\r
@@ -1990,7 +1991,7 @@ Returns:
   memset (Vtf1Buffer, 0x00, (UINTN) Size1);\r
   Vtf1EndBuffer         = (UINT8 *) Vtf1Buffer + Size1;\r
   Vtf1LastStartAddress  = Fv1EndAddress | IPF_CACHE_BIT;\r
-  \r
+\r
   if (SecondVTF) {\r
     Fv2BaseAddress        = StartAddress2;\r
     Fv2EndAddress         = Fv2BaseAddress + Size2;\r
@@ -2002,7 +2003,7 @@ Returns:
       }\r
       Usage();\r
       return EFI_INVALID_PARAMETER;\r
-    }    \r
+    }\r
 \r
     //\r
     // The image buffer for the second VTF\r
@@ -2016,9 +2017,9 @@ Returns:
     Vtf2EndBuffer         = (UINT8 *) Vtf2Buffer + Size2;\r
     Vtf2LastStartAddress  = Fv2EndAddress | IPF_CACHE_BIT;\r
   }\r
-  \r
+\r
   Status = GetVtfRelatedInfoFromInfFile (VtfFP);\r
-   \r
+\r
   if (Status != EFI_SUCCESS) {\r
     Error (NULL, 0, 0003, "Error parsing file", "the input file.");\r
     CleanUpMemory ();\r
@@ -2030,7 +2031,7 @@ Returns:
     CleanUpMemory ();\r
     return Status;\r
   }\r
-  \r
+\r
   if (SectionOptionFlag) {\r
     Status = UpdateIA32ResetVector (IA32BinFile, Vtf1TotalSize);\r
     if (Status != EFI_SUCCESS) {\r
@@ -2043,7 +2044,7 @@ Returns:
   // Re arrange the FIT Table for Ascending order of their FIT Type..\r
   //\r
   SortFitTable ();\r
-  \r
+\r
   //\r
   // All components have been updated in FIT table. Now perform the FIT table\r
   // checksum. The following function will check if Checksum is required,\r
@@ -2075,13 +2076,13 @@ Returns:
       CleanUpMemory ();\r
       return Status;\r
     }\r
-    \r
+\r
     //\r
     // Update the VTF buffer into specified VTF binary file\r
     //\r
     Status  = WriteVtfBinary (OutFileName2, Vtf2TotalSize, SECOND_VTF);\r
   }\r
-  \r
+\r
   CleanUpMemory ();\r
 \r
   return Status;\r
@@ -2100,9 +2101,9 @@ Routine Description:
 Arguments:\r
 \r
   StartAddress - StartAddress for PEIM.....\r
-    \r
+\r
 Returns:\r
\r
+\r
   EFI_SUCCESS          - The function completed successfully\r
   EFI_ABORTED          - Error Opening File\r
   EFI_OUT_OF_RESOURCES - System out of resources for memory allocation.\r
@@ -2293,22 +2294,22 @@ CalculateFitTableChecksum (
   VOID\r
   )\r
 /*++\r
-  \r
+\r
 Routine Description:\r
 \r
   This function will perform byte checksum on the FIT table, if the the checksum required\r
   field is set to CheckSum required. If the checksum is not required then checksum byte\r
   will have value as 0;.\r
-  \r
+\r
 Arguments:\r
 \r
   NONE\r
-  \r
+\r
 Returns:\r
 \r
   Status       - Value returned by call to CalculateChecksum8 ()\r
   EFI_SUCCESS  - The function completed successfully\r
-    \r
+\r
 --*/\r
 {\r
   FIT_TABLE *TmpFitPtr;\r
@@ -2392,10 +2393,10 @@ Returns:
   // Summary usage\r
   //\r
   fprintf (stdout, "Usage: %s [options] <-f input_file> <-r BaseAddress> <-s FwVolumeSize>\n\n", UTILITY_NAME);\r
-  \r
+\r
   //\r
   // Copyright declaration\r
-  // \r
+  //\r
   fprintf (stdout, "Copyright (c) 2007, Intel Corporation. All rights reserved.\n\n");\r
 \r
   fprintf (stdout, "  -f  input_file\n\\r
@@ -2419,7 +2420,7 @@ Returns:
   fprintf (stdout, "  -q\n\\r
             Disable all messages except FATAL ERRORS.\n");\r
   fprintf (stdout, "  -d [#, 0-9]\n\\r
-            Enable debug messages at level #.\n");  \r
+            Enable debug messages at level #.\n");\r
 }\r
 \r
 EFI_STATUS\r
@@ -2444,7 +2445,7 @@ Returns:
 \r
   0   - No error conditions detected.\r
   1   - One or more of the input parameters is invalid.\r
-  2   - A resource required by the utility was unavailable.  \r
+  2   - A resource required by the utility was unavailable.\r
       - Most commonly this will be memory allocation or file creation.\r
   3   - GenFvImage.dll could not be loaded.\r
   4   - Error executing the GenFvImage dll.\r
@@ -2491,13 +2492,13 @@ Returns:
     Usage();\r
     return 0;\r
   }\r
-  \r
-  if ((strcmp(argv[1], "-h") == 0) || (strcmp(argv[1], "--help") == 0) || \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 0;\r
   }\r
-  \r
+\r
   if ((strcmp(argv[1], "--version") == 0)) {\r
     Version();\r
     return 0;\r
@@ -2528,7 +2529,7 @@ Returns:
     // Determine argument to read\r
     //\r
     switch (argv[Index][1]) {\r
-    \r
+\r
     case 'O':\r
     case 'o':\r
     //\r
@@ -2549,12 +2550,12 @@ Returns:
     OutFileName2 = (CHAR8 *)argv[Index+1];\r
     }\r
     break;\r
-    \r
+\r
     case 'F':\r
     case 'f':\r
     //\r
     // Get the input VTF file name\r
-    // \r
+    //\r
     VtfFileName = argv[Index+1];\r
     VtfFP = fopen(VtfFileName, "rb");\r
     if (VtfFP == NULL) {\r
@@ -2562,7 +2563,7 @@ Returns:
       goto ERROR;\r
     }\r
     break;\r
-    \r
+\r
     case 'R':\r
     case 'r':\r
       if (FirstRoundB) {\r
@@ -2641,7 +2642,7 @@ Returns:
   } else if (DebugMode) {\r
     SetPrintLevel(DebugLevel);\r
   }\r
-  \r
+\r
   if (VerboseMode) {\r
     VerboseMsg("%s tool start.\n", UTILITY_NAME);\r
   }\r
@@ -2653,6 +2654,28 @@ Returns:
          } else {\r
       OutFileName1 = VTF_OUTPUT_FILE1;\r
     }\r
+    SymFileName = VTF_SYM_FILE;\r
+  } else {\r
+    INTN OutFileNameLen = strlen(OutFileName1);\r
+    INTN Index;\r
+\r
+    for (Index = OutFileNameLen; Index > 0; --Index) {\r
+      if (OutFileName1[Index] == '/' || OutFileName1[Index] == '\\') {\r
+        break;\r
+      }\r
+    }\r
+    if (Index == 0) {\r
+      SymFileName = VTF_SYM_FILE;\r
+    } else {\r
+      INTN SymFileNameLen = Index + 1 + strlen(VTF_SYM_FILE);\r
+      SymFileName = malloc(SymFileNameLen + 1);\r
+      memcpy(SymFileName, OutFileName1, Index + 1);\r
+      memcpy(SymFileName + Index + 1, VTF_SYM_FILE, strlen(VTF_SYM_FILE));\r
+      SymFileName[SymFileNameLen] = '\0';\r
+    }\r
+    if (DebugMode) {\r
+      DebugMsg(UTILITY_NAME, 0, DebugLevel, SymFileName);\r
+    }\r
   }\r
 \r
   //\r