More renames for Tool Packages
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@1675 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
362
Tools/CodeTools/Source/SecFixup/SecFixup.c
Normal file
362
Tools/CodeTools/Source/SecFixup/SecFixup.c
Normal file
@ -0,0 +1,362 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 1999-2006 Intel Corporation. All rights reserved
|
||||
This program and the accompanying materials are licensed and made available
|
||||
under the terms and conditions of the BSD License which accompanies this
|
||||
distribution. The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
|
||||
Module Name:
|
||||
|
||||
SecFixup.c
|
||||
|
||||
Abstract:
|
||||
|
||||
This utility is part of build process for IA32 SEC FFS file.
|
||||
|
||||
It fixup the reset vector data. The reset vector data binary file
|
||||
will be wrapped as a RAW section and be located immediately after
|
||||
the PE/TE section.
|
||||
|
||||
The SEC EXE file can be either PE or TE file.
|
||||
|
||||
--*/
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include <Common/UefiBaseTypes.h>
|
||||
#include <Common/EfiImage.h>
|
||||
#include <Common/FirmwareVolumeImageFormat.h>
|
||||
|
||||
#include "EfiUtilityMsgs.c"
|
||||
#include "SecFixup.h"
|
||||
|
||||
VOID
|
||||
PrintUtilityInfo (
|
||||
VOID
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
Displays the standard utility information to SDTOUT
|
||||
|
||||
Arguments:
|
||||
|
||||
None
|
||||
|
||||
Returns:
|
||||
|
||||
None
|
||||
|
||||
--*/
|
||||
{
|
||||
printf (
|
||||
"%s - Tiano IA32 SEC Fixup Utility."" Version %i.%i\n\n",
|
||||
UTILITY_NAME,
|
||||
UTILITY_MAJOR_VERSION,
|
||||
UTILITY_MINOR_VERSION
|
||||
);
|
||||
}
|
||||
|
||||
VOID
|
||||
PrintUsage (
|
||||
VOID
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
Displays the utility usage syntax to STDOUT
|
||||
|
||||
Arguments:
|
||||
|
||||
None
|
||||
|
||||
Returns:
|
||||
|
||||
None
|
||||
|
||||
--*/
|
||||
{
|
||||
printf ("Usage: %s SecExeFile ResetVectorDataFile OutputFile\n", UTILITY_NAME);
|
||||
printf (" Where:\n");
|
||||
printf ("\tSecExeFile - Name of the IA32 SEC EXE file.\n");
|
||||
printf ("\tResetVectorDataFile - Name of the reset vector data binary file.\n");
|
||||
printf ("\tOutputFileName - Name of the output file.\n\n");
|
||||
}
|
||||
|
||||
STATUS
|
||||
main (
|
||||
IN INTN argc,
|
||||
IN CHAR8 **argv
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
Main function.
|
||||
|
||||
Arguments:
|
||||
|
||||
argc - Number of command line parameters.
|
||||
argv - Array of pointers to parameter strings.
|
||||
|
||||
Returns:
|
||||
STATUS_SUCCESS - Utility exits successfully.
|
||||
STATUS_ERROR - Some error occurred during execution.
|
||||
|
||||
--*/
|
||||
{
|
||||
FILE *FpIn;
|
||||
|
||||
FILE *FpOut;
|
||||
UINT32 AddressOfEntryPoint;
|
||||
INT32 DestRel;
|
||||
STATUS Status;
|
||||
UINT32 SecFileSize;
|
||||
|
||||
SetUtilityName (UTILITY_NAME);
|
||||
|
||||
//
|
||||
// Display utility information
|
||||
//
|
||||
PrintUtilityInfo ();
|
||||
|
||||
//
|
||||
// Verify the correct number of arguments
|
||||
//
|
||||
if (argc != MAX_ARGS) {
|
||||
Error (NULL, 0, 0, "invalid number of input parameters specified", NULL);
|
||||
PrintUsage ();
|
||||
return STATUS_ERROR;
|
||||
}
|
||||
//
|
||||
// Open the SEC exe file
|
||||
//
|
||||
if ((FpIn = fopen (argv[1], "rb")) == NULL) {
|
||||
Error (NULL, 0, 0, "Unable to open file", argv[1]);
|
||||
return STATUS_ERROR;
|
||||
}
|
||||
//
|
||||
// Get the entry point of the EXE file
|
||||
//
|
||||
Status = GetEntryPoint (FpIn, &AddressOfEntryPoint);
|
||||
if (Status != STATUS_SUCCESS) {
|
||||
fclose (FpIn);
|
||||
return STATUS_ERROR;
|
||||
}
|
||||
//
|
||||
// Get the SEC file size
|
||||
//
|
||||
fseek (FpIn, 0, SEEK_END);
|
||||
SecFileSize = ftell (FpIn);
|
||||
|
||||
//
|
||||
// Close the SEC file
|
||||
//
|
||||
fclose (FpIn);
|
||||
|
||||
//
|
||||
// Open the reset vector data file
|
||||
//
|
||||
if ((FpIn = fopen (argv[2], "rb")) == NULL) {
|
||||
Error (NULL, 0, 0, "Unable to open file", argv[2]);
|
||||
return STATUS_ERROR;
|
||||
}
|
||||
//
|
||||
// Open the output file
|
||||
//
|
||||
if ((FpOut = fopen (argv[3], "w+b")) == NULL) {
|
||||
Error (NULL, 0, 0, "Unable to open file", argv[3]);
|
||||
fclose (FpIn);
|
||||
return STATUS_ERROR;
|
||||
}
|
||||
//
|
||||
// Copy the input file to the output file
|
||||
//
|
||||
if (CopyFile (FpIn, FpOut) != STATUS_SUCCESS) {
|
||||
fclose (FpIn);
|
||||
fclose (FpOut);
|
||||
return STATUS_ERROR;
|
||||
}
|
||||
//
|
||||
// Close the reset vector data file
|
||||
//
|
||||
fclose (FpIn);
|
||||
|
||||
//
|
||||
// Fix the destination relative in the jmp instruction
|
||||
// in the reset vector data structure
|
||||
//
|
||||
fseek (FpOut, -DEST_REL_OFFSET, SEEK_END);
|
||||
DestRel = AddressOfEntryPoint - (SecFileSize + sizeof (EFI_COMMON_SECTION_HEADER) + (UINT32) (ftell (FpOut)) + 2);
|
||||
if (DestRel <= -65536) {
|
||||
Error (NULL, 0, 0, "The SEC EXE file size is too big", NULL);
|
||||
fclose (FpOut);
|
||||
return STATUS_ERROR;
|
||||
}
|
||||
|
||||
if (fwrite (&DestRel, sizeof (UINT16), 1, FpOut) != 1) {
|
||||
Error (NULL, 0, 0, "Failed to write to the output file", NULL);
|
||||
fclose (FpOut);
|
||||
return STATUS_ERROR;
|
||||
}
|
||||
//
|
||||
// Close the output file
|
||||
//
|
||||
fclose (FpOut);
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
STATUS
|
||||
GetEntryPoint (
|
||||
IN FILE *ExeFile,
|
||||
OUT UINT32 *EntryPoint
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
Get the address of the entry point of a PE/TE file.
|
||||
|
||||
Arguments:
|
||||
|
||||
PeFile - File pointer to the specified PE/TE file.
|
||||
EntryPoint - Buffer for the address of the entry point to be returned.
|
||||
|
||||
Returns:
|
||||
STATUS_SUCCESS - Function completed successfully.
|
||||
STATUS_ERROR - Error occured.
|
||||
|
||||
--*/
|
||||
// GC_TODO: ExeFile - add argument and description to function comment
|
||||
{
|
||||
EFI_IMAGE_DOS_HEADER DosHeader;
|
||||
EFI_IMAGE_NT_HEADERS32 NtHeader;
|
||||
EFI_TE_IMAGE_HEADER TeHeader;
|
||||
|
||||
//
|
||||
// Check if it is a TE file
|
||||
//
|
||||
fseek (ExeFile, 0, SEEK_SET);
|
||||
//
|
||||
// Attempt to read the TE header
|
||||
//
|
||||
if (fread (&TeHeader, sizeof (TeHeader), 1, ExeFile) == 1) {
|
||||
if (TeHeader.Signature == EFI_TE_IMAGE_HEADER_SIGNATURE) {
|
||||
if (TeHeader.Machine != EFI_IMAGE_MACHINE_IA32) {
|
||||
Error (NULL, 0, 0, "The SEC file is PE but is not PE32 for IA32", NULL);
|
||||
return STATUS_ERROR;
|
||||
}
|
||||
|
||||
*EntryPoint = TeHeader.AddressOfEntryPoint + sizeof (EFI_TE_IMAGE_HEADER) - TeHeader.StrippedSize;
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
}
|
||||
//
|
||||
// Check if it is a PE file
|
||||
//
|
||||
fseek (ExeFile, 0, SEEK_SET);
|
||||
//
|
||||
// Attempt to read the DOS header
|
||||
//
|
||||
if (fread (&DosHeader, sizeof (DosHeader), 1, ExeFile) != 1) {
|
||||
goto InvalidFile;
|
||||
}
|
||||
//
|
||||
// Check the magic number
|
||||
//
|
||||
if (DosHeader.e_magic != EFI_IMAGE_DOS_SIGNATURE) {
|
||||
goto InvalidFile;
|
||||
}
|
||||
//
|
||||
// Position into the file and read the NT PE header
|
||||
//
|
||||
fseek (ExeFile, (long) DosHeader.e_lfanew, SEEK_SET);
|
||||
if (fread (&NtHeader, sizeof (NtHeader), 1, ExeFile) != 1) {
|
||||
goto InvalidFile;
|
||||
}
|
||||
//
|
||||
// Check the PE signature in the header
|
||||
//
|
||||
if (NtHeader.Signature != EFI_IMAGE_NT_SIGNATURE) {
|
||||
goto InvalidFile;
|
||||
}
|
||||
//
|
||||
// Make sure the PE file is PE32 for IA32
|
||||
//
|
||||
if (NtHeader.FileHeader.Machine != EFI_IMAGE_MACHINE_IA32 ||
|
||||
NtHeader.OptionalHeader.Magic != EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC
|
||||
) {
|
||||
Error (NULL, 0, 0, "The SEC file is PE but is not PE32 for IA32", NULL);
|
||||
return STATUS_ERROR;
|
||||
}
|
||||
//
|
||||
// Get the entry point from the optional header
|
||||
//
|
||||
*EntryPoint = NtHeader.OptionalHeader.AddressOfEntryPoint;
|
||||
return STATUS_SUCCESS;
|
||||
|
||||
InvalidFile:
|
||||
Error (NULL, 0, 0, "The SEC file is neither PE nor TE file", NULL);
|
||||
return STATUS_ERROR;
|
||||
}
|
||||
|
||||
STATUS
|
||||
CopyFile (
|
||||
FILE *FpIn,
|
||||
FILE *FpOut
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
Copy file.
|
||||
|
||||
Arguments:
|
||||
|
||||
FpIn - File pointer to the source file.
|
||||
FpOut - File pointer to the destination file.
|
||||
|
||||
Returns:
|
||||
STATUS_SUCCESS - Function completed successfully.
|
||||
STATUS_ERROR - Error occured.
|
||||
|
||||
--*/
|
||||
{
|
||||
INTN FileSize;
|
||||
|
||||
INTN Offset;
|
||||
|
||||
INTN Length;
|
||||
UINT8 Buffer[BUF_SIZE];
|
||||
|
||||
fseek (FpIn, 0, SEEK_END);
|
||||
FileSize = ftell (FpIn);
|
||||
|
||||
fseek (FpIn, 0, SEEK_SET);
|
||||
fseek (FpOut, 0, SEEK_SET);
|
||||
|
||||
Offset = 0;
|
||||
while (Offset < FileSize) {
|
||||
Length = sizeof (Buffer);
|
||||
if (FileSize - Offset < Length) {
|
||||
Length = FileSize - Offset;
|
||||
}
|
||||
|
||||
if (fread (Buffer, Length, 1, FpIn) != 1 || fwrite (Buffer, Length, 1, FpOut) != 1) {
|
||||
Error (NULL, 0, 0, "Copy file error", NULL);
|
||||
return STATUS_ERROR;
|
||||
}
|
||||
|
||||
Offset += Length;
|
||||
}
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
}
|
146
Tools/CodeTools/Source/SecFixup/SecFixup.h
Normal file
146
Tools/CodeTools/Source/SecFixup/SecFixup.h
Normal file
@ -0,0 +1,146 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 1999-2006 Intel Corporation. All rights reserved
|
||||
This program and the accompanying materials are licensed and made available
|
||||
under the terms and conditions of the BSD License which accompanies this
|
||||
distribution. The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
|
||||
Module Name:
|
||||
|
||||
SecFixup.h
|
||||
|
||||
Abstract:
|
||||
|
||||
Definitions for the SecFixup utility.
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef _SEC_FIXUP_H
|
||||
#define _SEC_FIXUP_H
|
||||
|
||||
//
|
||||
// Utility Name
|
||||
//
|
||||
#define UTILITY_NAME "SecFixup"
|
||||
|
||||
//
|
||||
// Utility version information
|
||||
//
|
||||
#define UTILITY_MAJOR_VERSION 0
|
||||
#define UTILITY_MINOR_VERSION 1
|
||||
#define UTILITY_DATE __DATE__
|
||||
|
||||
//
|
||||
// The maximum number of arguments accepted from the command line.
|
||||
//
|
||||
#define MAX_ARGS 4
|
||||
|
||||
#define DEST_REL_OFFSET 13
|
||||
#define BUF_SIZE (8 * 1024)
|
||||
|
||||
//
|
||||
// The function that displays general utility information
|
||||
//
|
||||
VOID
|
||||
PrintUtilityInfo (
|
||||
VOID
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
GC_TODO: Add function description
|
||||
|
||||
Arguments:
|
||||
|
||||
None
|
||||
|
||||
Returns:
|
||||
|
||||
GC_TODO: add return values
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
//
|
||||
// The function that displays the utility usage message.
|
||||
//
|
||||
VOID
|
||||
PrintUsage (
|
||||
VOID
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
GC_TODO: Add function description
|
||||
|
||||
Arguments:
|
||||
|
||||
None
|
||||
|
||||
Returns:
|
||||
|
||||
GC_TODO: add return values
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
//
|
||||
// The function that gets the entry point of a PE/TE file.
|
||||
//
|
||||
STATUS
|
||||
GetEntryPoint (
|
||||
IN FILE *ExeFile,
|
||||
OUT UINT32 *EntryPoint
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
GC_TODO: Add function description
|
||||
|
||||
Arguments:
|
||||
|
||||
ExeFile - GC_TODO: add argument description
|
||||
EntryPoint - GC_TODO: add argument description
|
||||
|
||||
Returns:
|
||||
|
||||
GC_TODO: add return values
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
//
|
||||
// The function that copies a file.
|
||||
//
|
||||
STATUS
|
||||
CopyFile (
|
||||
FILE *FpIn,
|
||||
FILE *FpOut
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
GC_TODO: Add function description
|
||||
|
||||
Arguments:
|
||||
|
||||
FpIn - GC_TODO: add argument description
|
||||
FpOut - GC_TODO: add argument description
|
||||
|
||||
Returns:
|
||||
|
||||
GC_TODO: add return values
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
#endif
|
70
Tools/CodeTools/Source/SecFixup/build.xml
Normal file
70
Tools/CodeTools/Source/SecFixup/build.xml
Normal file
@ -0,0 +1,70 @@
|
||||
<?xml version="1.0" ?>
|
||||
<!--
|
||||
Copyright (c) 2006, Intel Corporation
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
-->
|
||||
<project default="GenTool" basedir=".">
|
||||
<!--
|
||||
EDK SecFixup Tool
|
||||
Copyright (c) 2006, Intel Corporation
|
||||
-->
|
||||
<property name="ToolName" value="SecFixup"/>
|
||||
<property name="FileSet" value="*.c"/>
|
||||
|
||||
<taskdef resource="cpptasks.tasks"/>
|
||||
<typedef resource="cpptasks.types"/>
|
||||
<taskdef resource="net/sf/antcontrib/antlib.xml"/>
|
||||
|
||||
<property name="LINK_OUTPUT_TYPE" value="static"/>
|
||||
<property name="BUILD_DIR" value="${PACKAGE_DIR}/${ToolName}/tmp"/>
|
||||
|
||||
<target name="GenTool" depends="init, Tool">
|
||||
<echo message="The EDK Tool: ${ToolName} build has completed!"/>
|
||||
</target>
|
||||
|
||||
<target name="init">
|
||||
<echo message="Building the EDK Tool: ${ToolName}"/>
|
||||
<mkdir dir="${BUILD_DIR}"/>
|
||||
</target>
|
||||
|
||||
<target name="Tool" depends="init">
|
||||
<cc name="${ToolChain}" objdir="${BUILD_DIR}"
|
||||
outfile="${BIN_DIR}/${ToolName}"
|
||||
outtype="executable"
|
||||
optimize="speed"
|
||||
debug="true">
|
||||
|
||||
<fileset dir="${basedir}/${ToolName}"
|
||||
includes="${FileSet}"
|
||||
defaultexcludes="TRUE"
|
||||
excludes="*.xml *.inf"/>
|
||||
|
||||
<includepath path="${PACKAGE_DIR}/Include"/>
|
||||
<includepath path="${PACKAGE_DIR}/Include/${HostArch}"/>
|
||||
<includepath path="${PACKAGE_DIR}/Common"/>
|
||||
<libset dir="${LIB_DIR}" libs="CommonTools"/>
|
||||
</cc>
|
||||
</target>
|
||||
|
||||
<target name="clean">
|
||||
<echo message="Removing Intermediate Files Only"/>
|
||||
<delete>
|
||||
<fileset dir="${BUILD_DIR}" includes="*.obj"/>
|
||||
</delete>
|
||||
</target>
|
||||
|
||||
<target name="cleanall">
|
||||
<echo message="Removing Object Files and the Executable: ${ToolName}${ext_exe}"/>
|
||||
<delete failonerror="false" quiet="true" includeEmptyDirs="true">
|
||||
<fileset dir="${BUILD_DIR}"/>
|
||||
<fileset file="${BIN_DIR}/${ToolName}${ext_exe}"/>
|
||||
</delete>
|
||||
</target>
|
||||
|
||||
</project>
|
Reference in New Issue
Block a user