]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkModulePkg/Core/Dxe/Image/Image.c
Fix warnings generated by gcc for ia32 builds:
[mirror_edk2.git] / EdkModulePkg / Core / Dxe / Image / Image.c
index 9a2723765d015227600143dc359d636f406b9600..341df426145f685ca5c532d06ef1fcbe7fd56eb6 100644 (file)
@@ -1,6 +1,6 @@
 /*++\r
 \r
-Copyright (c) 2006, Intel Corporation\r
+Copyright (c) 2006 - 2007, Intel Corporation\r
 All rights reserved. This program and the accompanying materials\r
 are licensed and made available under the terms and conditions of the BSD License\r
 which accompanies this distribution.  The full text of the license may be found at\r
@@ -132,7 +132,7 @@ Returns:
   Image->ImageBasePage      = DxeCoreImageBaseAddress;\r
   Image->NumberOfPages      = (UINTN)(EFI_SIZE_TO_PAGES((UINTN)(DxeCoreImageLength)));\r
   Image->Tpl                = gEfiCurrentTpl;\r
-  Image->Info.SystemTable   = gST;\r
+  Image->Info.SystemTable   = gDxeCoreST;\r
   Image->Info.ImageBase     = (VOID *)(UINTN)DxeCoreImageBaseAddress;\r
   Image->Info.ImageSize     = DxeCoreImageLength;\r
 \r
@@ -254,7 +254,7 @@ Returns:
     if (Image->ImageContext.ImageAddress >= 0x100000 || Image->ImageContext.RelocationsStripped) {\r
       Status = CoreAllocatePages (\r
                  AllocateAddress,\r
-                 Image->ImageContext.ImageCodeMemoryType,\r
+                 (EFI_MEMORY_TYPE) (Image->ImageContext.ImageCodeMemoryType),\r
                  Image->NumberOfPages,\r
                  &Image->ImageContext.ImageAddress\r
                  );\r
@@ -262,7 +262,7 @@ Returns:
     if (EFI_ERROR (Status) && !Image->ImageContext.RelocationsStripped) {\r
       Status = CoreAllocatePages (\r
                  AllocateAnyPages,\r
-                 Image->ImageContext.ImageCodeMemoryType,\r
+                 (EFI_MEMORY_TYPE) (Image->ImageContext.ImageCodeMemoryType),\r
                  Image->NumberOfPages,\r
                  &Image->ImageContext.ImageAddress\r
                  );\r
@@ -389,8 +389,8 @@ Returns:
   Image->Type               = Image->ImageContext.ImageType;\r
   Image->Info.ImageBase     = (VOID *)(UINTN)Image->ImageContext.ImageAddress;\r
   Image->Info.ImageSize     = Image->ImageContext.ImageSize;\r
-  Image->Info.ImageCodeType = Image->ImageContext.ImageCodeMemoryType;\r
-  Image->Info.ImageDataType = Image->ImageContext.ImageDataMemoryType;\r
+  Image->Info.ImageCodeType = (EFI_MEMORY_TYPE) (Image->ImageContext.ImageCodeMemoryType);\r
+  Image->Info.ImageDataType = (EFI_MEMORY_TYPE) (Image->ImageContext.ImageDataMemoryType);\r
   if (Attribute & EFI_LOAD_PE_IMAGE_ATTRIBUTE_RUNTIME_REGISTRATION) {\r
     if (Image->ImageContext.ImageType == EFI_IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER) {\r
       //\r
@@ -514,7 +514,7 @@ Returns:
   return Image;\r
 }\r
 \r
-\r
+STATIC\r
 EFI_STATUS\r
 CoreLoadImageCommon (\r
   IN  BOOLEAN                          BootPolicy,\r
@@ -576,7 +576,7 @@ Returns:
 \r
   SecurityStatus = EFI_SUCCESS;\r
 \r
-  ASSERT (gEfiCurrentTpl < EFI_TPL_NOTIFY);\r
+  ASSERT (gEfiCurrentTpl < TPL_NOTIFY);\r
   ParentImage = NULL;\r
 \r
   //\r
@@ -650,7 +650,7 @@ Returns:
   // Initialize the fields for an internal driver\r
   //\r
   Image->Signature         = LOADED_IMAGE_PRIVATE_DATA_SIGNATURE;\r
-  Image->Info.SystemTable  = gST;\r
+  Image->Info.SystemTable  = gDxeCoreST;\r
   Image->Info.DeviceHandle = DeviceHandle;\r
   Image->Info.Revision     = EFI_LOADED_IMAGE_INFORMATION_REVISION;\r
   Image->Info.FilePath     = CoreDuplicateDevicePath (FilePath);\r
@@ -790,7 +790,7 @@ Returns:
              FilePath,\r
              SourceBuffer,\r
              SourceSize,\r
-             (EFI_PHYSICAL_ADDRESS)NULL,\r
+             (EFI_PHYSICAL_ADDRESS) (UINTN) NULL,\r
              NULL,\r
              ImageHandle,\r
              NULL,\r
@@ -1218,10 +1218,18 @@ Returns:
 --*/\r
 {\r
   LOADED_IMAGE_PRIVATE_DATA  *Image;\r
+  EFI_TPL                    OldTpl;\r
 \r
+  //\r
+  // Prevent possible reentrance to this function\r
+  // for the same ImageHandle\r
+  // \r
+  OldTpl = CoreRaiseTpl (TPL_NOTIFY); \r
\r
   Image = CoreLoadedImageInfo (ImageHandle);\r
   if (Image == NULL_HANDLE) {\r
-    return EFI_INVALID_PARAMETER;\r
+    Status = EFI_INVALID_PARAMETER;\r
+    goto Done;\r
   }\r
 \r
   if (!Image->Started) {\r
@@ -1229,7 +1237,8 @@ Returns:
     // The image has not been started so just free its resources\r
     //\r
     CoreUnloadAndCloseImage (Image, TRUE);\r
-    return EFI_SUCCESS;\r
+    Status = EFI_SUCCESS;\r
+    goto Done;\r
   }\r
 \r
   //\r
@@ -1237,7 +1246,8 @@ Returns:
   //\r
   if (Image != mCurrentImage) {\r
     DEBUG ((EFI_D_LOAD|EFI_D_ERROR, "Exit: Image is not exitable image\n"));\r
-    return EFI_INVALID_PARAMETER;\r
+    Status = EFI_INVALID_PARAMETER;\r
+    goto Done;\r
   }\r
 \r
   //\r
@@ -1252,11 +1262,13 @@ Returns:
     Image->ExitDataSize = ExitDataSize;\r
     Image->ExitData = CoreAllocateBootServicesPool (Image->ExitDataSize);\r
     if (Image->ExitData == NULL) {\r
-      return EFI_OUT_OF_RESOURCES;\r
+      Status = EFI_OUT_OF_RESOURCES;\r
+      goto Done;\r
     }\r
     CopyMem (Image->ExitData, ExitData, Image->ExitDataSize);\r
   }\r
 \r
