1. PostCodeLib.
Rename BasePostCodeLib80 to BasePostCodeLibPort80. Fix typos in macro POST_CODE() and POST_CODE_WITH_DESCRIPTION() 2. DebugLib Change the parameter type of LineNumber of DebugAssert() from “INTN” to “UINTN” to follow MWG. Add type cast “(EFI_GUID *)” in macro ASSERT_PROTCOL_ALREADY_INSTALLED () to follow MWG. 3. BasePeCoffLib/ Add library function header for all the interfaces in MWG. Add missing ASSERT()s. 4. PciLib Add ASSERT()s in PciRead/WriteBuffer() to check cross PCI function access. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@557 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@@ -34,7 +34,7 @@ PeCoffLoaderCheckImageType (
|
||||
);
|
||||
|
||||
STATIC
|
||||
VOID *
|
||||
VOID *
|
||||
PeCoffLoaderImageAddress (
|
||||
IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext,
|
||||
IN UINTN Address
|
||||
@@ -53,15 +53,12 @@ PeCoffLoaderRelocateImageEx (
|
||||
/**
|
||||
Retrieves the PE or TE Header from a PE/COFF or TE image.
|
||||
|
||||
@param ImageContext The context of the image being loaded.
|
||||
|
||||
@param PeHdr The buffer in which to return the PE header.
|
||||
|
||||
@param TeHdr The buffer in which to return the TE header.
|
||||
@param ImageContext The context of the image being loaded.
|
||||
@param PeHdr The buffer in which to return the PE header.
|
||||
@param TeHdr The buffer in which to return the TE header.
|
||||
|
||||
@return
|
||||
RETURN_SUCCESS if the PE or TE Header is read,
|
||||
Otherwise, the error status from reading the PE/COFF or TE image using the ImageRead function.
|
||||
@retval RETURN_SUCCESS The PE or TE Header is read.
|
||||
@retval Other The error status from reading the PE/COFF or TE image using the ImageRead function.
|
||||
|
||||
**/
|
||||
STATIC
|
||||
@@ -72,7 +69,7 @@ PeCoffLoaderGetPeHeader (
|
||||
OUT EFI_TE_IMAGE_HEADER *TeHdr
|
||||
)
|
||||
{
|
||||
RETURN_STATUS Status;
|
||||
RETURN_STATUS Status;
|
||||
EFI_IMAGE_DOS_HEADER DosHdr;
|
||||
UINTN Size;
|
||||
|
||||
@@ -82,11 +79,11 @@ PeCoffLoaderGetPeHeader (
|
||||
//
|
||||
Size = sizeof (EFI_IMAGE_DOS_HEADER);
|
||||
Status = ImageContext->ImageRead (
|
||||
ImageContext->Handle,
|
||||
0,
|
||||
&Size,
|
||||
&DosHdr
|
||||
);
|
||||
ImageContext->Handle,
|
||||
0,
|
||||
&Size,
|
||||
&DosHdr
|
||||
);
|
||||
if (RETURN_ERROR (Status)) {
|
||||
ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
|
||||
return Status;
|
||||
@@ -104,11 +101,11 @@ PeCoffLoaderGetPeHeader (
|
||||
//
|
||||
Size = sizeof (EFI_IMAGE_NT_HEADERS);
|
||||
Status = ImageContext->ImageRead (
|
||||
ImageContext->Handle,
|
||||
ImageContext->PeCoffHeaderOffset,
|
||||
&Size,
|
||||
PeHdr
|
||||
);
|
||||
ImageContext->Handle,
|
||||
ImageContext->PeCoffHeaderOffset,
|
||||
&Size,
|
||||
PeHdr
|
||||
);
|
||||
if (RETURN_ERROR (Status)) {
|
||||
ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
|
||||
return Status;
|
||||
@@ -119,11 +116,11 @@ PeCoffLoaderGetPeHeader (
|
||||
if (PeHdr->Signature != EFI_IMAGE_NT_SIGNATURE) {
|
||||
Size = sizeof (EFI_TE_IMAGE_HEADER);
|
||||
Status = ImageContext->ImageRead (
|
||||
ImageContext->Handle,
|
||||
0,
|
||||
&Size,
|
||||
TeHdr
|
||||
);
|
||||
ImageContext->Handle,
|
||||
0,
|
||||
&Size,
|
||||
TeHdr
|
||||
);
|
||||
if (TeHdr->Signature != EFI_TE_IMAGE_HEADER_SIGNATURE) {
|
||||
return RETURN_UNSUPPORTED;
|
||||
}
|
||||
@@ -137,14 +134,12 @@ PeCoffLoaderGetPeHeader (
|
||||
/**
|
||||
Checks the PE or TE header of a PE/COFF or TE image to determine if it supported.
|
||||
|
||||
@param ImageContext The context of the image being loaded.
|
||||
|
||||
@param PeHdr The buffer in which to return the PE header.
|
||||
|
||||
@param TeHdr The buffer in which to return the TE header.
|
||||
@param ImageContext The context of the image being loaded.
|
||||
@param PeHdr The buffer in which to return the PE header.
|
||||
@param TeHdr The buffer in which to return the TE header.
|
||||
|
||||
@retval RETURN_SUCCESS if the PE/COFF or TE image is supported
|
||||
@retval RETURN_UNSUPPORTED of the PE/COFF or TE image is not supported.
|
||||
@retval RETURN_SUCCESS The PE/COFF or TE image is supported.
|
||||
@retval RETURN_UNSUPPORTED The PE/COFF or TE image is not supported.
|
||||
|
||||
**/
|
||||
STATIC
|
||||
@@ -185,16 +180,24 @@ PeCoffLoaderCheckImageType (
|
||||
}
|
||||
|
||||
/**
|
||||
Retrieves information on a PE/COFF image.
|
||||
Retrieves information about a PE/COFF image.
|
||||
|
||||
@param This Calling context
|
||||
@param ImageContext The context of the image being loaded
|
||||
Computes the PeCoffHeaderOffset, ImageAddress, ImageSize, DestinationAddress, CodeView,
|
||||
PdbPointer, RelocationsStripped, SectionAlignment, SizeOfHeaders, and DebugDirectoryEntryRva
|
||||
fields of the ImageContext structure. If ImageContext is NULL, then return RETURN_INVALID_PARAMETER.
|
||||
If the PE/COFF image accessed through the ImageRead service in the ImageContext structure is not
|
||||
a supported PE/COFF image type, then return RETURN_UNSUPPORTED. If any errors occur while
|
||||
computing the fields of ImageContext, then the error status is returned in the ImageError field of
|
||||
ImageContext.
|
||||
|
||||
@retval RETURN_SUCCESS The information on the PE/COFF image was collected.
|
||||
@param ImageContext Pointer to the image context structure that describes the PE/COFF
|
||||
image that needs to be examined by this function.
|
||||
|
||||
@retval RETURN_SUCCESS The information on the PE/COFF image was collected.
|
||||
@retval RETURN_INVALID_PARAMETER ImageContext is NULL.
|
||||
@retval RETURN_UNSUPPORTED The PE/COFF image is not supported.
|
||||
@retval Otherwise The error status from reading the PE/COFF image using the
|
||||
ImageContext->ImageRead() function
|
||||
@retval RETURN_UNSUPPORTED The PE/COFF image is not supported.
|
||||
@retval Others The error status from reading the PE/COFF image
|
||||
using the ImageContext->ImageRead() function.
|
||||
|
||||
**/
|
||||
RETURN_STATUS
|
||||
@@ -203,7 +206,7 @@ PeCoffLoaderGetImageInfo (
|
||||
IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
|
||||
)
|
||||
{
|
||||
RETURN_STATUS Status;
|
||||
RETURN_STATUS Status;
|
||||
EFI_IMAGE_NT_HEADERS PeHdr;
|
||||
EFI_TE_IMAGE_HEADER TeHdr;
|
||||
EFI_IMAGE_DATA_DIRECTORY *DebugDirectoryEntry;
|
||||
@@ -368,7 +371,7 @@ PeCoffLoaderGetImageInfo (
|
||||
//
|
||||
// Read section header from file
|
||||
//
|
||||
Size = sizeof (EFI_IMAGE_SECTION_HEADER);
|
||||
Size = sizeof (EFI_IMAGE_SECTION_HEADER);
|
||||
Status = ImageContext->ImageRead (
|
||||
ImageContext->Handle,
|
||||
SectionHeaderOffset,
|
||||
@@ -383,10 +386,10 @@ PeCoffLoaderGetImageInfo (
|
||||
if (DebugDirectoryEntryRva >= SectionHeader.VirtualAddress &&
|
||||
DebugDirectoryEntryRva < SectionHeader.VirtualAddress + SectionHeader.Misc.VirtualSize) {
|
||||
DebugDirectoryEntryFileOffset = DebugDirectoryEntryRva -
|
||||
SectionHeader.VirtualAddress +
|
||||
SectionHeader.PointerToRawData +
|
||||
sizeof (EFI_TE_IMAGE_HEADER) -
|
||||
TeHdr.StrippedSize;
|
||||
SectionHeader.VirtualAddress +
|
||||
SectionHeader.PointerToRawData +
|
||||
sizeof (EFI_TE_IMAGE_HEADER) -
|
||||
TeHdr.StrippedSize;
|
||||
|
||||
//
|
||||
// File offset of the debug directory was found, if this is not the last
|
||||
@@ -448,11 +451,10 @@ PeCoffLoaderGetImageInfo (
|
||||
/**
|
||||
Converts an image address to the loaded address.
|
||||
|
||||
@param ImageContext The context of the image being loaded.
|
||||
|
||||
@param Address The address to be converted to the loaded address.
|
||||
@param ImageContext The context of the image being loaded.
|
||||
@param Address The address to be converted to the loaded address.
|
||||
|
||||
@return NULL if the address can not be converted, otherwise, the converted address
|
||||
@return The converted address or NULL if the address can not be converted.
|
||||
|
||||
**/
|
||||
STATIC
|
||||
@@ -471,15 +473,23 @@ PeCoffLoaderImageAddress (
|
||||
}
|
||||
|
||||
/**
|
||||
Relocates a PE/COFF image in memory.
|
||||
Applies relocation fixups to a PE/COFF image that was loaded with PeCoffLoaderLoadImage().
|
||||
|
||||
@param This Calling context.
|
||||
|
||||
@param ImageContext Contains information on the loaded image to relocate.
|
||||
If the DestinationAddress field of ImageContext is 0, then use the ImageAddress field of
|
||||
ImageContext as the relocation base address. Otherwise, use the DestinationAddress field
|
||||
of ImageContext as the relocation base address. The caller must allocate the relocation
|
||||
fixup log buffer and fill in the FixupData field of ImageContext prior to calling this function.
|
||||
If ImageContext is NULL, then ASSERT().
|
||||
|
||||
@retval RETURN_SUCCESS if the PE/COFF image was relocated.
|
||||
@retval RETURN_LOAD_ERROR if the image is not a valid PE/COFF image.
|
||||
@retval RETURN_UNSUPPORTED not support.
|
||||
@param ImageContext Pointer to the image context structure that describes the PE/COFF
|
||||
image that is being relocated.
|
||||
|
||||
@retval RETURN_SUCCESS The PE/COFF image was relocated.
|
||||
Extended status information is in the ImageError field of ImageContext.
|
||||
@retval RETURN_LOAD_ERROR The image in not a valid PE/COFF image.
|
||||
Extended status information is in the ImageError field of ImageContext.
|
||||
@retval RETURN_UNSUPPORTED A relocation record type is not supported.
|
||||
Extended status information is in the ImageError field of ImageContext.
|
||||
|
||||
**/
|
||||
RETURN_STATUS
|
||||
@@ -504,6 +514,8 @@ PeCoffLoaderRelocateImage (
|
||||
CHAR8 *FixupData;
|
||||
PHYSICAL_ADDRESS BaseAddress;
|
||||
|
||||
ASSERT (ImageContext != NULL);
|
||||
|
||||
PeHdr = NULL;
|
||||
TeHdr = NULL;
|
||||
//
|
||||
@@ -522,7 +534,7 @@ PeCoffLoaderRelocateImage (
|
||||
// If the destination address is not 0, use that rather than the
|
||||
// image address as the relocation target.
|
||||
//
|
||||
if (ImageContext->DestinationAddress) {
|
||||
if (ImageContext->DestinationAddress != 0) {
|
||||
BaseAddress = ImageContext->DestinationAddress;
|
||||
} else {
|
||||
BaseAddress = ImageContext->ImageAddress;
|
||||
@@ -531,6 +543,7 @@ PeCoffLoaderRelocateImage (
|
||||
if (!(ImageContext->IsTeImage)) {
|
||||
PeHdr = (EFI_IMAGE_NT_HEADERS *)((UINTN)ImageContext->ImageAddress +
|
||||
ImageContext->PeCoffHeaderOffset);
|
||||
|
||||
Adjust = (UINT64) BaseAddress - PeHdr->OptionalHeader.ImageBase;
|
||||
PeHdr->OptionalHeader.ImageBase = (UINTN)BaseAddress;
|
||||
|
||||
@@ -670,14 +683,23 @@ PeCoffLoaderRelocateImage (
|
||||
/**
|
||||
Loads a PE/COFF image into memory.
|
||||
|
||||
@param This Calling context.
|
||||
|
||||
@param ImageContext Contains information on image to load into memory.
|
||||
Loads the PE/COFF image accessed through the ImageRead service of ImageContext into the buffer
|
||||
specified by the ImageAddress and ImageSize fields of ImageContext. The caller must allocate
|
||||
the load buffer and fill in the ImageAddress and ImageSize fields prior to calling this function.
|
||||
The EntryPoint, FixupDataSize, CodeView, and PdbPointer fields of ImageContext are computed.
|
||||
|
||||
@retval RETURN_SUCCESS if the PE/COFF image was loaded.
|
||||
@retval RETURN_BUFFER_TOO_SMALL if the caller did not provide a large enough buffer.
|
||||
@retval RETURN_LOAD_ERROR if the image is a runtime driver with no relocations.
|
||||
@retval RETURN_INVALID_PARAMETER if the image address is invalid.
|
||||
@param ImageContext Pointer to the image context structure that describes the PE/COFF
|
||||
image that is being loaded.
|
||||
|
||||
@retval RETURN_SUCCESS The PE/COFF image was loaded into the buffer specified by
|
||||
the ImageAddress and ImageSize fields of ImageContext.
|
||||
Extended status information is in the ImageError field of ImageContext.
|
||||
@retval RETURN_BUFFER_TOO_SMALL The caller did not provide a large enough buffer.
|
||||
Extended status information is in the ImageError field of ImageContext.
|
||||
@retval RETURN_LOAD_ERROR The PE/COFF image is an EFI Runtime image with no relocations.
|
||||
Extended status information is in the ImageError field of ImageContext.
|
||||
@retval RETURN_INVALID_PARAMETER The image address is invalid.
|
||||
Extended status information is in the ImageError field of ImageContext.
|
||||
|
||||
**/
|
||||
RETURN_STATUS
|
||||
@@ -686,10 +708,10 @@ PeCoffLoaderLoadImage (
|
||||
IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
|
||||
)
|
||||
{
|
||||
RETURN_STATUS Status;
|
||||
RETURN_STATUS Status;
|
||||
EFI_IMAGE_NT_HEADERS *PeHdr;
|
||||
EFI_TE_IMAGE_HEADER *TeHdr;
|
||||
PE_COFF_LOADER_IMAGE_CONTEXT CheckContext;
|
||||
PE_COFF_LOADER_IMAGE_CONTEXT CheckContext;
|
||||
EFI_IMAGE_SECTION_HEADER *FirstSection;
|
||||
EFI_IMAGE_SECTION_HEADER *Section;
|
||||
UINTN NumberOfSections;
|
||||
|
Reference in New Issue
Block a user