]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkModulePkg/Universal/PCD/Dxe/Service.c
Make the EdkMoudlePkg build by allocate mCallbackFnTable at runtime as PCD_TOTAL_TOKE...
[mirror_edk2.git] / EdkModulePkg / Universal / PCD / Dxe / Service.c
index e1aded74f99cbed9993d58152675f07fc07f062b..00437f116c327b316dd75f07412a333cf2d9b858 100644 (file)
@@ -24,7 +24,7 @@ Module Name: Service.c
 \r
 PCD_DATABASE * mPcdDatabase;\r
 \r
-LIST_ENTRY mCallbackFnTable[PCD_TOTAL_TOKEN_NUMBER];\r
+LIST_ENTRY *mCallbackFnTable;\r
 \r
 VOID *\r
 GetWorker (\r
@@ -282,13 +282,24 @@ BuildPcdDxeDataBase (
   ASSERT (mPcdDatabase != NULL);\r
 \r
   GuidHob = GetFirstGuidHob (&gPcdDataBaseHobGuid);\r
-  ASSERT (GuidHob != NULL);\r
 \r
-  PeiDatabase = (PEI_PCD_DATABASE *) GET_GUID_HOB_DATA (GuidHob);\r
-  //\r
-  // Copy PCD Entries refereneced in PEI phase to PCD DATABASE\r
-  //\r
-  CopyMem (&mPcdDatabase->PeiDb, PeiDatabase, sizeof (PEI_PCD_DATABASE));\r
+  if (GuidHob != NULL) {\r
+\r
+    //\r
+    // We will copy over the PEI phase's PCD Database.\r
+    // \r
+    // If no PEIMs use dynamic Pcd Entry, the Pcd Service PEIM\r
+    // should not be included at all. So the GuidHob could\r
+    // be NULL. If it is NULL, we just copy over the DXE Default\r
+    // Value to PCD Database.\r
+    //\r
+    \r
+    PeiDatabase = (PEI_PCD_DATABASE *) GET_GUID_HOB_DATA (GuidHob);\r
+    //\r
+    // Copy PCD Entries refereneced in PEI phase to PCD DATABASE\r
+    //\r
+    CopyMem (&mPcdDatabase->PeiDb, PeiDatabase, sizeof (PEI_PCD_DATABASE));\r
+  }\r
 \r
   //\r
   // Copy PCD Entries with default value to PCD DATABASE\r
@@ -299,6 +310,11 @@ BuildPcdDxeDataBase (
   //\r
   // Initialized the Callback Function Table\r
   //\r
+\r
+  if (PCD_TOTAL_TOKEN_NUMBER != 0) {\r
+    mCallbackFnTable = AllocateZeroPool (PCD_TOTAL_TOKEN_NUMBER);\r
+  }\r
+  \r
   for (Idx = 0; Idx < PCD_TOTAL_TOKEN_NUMBER; Idx++) {\r
     InitializeListHead (&mCallbackFnTable[Idx]);\r
   }\r