+  CoreRestoreTpl (OldTpl);\r
   //\r
   // return to StartImage\r
   //\r
@@ -1266,7 +1278,10 @@ Returns:
   // If we return from LongJump, then it is an error\r
   //\r
   ASSERT (FALSE);\r
-  return EFI_ACCESS_DENIED;\r
+  Status = EFI_ACCESS_DENIED;\r
+Done:\r
+  CoreRestoreTpl (OldTpl);\r
+  return Status;\r
 }\r
 \r
 \r
@@ -1296,13 +1311,21 @@ Returns:
 {\r
   EFI_STATUS                 Status;\r
   LOADED_IMAGE_PRIVATE_DATA  *Image;\r
+  EFI_TPL                    OldTpl;\r
 \r
+  //\r
+  // Prevent possible reentrance to this function\r
+  // for the same ImageHandle\r
+  // \r
+  OldTpl = CoreRaiseTpl (TPL_NOTIFY);\r
\r
   Image = CoreLoadedImageInfo (ImageHandle);\r
   if (Image == NULL ) {\r
     //\r
     // The image handle is not valid\r
     //\r
-    return EFI_INVALID_PARAMETER;\r
+    Status = EFI_INVALID_PARAMETER;\r
+    goto Done;\r
   }\r
 \r
   if (Image->Started) {\r
@@ -1329,6 +1352,8 @@ Returns:
     CoreUnloadAndCloseImage (Image, TRUE);\r
   }\r
 \r
+Done:\r
+  CoreRestoreTpl (OldTpl);\r
   return Status;\r
 }\r
 \r