From cd14fe3dcf9445a2b3c9e8e3eef78c23c4d2b7cd Mon Sep 17 00:00:00 2001 From: qhuang8 Date: Mon, 19 Jun 2006 07:40:23 +0000 Subject: [PATCH] =?UTF-8?q?=091.=20PostCodeLib.=20=09=09Rename=20BasePostC?= =?UTF-8?q?odeLib80=20to=20BasePostCodeLibPort80.=20=09=09Fix=20typos=20in?= =?UTF-8?q?=20macro=20POST=5FCODE()=20and=20POST=5FCODE=5FWITH=5FDESCRIPTI?= =?UTF-8?q?ON()=20=092.=20DebugLib=20=09=09Change=20the=20parameter=20type?= =?UTF-8?q?=20of=20LineNumber=20of=20DebugAssert()=20from=20=E2=80=9CINTN?= =?UTF-8?q?=E2=80=9D=20to=20=E2=80=9CUINTN=E2=80=9D=20to=20follow=20MWG.?= =?UTF-8?q?=20=09=09Add=20type=20cast=20=E2=80=9C(EFI=5FGUID=20*)=E2=80=9D?= =?UTF-8?q?=20in=20macro=20ASSERT=5FPROTCOL=5FALREADY=5FINSTALLED=20()=20t?= =?UTF-8?q?o=20follow=20MWG.=20=093.=20BasePeCoffLib/=20=09=09Add=20librar?= =?UTF-8?q?y=20function=20header=20for=20all=20the=20interfaces=20in=20MWG?= =?UTF-8?q?.=20=09=09Add=20missing=20ASSERT()s.=20=094.=20PciLib=20=09=09A?= =?UTF-8?q?dd=20ASSERT()s=20in=20PciRead/WriteBuffer()=20to=20check=20cros?= =?UTF-8?q?s=20PCI=20function=20access.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@557 6f19259b-4bc3-4df7-8a09-765794883524 --- .../EdkDxeDebugLibReportStatusCode/DebugLib.c | 2 +- .../Library/EdkUefiDebugLibConOut/DebugLib.c | 2 +- .../Library/EdkUefiDebugLibStdErr/DebugLib.c | 2 +- MdePkg/Include/Library/DebugLib.h | 32 ++-- MdePkg/Include/Library/PostCodeLib.h | 6 +- MdePkg/Library/BaseDebugLibNull/DebugLib.c | 2 +- .../BaseDebugLibReportStatusCode/DebugLib.c | 2 +- MdePkg/Library/BasePciCf8Lib/PciLib.c | 2 + MdePkg/Library/BasePciExpressLib/PciLib.c | 2 + .../BasePeCoffGetEntryPointLib.msa | 1 + .../PeCoffGetEntryPoint.c | 31 ++-- MdePkg/Library/BasePeCoffLib/BasePeCoff.c | 154 ++++++++++-------- .../Library/BasePeCoffLib/BasePeCoffLib.msa | 5 +- .../BasePostCodeLibPort80.mbd | 30 ++++ .../BasePostCodeLibPort80.msa | 50 ++++++ .../Library/BasePostCodeLibPort80/PostCode.c | 123 ++++++++++++++ .../Library/BasePostCodeLibPort80/build.xml | 47 ++++++ MdePkg/Library/UefiDebugLibConOut/DebugLib.c | 2 +- MdePkg/Library/UefiDebugLibStdErr/DebugLib.c | 2 +- MdePkg/MdePkg-All-Archs.fpd | 16 +- MdePkg/MdePkg.fpd | 4 +- MdePkg/MdePkg.spd | 2 +- 22 files changed, 404 insertions(+), 115 deletions(-) create mode 100644 MdePkg/Library/BasePostCodeLibPort80/BasePostCodeLibPort80.mbd create mode 100644 MdePkg/Library/BasePostCodeLibPort80/BasePostCodeLibPort80.msa create mode 100644 MdePkg/Library/BasePostCodeLibPort80/PostCode.c create mode 100644 MdePkg/Library/BasePostCodeLibPort80/build.xml diff --git a/EdkModulePkg/Library/EdkDxeDebugLibReportStatusCode/DebugLib.c b/EdkModulePkg/Library/EdkDxeDebugLibReportStatusCode/DebugLib.c index 5a7300faba..51ea6bd9ba 100644 --- a/EdkModulePkg/Library/EdkDxeDebugLibReportStatusCode/DebugLib.c +++ b/EdkModulePkg/Library/EdkDxeDebugLibReportStatusCode/DebugLib.c @@ -66,7 +66,7 @@ VOID EFIAPI DebugAssert ( IN CHAR8 *FileName, - IN INTN LineNumber, + IN UINTN LineNumber, IN CHAR8 *Description ) /*++ diff --git a/EdkModulePkg/Library/EdkUefiDebugLibConOut/DebugLib.c b/EdkModulePkg/Library/EdkUefiDebugLibConOut/DebugLib.c index 911002e96c..9945143dc4 100644 --- a/EdkModulePkg/Library/EdkUefiDebugLibConOut/DebugLib.c +++ b/EdkModulePkg/Library/EdkUefiDebugLibConOut/DebugLib.c @@ -139,7 +139,7 @@ VOID EFIAPI DebugAssert ( IN CHAR8 *FileName, - IN INTN LineNumber, + IN UINTN LineNumber, IN CHAR8 *Description ) /*++ diff --git a/EdkModulePkg/Library/EdkUefiDebugLibStdErr/DebugLib.c b/EdkModulePkg/Library/EdkUefiDebugLibStdErr/DebugLib.c index 1074d6a2ce..dc0c3ab497 100644 --- a/EdkModulePkg/Library/EdkUefiDebugLibStdErr/DebugLib.c +++ b/EdkModulePkg/Library/EdkUefiDebugLibStdErr/DebugLib.c @@ -139,7 +139,7 @@ VOID EFIAPI DebugAssert ( IN CHAR8 *FileName, - IN INTN LineNumber, + IN UINTN LineNumber, IN CHAR8 *Description ) /*++ diff --git a/MdePkg/Include/Library/DebugLib.h b/MdePkg/Include/Library/DebugLib.h index b1d320057f..693fc3cf7a 100644 --- a/MdePkg/Include/Library/DebugLib.h +++ b/MdePkg/Include/Library/DebugLib.h @@ -94,7 +94,7 @@ VOID EFIAPI DebugAssert ( IN CONST CHAR8 *FileName, - IN INTN LineNumber, + IN UINTN LineNumber, IN CONST CHAR8 *Description ); @@ -311,21 +311,21 @@ DebugClearMemoryEnabled ( @param Guid Pointer to a protocol GUID. **/ -#define ASSERT_PROTOCOL_ALREADY_INSTALLED(Handle, Guid) \ - do { \ - if (DebugAssertEnabled ()) { \ - VOID *Instance; \ - ASSERT (Guid != NULL); \ - if (Handle == NULL) { \ - if (!EFI_ERROR (gBS->LocateProtocol (Guid, NULL, &Instance))) { \ - _ASSERT (Guid already installed in database); \ - } \ - } else { \ - if (!EFI_ERROR (gBS->HandleProtocol (Handle, Guid, &Instance))) { \ - _ASSERT (Guid already installed on Handle); \ - } \ - } \ - } \ +#define ASSERT_PROTOCOL_ALREADY_INSTALLED(Handle, Guid) \ + do { \ + if (DebugAssertEnabled ()) { \ + VOID *Instance; \ + ASSERT (Guid != NULL); \ + if (Handle == NULL) { \ + if (!EFI_ERROR (gBS->LocateProtocol ((EFI_GUID *)Guid, NULL, &Instance))) { \ + _ASSERT (Guid already installed in database); \ + } \ + } else { \ + if (!EFI_ERROR (gBS->HandleProtocol (Handle, (EFI_GUID *)Guid, &Instance))) { \ + _ASSERT (Guid already installed on Handle); \ + } \ + } \ + } \ } while (FALSE) diff --git a/MdePkg/Include/Library/PostCodeLib.h b/MdePkg/Include/Library/PostCodeLib.h index 78ce4b205a..5a80c561df 100644 --- a/MdePkg/Include/Library/PostCodeLib.h +++ b/MdePkg/Include/Library/PostCodeLib.h @@ -125,7 +125,7 @@ PostCodeDescriptionEnabled ( @return Value **/ -#define POST_CODE(Value) ReportPostCodeEnabled() ? PostCode(Value) : Value +#define POST_CODE(Value) PostCodeEnabled() ? PostCode(Value) : Value /** Sends an 32-bit value to a POST and associated ASCII string. @@ -141,8 +141,8 @@ PostCodeDescriptionEnabled ( **/ #define POST_CODE_WITH_DESCRIPTION(Value,Description) \ - ReportPostCodeEnabled() ? \ - (ReportPostCodeDescriptionEnabled() ? \ + PostCodeEnabled() ? \ + (PostCodeDescriptionEnabled() ? \ PostCodeWithDescription(Value,Description) : \ PostCode(Value)) : \ Value diff --git a/MdePkg/Library/BaseDebugLibNull/DebugLib.c b/MdePkg/Library/BaseDebugLibNull/DebugLib.c index 9081b632d8..db0b0a97a7 100644 --- a/MdePkg/Library/BaseDebugLibNull/DebugLib.c +++ b/MdePkg/Library/BaseDebugLibNull/DebugLib.c @@ -83,7 +83,7 @@ VOID EFIAPI DebugAssert ( IN CONST CHAR8 *FileName, - IN INTN LineNumber, + IN UINTN LineNumber, IN CONST CHAR8 *Description ) { diff --git a/MdePkg/Library/BaseDebugLibReportStatusCode/DebugLib.c b/MdePkg/Library/BaseDebugLibReportStatusCode/DebugLib.c index a239e91d9d..b06a75660f 100644 --- a/MdePkg/Library/BaseDebugLibReportStatusCode/DebugLib.c +++ b/MdePkg/Library/BaseDebugLibReportStatusCode/DebugLib.c @@ -114,7 +114,7 @@ VOID EFIAPI DebugAssert ( IN CONST CHAR8 *FileName, - IN INTN LineNumber, + IN UINTN LineNumber, IN CONST CHAR8 *Description ) { diff --git a/MdePkg/Library/BasePciCf8Lib/PciLib.c b/MdePkg/Library/BasePciCf8Lib/PciLib.c index 2f82fbe2c8..7b52a7c925 100644 --- a/MdePkg/Library/BasePciCf8Lib/PciLib.c +++ b/MdePkg/Library/BasePciCf8Lib/PciLib.c @@ -1299,6 +1299,7 @@ PciCf8ReadBuffer ( UINTN EndAddress; ASSERT_INVALID_PCI_ADDRESS (StartAddress, 0); + ASSERT (((StartAddress & 0xFFF) + Size) <= 0x100); ASSERT (Buffer != NULL); EndAddress = StartAddress + Size; @@ -1386,6 +1387,7 @@ PciCf8WriteBuffer ( UINTN EndAddress; ASSERT_INVALID_PCI_ADDRESS (StartAddress, 0); + ASSERT (((StartAddress & 0xFFF) + Size) <= 0x100); ASSERT (Buffer != NULL); EndAddress = StartAddress + Size; diff --git a/MdePkg/Library/BasePciExpressLib/PciLib.c b/MdePkg/Library/BasePciExpressLib/PciLib.c index 125da5793b..e6b43a9907 100644 --- a/MdePkg/Library/BasePciExpressLib/PciLib.c +++ b/MdePkg/Library/BasePciExpressLib/PciLib.c @@ -1196,6 +1196,7 @@ PciExpressReadBuffer ( UINTN EndAddress; ASSERT_INVALID_PCI_ADDRESS (StartAddress); + ASSERT (((StartAddress & 0xFFF) + Size) <= 0x1000); ASSERT (Buffer != NULL); EndAddress = StartAddress + Size; @@ -1282,6 +1283,7 @@ PciExpressWriteBuffer ( UINTN EndAddress; ASSERT_INVALID_PCI_ADDRESS (StartAddress); + ASSERT (((StartAddress & 0xFFF) + Size) <= 0x1000); ASSERT (Buffer != NULL); EndAddress = StartAddress + Size; diff --git a/MdePkg/Library/BasePeCoffGetEntryPointLib/BasePeCoffGetEntryPointLib.msa b/MdePkg/Library/BasePeCoffGetEntryPointLib/BasePeCoffGetEntryPointLib.msa index 1f92c24449..e8cc214548 100644 --- a/MdePkg/Library/BasePeCoffGetEntryPointLib/BasePeCoffGetEntryPointLib.msa +++ b/MdePkg/Library/BasePeCoffGetEntryPointLib/BasePeCoffGetEntryPointLib.msa @@ -33,6 +33,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. PeCoffGetEntryPointLib + DebugLib PeCoffGetEntryPoint.c diff --git a/MdePkg/Library/BasePeCoffGetEntryPointLib/PeCoffGetEntryPoint.c b/MdePkg/Library/BasePeCoffGetEntryPointLib/PeCoffGetEntryPoint.c index d5ff7db009..b740bd6e7c 100644 --- a/MdePkg/Library/BasePeCoffGetEntryPointLib/PeCoffGetEntryPoint.c +++ b/MdePkg/Library/BasePeCoffGetEntryPointLib/PeCoffGetEntryPoint.c @@ -17,38 +17,49 @@ /** - Loads a PE/COFF image into memory. + Retrieves and returns a pointer to the entry point to a PE/COFF image that has been loaded + into system memory with the PE/COFF Loader Library functions. - @param Pe32Data Pointer to a PE/COFF Image - - @param EntryPoint Pointer to the entry point of the PE/COFF image + Retrieves the entry point to the PE/COFF image specified by Pe32Data and returns this entry + point in EntryPoint. If the entry point could not be retrieved from the PE/COFF image, then + return RETURN_INVALID_PARAMETER. Otherwise return RETURN_SUCCESS. + If Pe32Data is NULL, then ASSERT(). + If EntryPoint is NULL, then ASSERT(). - @retval EFI_SUCCESS if the EntryPoint was returned - @retval EFI_INVALID_PARAMETER if the EntryPoint could not be found from Pe32Data + @param Pe32Data Pointer to the PE/COFF image that is loaded in system memory. + @param EntryPoint Pointer to entry point to the PE/COFF image to return. + + @retval RETURN_SUCCESS EntryPoint was returned. + @retval RETURN_INVALID_PARAMETER The entry point could not be found in the PE/COFF image. **/ RETURN_STATUS EFIAPI PeCoffLoaderGetEntryPoint ( - IN VOID *Pe32Data, - IN OUT VOID **EntryPoint + IN VOID *Pe32Data, + OUT VOID **EntryPoint ) { EFI_IMAGE_DOS_HEADER *DosHeader; EFI_IMAGE_NT_HEADERS *PeHeader; + ASSERT (Pe32Data != NULL); + ASSERT (EntryPoint != NULL); + DosHeader = (EFI_IMAGE_DOS_HEADER *)Pe32Data; + if (DosHeader->e_magic == EFI_IMAGE_DOS_SIGNATURE) { // - // DOS image header is present, so read the PE header after the DOS image header + // DOS image header is present, so read the PE header after the DOS image header. // PeHeader = (EFI_IMAGE_NT_HEADERS *) ((UINTN) Pe32Data + (UINTN) ((DosHeader->e_lfanew) & 0x0ffff)); } else { // - // DOS image header is not present, so PE header is at the image base + // DOS image header is not present, so PE header is at the image base. // PeHeader = (EFI_IMAGE_NT_HEADERS *) Pe32Data; } + *EntryPoint = (VOID *) ((UINTN) Pe32Data + (UINTN) (PeHeader->OptionalHeader.AddressOfEntryPoint & 0x0ffffffff)); return RETURN_SUCCESS; } diff --git a/MdePkg/Library/BasePeCoffLib/BasePeCoff.c b/MdePkg/Library/BasePeCoffLib/BasePeCoff.c index c7f3354637..e91e9a6c2f 100644 --- a/MdePkg/Library/BasePeCoffLib/BasePeCoff.c +++ b/MdePkg/Library/BasePeCoffLib/BasePeCoff.c @@ -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; diff --git a/MdePkg/Library/BasePeCoffLib/BasePeCoffLib.msa b/MdePkg/Library/BasePeCoffLib/BasePeCoffLib.msa index 6efb3533d1..f4d1005324 100644 --- a/MdePkg/Library/BasePeCoffLib/BasePeCoffLib.msa +++ b/MdePkg/Library/BasePeCoffLib/BasePeCoffLib.msa @@ -34,6 +34,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. PeCoffLib BaseMemoryLib + DebugLib BasePeCoff.c @@ -44,10 +45,10 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. x64/PeCoffLoaderEx.c - ipf/PeCoffLoaderEx.c + Ipf/PeCoffLoaderEx.c - ebc/PeCoffLoaderEx.c + Ebc/PeCoffLoaderEx.c diff --git a/MdePkg/Library/BasePostCodeLibPort80/BasePostCodeLibPort80.mbd b/MdePkg/Library/BasePostCodeLibPort80/BasePostCodeLibPort80.mbd new file mode 100644 index 0000000000..42bc6ae54d --- /dev/null +++ b/MdePkg/Library/BasePostCodeLibPort80/BasePostCodeLibPort80.mbd @@ -0,0 +1,30 @@ + + + + + BasePostCodeLibPort80 + 55c61087-7367-4546-bc32-4937c5e6aff3 + 0 + FIX ME! + Copyright (c) 2004-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. + + 2006-03-09 23:16 + 2006-03-19 15:17 + + diff --git a/MdePkg/Library/BasePostCodeLibPort80/BasePostCodeLibPort80.msa b/MdePkg/Library/BasePostCodeLibPort80/BasePostCodeLibPort80.msa new file mode 100644 index 0000000000..096ed56e38 --- /dev/null +++ b/MdePkg/Library/BasePostCodeLibPort80/BasePostCodeLibPort80.msa @@ -0,0 +1,50 @@ + + + + + BasePostCodeLibPort80 + BASE + LIBRARY + 55c61087-7367-4546-bc32-4937c5e6aff3 + 0 + Component description file for the entry point to a EFIDXE Drivers + FIX ME! + Copyright (c) 2004-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. + + 2006-03-09 23:16 + 2006-03-19 15:17 + 0 + + + PostCodeLib + PcdLib + IoLib + + + PostCode.c + + + MdePkg + + + + PcdPostCodePropertyMask + + + diff --git a/MdePkg/Library/BasePostCodeLibPort80/PostCode.c b/MdePkg/Library/BasePostCodeLibPort80/PostCode.c new file mode 100644 index 0000000000..93c24d5eb6 --- /dev/null +++ b/MdePkg/Library/BasePostCodeLibPort80/PostCode.c @@ -0,0 +1,123 @@ +/** @file + Report Status Code Library Post Code functions for DXE Phase. + + 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. + +**/ + + +/** + Sends an 32-bit value to a POST card. + + Sends the 32-bit value specified by Value to a POST card, and returns Value. + Some implementations of this library function may perform I/O operations + directly to a POST card device. Other implementations may send Value to + ReportStatusCode(), and the status code reporting mechanism will eventually + display the 32-bit value on the status reporting device. + + PostCode() must actively prevent recursion. If PostCode() is called while + processing another any other Report Status Code Library function, then + PostCode() must return Value immediately. + + @param Value The 32-bit value to write to the POST card. + + @return Value + +**/ +UINT32 +EFIAPI +PostCode ( + IN UINT32 Value + ) +{ + IoWrite8 (0x80, (UINT8)(Value)); + return Value; +} + + +/** + Sends an 32-bit value to a POST and associated ASCII string. + + Sends the 32-bit value specified by Value to a POST card, and returns Value. + If Description is not NULL, then the ASCII string specified by Description is + also passed to the handler that displays the POST card value. Some + implementations of this library function may perform I/O operations directly + to a POST card device. Other implementations may send Value to ReportStatusCode(), + and the status code reporting mechanism will eventually display the 32-bit + value on the status reporting device. + + PostCodeWithDescription()must actively prevent recursion. If + PostCodeWithDescription() is called while processing another any other Report + Status Code Library function, then PostCodeWithDescription() must return Value + immediately. + + @param Value The 32-bit value to write to the POST card. + @param Description Pointer to an ASCII string that is a description of the + POST code value. This is an optional parameter that may + be NULL. + + @return Value + +**/ +UINT32 +EFIAPI +PostCodeWithDescription ( + IN UINT32 Value, + IN CONST CHAR8 *Description OPTIONAL + ) +{ + IoWrite8 (0x80, (UINT8)(Value)); + return Value; +} + + +/** + Returns TRUE if POST Codes are enabled. + + This function returns TRUE if the POST_CODE_PROPERTY_POST_CODE_ENABLED + bit of PcdPostCodePropertyMask is set. Otherwise FALSE is returned. + + @retval TRUE The POST_CODE_PROPERTY_POST_CODE_ENABLED bit of + PcdPostCodeProperyMask is set. + @retval FALSE The POST_CODE_PROPERTY_POST_CODE_ENABLED bit of + PcdPostCodeProperyMask is clear. + +**/ +BOOLEAN +EFIAPI +PostCodeEnabled ( + VOID + ) +{ + return ((PcdGet8(PcdPostCodePropertyMask) & POST_CODE_PROPERTY_POST_CODE_ENABLED) != 0); +} + + +/** + Returns TRUE if POST code descriptions are enabled. + + This function returns TRUE if the + POST_CODE_PROPERTY_POST_CODE_ENABLED bit of + PcdPostCodePropertyMask is set. Otherwise FALSE is returned. + + @retval TRUE The POST_CODE_PROPERTY_POST_CODE_ENABLED + bit of PcdPostCodeProperyMask is set. + @retval FALSE The POST_CODE_PROPERTY_POST_CODE_ENABLED + bit of PcdPostCodeProperyMask is clear. + +**/ +BOOLEAN +EFIAPI +PostCodeDescriptionEnabled ( + VOID + ) +{ + return ((PcdGet8(PcdPostCodePropertyMask) & POST_CODE_PROPERTY_POST_CODE_ENABLED) != 0); +} diff --git a/MdePkg/Library/BasePostCodeLibPort80/build.xml b/MdePkg/Library/BasePostCodeLibPort80/build.xml new file mode 100644 index 0000000000..0b96d7c3c7 --- /dev/null +++ b/MdePkg/Library/BasePostCodeLibPort80/build.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/MdePkg/Library/UefiDebugLibConOut/DebugLib.c b/MdePkg/Library/UefiDebugLibConOut/DebugLib.c index 97db1f41ba..5e828b4c6a 100644 --- a/MdePkg/Library/UefiDebugLibConOut/DebugLib.c +++ b/MdePkg/Library/UefiDebugLibConOut/DebugLib.c @@ -98,7 +98,7 @@ VOID EFIAPI DebugAssert ( IN CONST CHAR8 *FileName, - IN INTN LineNumber, + IN UINTN LineNumber, IN CONST CHAR8 *Description ) { diff --git a/MdePkg/Library/UefiDebugLibStdErr/DebugLib.c b/MdePkg/Library/UefiDebugLibStdErr/DebugLib.c index 986c5234cc..6b834ec3e6 100644 --- a/MdePkg/Library/UefiDebugLibStdErr/DebugLib.c +++ b/MdePkg/Library/UefiDebugLibStdErr/DebugLib.c @@ -98,7 +98,7 @@ VOID EFIAPI DebugAssert ( IN CONST CHAR8 *FileName, - IN INTN LineNumber, + IN UINTN LineNumber, IN CONST CHAR8 *Description ) { diff --git a/MdePkg/MdePkg-All-Archs.fpd b/MdePkg/MdePkg-All-Archs.fpd index cf00caa18f..a363b6a665 100644 --- a/MdePkg/MdePkg-All-Archs.fpd +++ b/MdePkg/MdePkg-All-Archs.fpd @@ -86,7 +86,7 @@ - + @@ -159,7 +159,7 @@ - + @@ -231,7 +231,7 @@ - + @@ -304,7 +304,7 @@ - + @@ -752,7 +752,7 @@ - + PcdPostCodePropertyMask @@ -1112,7 +1112,7 @@ - + PcdPostCodePropertyMask @@ -1472,7 +1472,7 @@ - + PcdPostCodePropertyMask @@ -1832,7 +1832,7 @@ - + PcdPostCodePropertyMask diff --git a/MdePkg/MdePkg.fpd b/MdePkg/MdePkg.fpd index 8eb0188d60..35de27df9b 100644 --- a/MdePkg/MdePkg.fpd +++ b/MdePkg/MdePkg.fpd @@ -82,7 +82,7 @@ - + @@ -530,7 +530,7 @@ - + PcdPostCodePropertyMask diff --git a/MdePkg/MdePkg.spd b/MdePkg/MdePkg.spd index 98eb6630a6..1978f7b492 100644 --- a/MdePkg/MdePkg.spd +++ b/MdePkg/MdePkg.spd @@ -226,7 +226,7 @@ Library/BaseReportStatusCodeLibNull/BaseReportStatusCodeLibNull.msa - Library/BasePostCodeLib80/BasePostCodeLib80.msa + Library/BasePostCodeLibPort80/BasePostCodeLibPort80.msa Library/BasePostCodeLibDebug/BasePostCodeLibDebug.msa