]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Sync EDKII BaseTools to BaseTools project r1928
authorlgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 12 Mar 2010 10:54:01 +0000 (10:54 +0000)
committerlgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 12 Mar 2010 10:54:01 +0000 (10:54 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10234 6f19259b-4bc3-4df7-8a09-765794883524

29 files changed:
BaseTools/Bin/Win32/BootSectImage.exe
BaseTools/Bin/Win32/EfiLdrImage.exe
BaseTools/Bin/Win32/EfiRom.exe
BaseTools/Bin/Win32/GenBootSector.exe
BaseTools/Bin/Win32/GenCrc32.exe
BaseTools/Bin/Win32/GenFds.exe
BaseTools/Bin/Win32/GenFfs.exe
BaseTools/Bin/Win32/GenFv.exe
BaseTools/Bin/Win32/GenFw.exe
BaseTools/Bin/Win32/GenPage.exe
BaseTools/Bin/Win32/GenSec.exe
BaseTools/Bin/Win32/GenVtf.exe
BaseTools/Bin/Win32/LzmaCompress.exe
BaseTools/Bin/Win32/Split.exe
BaseTools/Bin/Win32/TianoCompress.exe
BaseTools/Bin/Win32/VfrCompile.exe
BaseTools/Bin/Win32/VolInfo.exe
BaseTools/Bin/Win32/build.exe
BaseTools/Conf/build_rule.template
BaseTools/Conf/tools_def.template
BaseTools/Source/C/GenFw/GenFw.c
BaseTools/Source/C/GenFw/elf_common.h
BaseTools/Source/Python/AutoGen/GenMake.py
BaseTools/Source/Python/Common/DscClassObject.py
BaseTools/Source/Python/Common/FdfParserLite.py
BaseTools/Source/Python/Common/Parsing.py
BaseTools/Source/Python/GenFds/FdfParser.py
BaseTools/Source/Python/build/BuildReport.py
BaseTools/Source/Python/build/build.py

index 9d041086254b550530642262ce5b5bb9b66d6021..bad78df9ca7847c8efe96aa177189e9f6e399ef4 100755 (executable)
Binary files a/BaseTools/Bin/Win32/BootSectImage.exe and b/BaseTools/Bin/Win32/BootSectImage.exe differ
index cc1bbd5cacfc0d8f60e7f6b8b6282dd5b73bab3d..980169d243d650d876a64bd3b4a479cf7e8bf113 100755 (executable)
Binary files a/BaseTools/Bin/Win32/EfiLdrImage.exe and b/BaseTools/Bin/Win32/EfiLdrImage.exe differ
index 02a8851b2e69073772fe40ff2819d93acb172303..039c3d5e9115d2fb9328ba551939292e16a03670 100755 (executable)
Binary files a/BaseTools/Bin/Win32/EfiRom.exe and b/BaseTools/Bin/Win32/EfiRom.exe differ
index 1fd392f05a7cb6e26a0d68b67088e5e9a1053169..b325488fd64e6771cd20b1cbb6ae7c37ef3d83e1 100755 (executable)
Binary files a/BaseTools/Bin/Win32/GenBootSector.exe and b/BaseTools/Bin/Win32/GenBootSector.exe differ
index c35f3bbef179364549c269e0628002e2cf31b0c2..4e8c346d6101d1469683f1081e000006e04b1089 100755 (executable)
Binary files a/BaseTools/Bin/Win32/GenCrc32.exe and b/BaseTools/Bin/Win32/GenCrc32.exe differ
index 6dcfc846983c109270c1b4e16a6f948cc5e63b13..d471913c805ccf27100d47f05aec55f254f628b9 100755 (executable)
Binary files a/BaseTools/Bin/Win32/GenFds.exe and b/BaseTools/Bin/Win32/GenFds.exe differ
index 0b2909522de1aea93006c2202b0f4b58fb69d3dc..13fbaef7b2b265e3ecb5d0e2607fde1a8d749d6d 100755 (executable)
Binary files a/BaseTools/Bin/Win32/GenFfs.exe and b/BaseTools/Bin/Win32/GenFfs.exe differ
index 897cba72957a1a7b6f01ccf064e3a25a40d05c36..e133043a32843ff8f42cc5849bb06c8a5bc729bc 100755 (executable)
Binary files a/BaseTools/Bin/Win32/GenFv.exe and b/BaseTools/Bin/Win32/GenFv.exe differ
index 727176ae2da303716caea3c1950655efdc016103..e6b1745d0a680554319e9d117268eec58de34c9c 100755 (executable)
Binary files a/BaseTools/Bin/Win32/GenFw.exe and b/BaseTools/Bin/Win32/GenFw.exe differ
index 407eb054238d70330fee0d45445f504d7af8a4d3..9e893751fbf70e1936e8e48a1f896d03f83ecf7b 100755 (executable)
Binary files a/BaseTools/Bin/Win32/GenPage.exe and b/BaseTools/Bin/Win32/GenPage.exe differ
index e4c0407b2425ae4cda27667e32a24806dd79a27a..117f7ad5b3e6800bc708b73de30e0900c9d25015 100755 (executable)
Binary files a/BaseTools/Bin/Win32/GenSec.exe and b/BaseTools/Bin/Win32/GenSec.exe differ
index 32f7dce991a66bda300d6423c0dcf51bc900fb1f..5ca6badaa3429a704a02854c4eda8ac2de4758e7 100755 (executable)
Binary files a/BaseTools/Bin/Win32/GenVtf.exe and b/BaseTools/Bin/Win32/GenVtf.exe differ
index 425fd346a846c116adc966202682d920261ca090..f953765ff0ecc0fd083d5e35b68489eb7a95dd87 100644 (file)
Binary files a/BaseTools/Bin/Win32/LzmaCompress.exe and b/BaseTools/Bin/Win32/LzmaCompress.exe differ
index aa66468d841df2001f5b21f6fe227c67435b8f81..9b3565f3105e0444d2470f201a86322f6919b9ce 100755 (executable)
Binary files a/BaseTools/Bin/Win32/Split.exe and b/BaseTools/Bin/Win32/Split.exe differ
index aa3ded3ac356d06488276bb05eb4112bc6d124b2..fc09bb6a0e1a38da42bd05faaefe8c1912a8922a 100755 (executable)
Binary files a/BaseTools/Bin/Win32/TianoCompress.exe and b/BaseTools/Bin/Win32/TianoCompress.exe differ
index 2394a0074a68570df8894da7a1c8356f0833238a..ecefe7c0626e882f0e757faff15b547625477b16 100755 (executable)
Binary files a/BaseTools/Bin/Win32/VfrCompile.exe and b/BaseTools/Bin/Win32/VfrCompile.exe differ
index e54096b32d49b5f464d574c76d402645069adbe5..80dad20679f6e701064fa4475944e4f808e9db14 100755 (executable)
Binary files a/BaseTools/Bin/Win32/VolInfo.exe and b/BaseTools/Bin/Win32/VolInfo.exe differ
index 0803c85e5288be225c009b151314a8ff6f5f0fef..2a575fa69dcf672201412a83747c0651e0447c9a 100755 (executable)
Binary files a/BaseTools/Bin/Win32/build.exe and b/BaseTools/Bin/Win32/build.exe differ
index 8a7663db27504001523cf5e7e7bc3ffbf2199e4e..95bb5edc28feceb3dab239865b88d95bff1bb324 100644 (file)
         "$(CC)" $(CC_FLAGS) -o ${dst} $(INC) ${src}\r
         "$(SYMRENAME)" $(SYMRENAME_FLAGS) ${dst}\r
 \r
+    <Command.ARMGCC>\r
+        "$(CC)" $(CC_FLAGS) -o ${dst} $(INC) ${src}\r
+\r
+\r
 [C-Header-File]\r
     <InputFile>\r
         *.h, *.H\r
     <Command.RVCT>\r
         "$(SLINK)" $(SLINK_FLAGS) ${dst} --via $(OBJECT_FILES_LIST)\r
     \r
-    <Command.RVCTCYGWIN>\r
+    <Command.RVCTCYGWIN, Command.ARMGCC>\r
         # $(OBJECT_FILES_LIST) has wrong paths for cygwin\r
         "$(SLINK)" $(SLINK_FLAGS) ${dst} $(OBJECT_FILES)\r
 \r
         "$(DLINK)" -o ${dst} $(DLINK_FLAGS) -\( $(DLINK_SPATH) @$(STATIC_LIBRARY_FILES_LIST) -\) $(DLINK2_FLAGS)\r
         "$(OBJCOPY)" $(OBJCOPY_FLAGS) ${dst}\r
 \r
+    <Command.ARMGCC>\r
+        "$(DLINK)" -o ${dst} $(DLINK_FLAGS) -( $(DLINK_SPATH) $(STATIC_LIBRARY_FILES) -) $(DLINK2_FLAGS)\r
+\r
     <Command.RVCT>\r
         "$(DLINK)" $(DLINK_FLAGS) -o ${dst} $(DLINK_SPATH) --via $(STATIC_LIBRARY_FILES_LIST) $(DLINK2_FLAGS)\r
 \r
     <Command.GCC>\r
         "$(DLINK)" $(DLINK_FLAGS) -\( $(DLINK_SPATH) @$(STATIC_LIBRARY_FILES_LIST) -\) $(DLINK2_FLAGS)\r
 \r
+    <Command.ARMGCC>\r
+        "$(DLINK)" $(DLINK_FLAGS) -( $(DLINK_SPATH) $(STATIC_LIBRARY_FILES) -) $(DLINK2_FLAGS)\r
+\r
     <Command.RVCT>\r
         "$(DLINK)" $(DLINK_FLAGS) -o ${dst} $(DLINK_SPATH) --via $(STATIC_LIBRARY_FILES_LIST) $(DLINK2_FLAGS)\r
 \r
     <OutputFile>\r
         $(DEBUG_DIR)(+)$(MODULE_NAME).efi\r
 \r
-    <Command.MSFT, Command.INTEL, Command.RVCT>  \r
+    <Command.MSFT, Command.INTEL, Command.RVCT, Command.ARMGCC>  \r
         GenFw -e $(MODULE_TYPE) -o ${dst} ${src}\r
         $(CP) ${dst} $(OUTPUT_DIR)\r
         $(CP) ${dst} $(BIN_DIR)\r
index 2dbc776d94ca55cd8636c100353771c33a6779de..b53826ba05fc94886a250b3a9ed2bb26c2767071 100644 (file)
@@ -140,8 +140,8 @@ DEFINE IPHONE_TOOLS            = /Developer/Platforms/iPhoneOS.platform/Develope
 DEFINE RVCT31_TOOLS_PATH       = c:/Program Files/ARM/RVCT/Programs/3.1/761/win_32-pentium\r
 DEFINE RVCT31CYGWIN_TOOLS_PATH = /cygdrive/c/Program Files/ARM/RVCT/Programs/3.1/761/win_32-pentium\r
 \r
-# Update to the location of the gcc executables\r
-DEFINE ARMGCC_BIN              = /\r
+DEFINE SOURCERY_TOOLS        = c:/Program Files/CodeSourcery/Sourcery G++ Lite/bin\r
+DEFINE SOURCERY_CYGWIN_TOOLS = /cygdrive/c/Program Files/CodeSourcery/Sourcery G++ Lite/bin\r
 \r
 ####################################################################################\r
 #\r
@@ -1589,8 +1589,8 @@ DEFINE GCC44_ASM_FLAGS               = DEF(GCC_ASM_FLAGS)
 *_UNIXGCC_*_MAKE_PATH                    = make\r
 *_UNIXGCC_*_ASL_PATH                     = DEF(UNIX_IASL_BIN)\r
 \r
-*_UNIXGCC_IA32_DLINK_FLAGS               = DEF(GCC_IA32_X64_DLINK_FLAGS)\r
-*_UNIXGCC_X64_DLINK_FLAGS                = DEF(GCC_IA32_X64_DLINK_FLAGS)\r
+*_UNIXGCC_IA32_DLINK_FLAGS               = DEF(GCC_IA32_X64_DLINK_FLAGS) --image-base=0\r
+*_UNIXGCC_X64_DLINK_FLAGS                = DEF(GCC_IA32_X64_DLINK_FLAGS) --image-base=0\r
 *_UNIXGCC_IA32_ASLDLINK_FLAGS            = DEF(GCC_IA32_X64_ASLDLINK_FLAGS)\r
 *_UNIXGCC_X64_ASLDLINK_FLAGS             = DEF(GCC_IA32_X64_ASLDLINK_FLAGS)\r
 *_UNIXGCC_*_ASM_FLAGS                    = DEF(GCC_ASM_FLAGS)\r
@@ -1717,8 +1717,8 @@ DEFINE GCC44_ASM_FLAGS               = DEF(GCC_ASM_FLAGS)
 *_CYGGCC_*_MAKE_PATH             = DEF(MS_VS_BIN)\nmake.exe\r
 *_CYGGCC_*_ASL_PATH              = DEF(DEFAULT_WIN_ASL_BIN)\r
 \r
-*_CYGGCC_IA32_DLINK_FLAGS               = DEF(GCC_IA32_X64_DLINK_FLAGS)\r
-*_CYGGCC_X64_DLINK_FLAGS                = DEF(GCC_IA32_X64_DLINK_FLAGS)\r
+*_CYGGCC_IA32_DLINK_FLAGS               = DEF(GCC_IA32_X64_DLINK_FLAGS) --image-base=0\r
+*_CYGGCC_X64_DLINK_FLAGS                = DEF(GCC_IA32_X64_DLINK_FLAGS) --image-base=0\r
 *_CYGGCC_IA32_ASLDLINK_FLAGS            = DEF(GCC_IA32_X64_ASLDLINK_FLAGS)\r
 *_CYGGCC_X64_ASLDLINK_FLAGS             = DEF(GCC_IA32_X64_ASLDLINK_FLAGS)\r
 *_CYGGCC_*_MAKE_FLAGS                   = /nologo\r
@@ -1745,10 +1745,11 @@ DEFINE GCC44_ASM_FLAGS               = DEF(GCC_ASM_FLAGS)
 *_CYGGCC_IA32_ASLPP_PATH         = DEF(CYGWIN_BINIA32)gcc\r
 *_CYGGCC_IA32_ASLDLINK_PATH      = DEF(CYGWIN_BINIA32)ld\r
 *_CYGGCC_IA32_RC_PATH            = DEF(CYGWIN_BINIA32)objcopy\r
-*_CYGGCC_IA32_OBJECT_PATH        = DEF(CYGWIN_BINIA32)objcopy\r
+*_CYGGCC_IA32_OBJCOPY_PATH       = DEF(CYGWIN_BINIA32)objcopy\r
 \r
 *_CYGGCC_IA32_CC_FLAGS           = DEF(GCC_IA32_CC_FLAGS)\r
 *_CYGGCC_IA32_RC_FLAGS           = DEF(GCC_IA32_RC_FLAGS)\r
+*_CYGGCC_IA32_OBJCOPY_FLAGS      =\r
 \r
 ##################\r
 # X64 definitions\r
@@ -1764,10 +1765,11 @@ DEFINE GCC44_ASM_FLAGS               = DEF(GCC_ASM_FLAGS)
 *_CYGGCC_X64_ASLPP_PATH          = DEF(CYGWIN_BINX64)gcc\r
 *_CYGGCC_X64_ASLDLINK_PATH       = DEF(CYGWIN_BINX64)ld\r
 *_CYGGCC_X64_RC_PATH             = DEF(CYGWIN_BINX64)objcopy\r
-*_CYGGCC_X64_OBJECT_PATH         = DEF(CYGWIN_BINX64)objcopy\r
+*_CYGGCC_X64_OBJCOPY_PATH        = DEF(CYGWIN_BINX64)objcopy\r
 \r
 *_CYGGCC_X64_CC_FLAGS            = DEF(GCC_X64_CC_FLAGS)\r
 *_CYGGCC_X64_RC_FLAGS            = DEF(GCC_X64_RC_FLAGS)\r
+*_CYGGCC_X64_OBJCOPY_FLAGS       =\r
 \r
 ##################\r
 # IPF definitions\r
@@ -1784,7 +1786,6 @@ DEFINE GCC44_ASM_FLAGS               = DEF(GCC_ASM_FLAGS)
 *_CYGGCC_IPF_OBJCOPY_PATH        = DEF(CYGWIN_BINIPF)objcopy\r
 *_CYGGCC_IPF_SYMRENAME_PATH      = DEF(CYGWIN_BINIPF)objcopy\r
 *_CYGGCC_IPF_RC_PATH             = DEF(CYGWIN_BINIPF)objcopy\r
-*_CYGGCC_IPF_OBJECT_PATH         = DEF(CYGWIN_BINIPF)objcopy\r
 \r
 *_CYGGCC_IPF_CC_FLAGS             = DEF(GCC_IPF_CC_FLAGS)\r
 *_CYGGCC_IPF_DLINK_FLAGS          = DEF(GCC_IPF_DLINK_FLAGS)\r
@@ -2839,13 +2840,16 @@ RELEASE_RVCT31CYGWIN_ARM_CC_FLAGS  = "$(CCPATH_FLAG)" $(ARCHCC_FLAGS) $(PLATFORM
 \r
 ####################################################################################\r
 #\r
-# ARM GCC (GCC 4.1.1, etc.)\r
+# ARM GCC (www.codesourcery.com)\r
 #\r
 ####################################################################################\r
 #  ARMGCC         - ARM version of the GCC cross compiler\r
 \r
 *_ARMGCC_*_*_FAMILY          = GCC\r
-*_ARMGCC_*_MAKE_PATH         = make\r
+*_ARMGCC_*_*_BUILDRULEFAMILY = ARMGCC\r
+\r
+*_ARMGCC_*_MAKE_PATH         = DEF(SOURCERY_TOOLS)/cs-make\r
+*_ARMGCC_*_MAKE_FLAGS        = --no-print-directory\r
 \r
 ##################\r
 # ASL definitions\r
@@ -2861,24 +2865,24 @@ RELEASE_RVCT31CYGWIN_ARM_CC_FLAGS  = "$(CCPATH_FLAG)" $(ARCHCC_FLAGS) $(PLATFORM
 # ARM definitions\r
 ##################\r
 \r
-*_ARMGCC_ARM_ASLCC_PATH      = DEF(ARMGCC_BIN)/arm-elf-gcc\r
-*_ARMGCC_ARM_ASLDLINK_PATH   = DEF(ARMGCC_BIN)/arm-elf-ld\r
-*_ARMGCC_ARM_ASLPP_PATH      = DEF(ARMGCC_BIN)/arm-elf-gcc\r
+*_ARMGCC_ARM_ASLCC_PATH      = DEF(SOURCERY_TOOLS)/arm-none-eabi-gcc\r
+*_ARMGCC_ARM_ASLDLINK_PATH   = DEF(SOURCERY_TOOLS)/arm-none-eabi-ld\r
+*_ARMGCC_ARM_ASLPP_PATH      = DEF(SOURCERY_TOOLS)/arm-none-eabi-gcc\r
 \r
-*_ARMGCC_ARM_CC_PATH         = DEF(ARMGCC_BIN)/arm-elf-gcc\r
-*_ARMGCC_ARM_SLINK_PATH      = DEF(ARMGCC_BIN)/arm-elf-ar\r
-*_ARMGCC_ARM_DLINK_PATH      = DEF(ARMGCC_BIN)/arm-elf-ld\r
-*_ARMGCC_ARM_ASM_PATH        = DEF(ARMGCC_BIN)/arm-elf-as\r
-*_ARMGCC_ARM_PP_PATH         = DEF(ARMGCC_BIN)/arm-elf-gcc\r
-*_ARMGCC_ARM_VFRPP_PATH      = DEF(ARMGCC_BIN)/arm-elf-gcc\r
+*_ARMGCC_ARM_CC_PATH         = DEF(SOURCERY_TOOLS)/arm-none-eabi-gcc\r
+*_ARMGCC_ARM_SLINK_PATH      = DEF(SOURCERY_TOOLS)/arm-none-eabi-ar\r
+*_ARMGCC_ARM_DLINK_PATH      = DEF(SOURCERY_TOOLS)/arm-none-eabi-ld\r
+*_ARMGCC_ARM_ASM_PATH        = DEF(SOURCERY_TOOLS)/arm-none-eabi-as\r
+*_ARMGCC_ARM_PP_PATH         = DEF(SOURCERY_TOOLS)/arm-none-eabi-gcc\r
+*_ARMGCC_ARM_VFRPP_PATH      = DEF(SOURCERY_TOOLS)/arm-none-eabi-gcc\r
 \r
 #\r
 # Use default values, or override in DSC file\r
 #\r
-*_ARMGCC_ARM_ARCHCC_FLAGS    = \r
-*_ARMGCC_ARM_ARCHASM_FLAGS   = \r
+*_ARMGCC_ARM_ARCHCC_FLAGS    = -march=armv7-a -mthumb \r
+*_ARMGCC_ARM_ARCHASM_FLAGS   = -march=armv7-a\r
 *_ARMGCC_ARM_ARCHDLINK_FLAGS = \r
-*_ARMGCC_ARM_PLATFORM_FLAGS  =\r
+*_ARMGCC_ARM_PLATFORM_FLAGS  = -march=armv7-a\r
 \r
   DEBUG_ARMGCC_ARM_ASM_FLAGS   = $(ARCHASM_FLAGS) -mlittle-endian -g\r
 RELEASE_ARMGCC_ARM_ASM_FLAGS   = $(ARCHASM_FLAGS) -mlittle-endian\r
@@ -2886,11 +2890,12 @@ RELEASE_ARMGCC_ARM_ASM_FLAGS   = $(ARCHASM_FLAGS) -mlittle-endian
 *_ARMGCC_ARM_PP_FLAGS    = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS)  -E -x assembler-with-cpp -include $(DEST_DIR_DEBUG)/AutoGen.h\r
 *_ARMGCC_ARM_VFRPP_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS)  -x c -E -P -DVFRCOMPILE --include $(DEST_DIR_DEBUG)/$(MODULE_NAME)StrDefs.h\r
 \r
-*_ARMGCC_ARM_MAKE_PATH   = make\r
-\r
-*_ARMGCC_ARM_SLINK_FLAGS = -r\r
-*_ARMGCC_ARM_DLINK_FLAGS =  $(ARCHDLINK_FLAGS) --emit-relocs --oformat=elf32-littlearm -nostdlib -u $(IMAGE_ENTRY_POINT) -e $(IMAGE_ENTRY_POINT) -Map $(DEST_DIR_DEBUG)/$(BASE_NAME).map\r
-# --gc-sections\r
+*_ARMGCC_ARM_SLINK_FLAGS =  -rc\r
+*_ARMGCC_ARM_DLINK_FLAGS =  $(ARCHDLINK_FLAGS)  --oformat=elf32-littlearm -nostdlib -u $(IMAGE_ENTRY_POINT) -e $(IMAGE_ENTRY_POINT) -Map $(DEST_DIR_DEBUG)/$(BASE_NAME).map\r
+#\r
+# Had to remove --emit-relocs to get compile working. Images don't work correctly (linked at 0, no relocations)\r
+# --emit-relocs\r
+#\r
 \r
   DEBUG_ARMGCC_ARM_CC_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) -mfpu=fpa -mlittle-endian -g -O2 -mabi=aapcs -mapcs -fno-short-enums -save-temps -combine -fsigned-char -fshort-wchar -fno-strict-aliasing -ffunction-sections -fdata-sections -Wall -Werror -Wno-missing-braces -fomit-frame-pointer -c -include AutoGen.h\r
 RELEASE_ARMGCC_ARM_CC_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) -mfpu=fpa -mlittle-endian    -O2 -mabi=aapcs -mapcs -fno-short-enums -save-temps -combine -fsigned-char -fshort-wchar -fno-strict-aliasing -ffunction-sections -fdata-sections -Wall -Werror -Wno-missing-braces -fomit-frame-pointer -c -include AutoGen.h\r
index d42c88e23d9f193baef5e6b7d3871b4d8406016b..4d6081478079c8261cdeade83eeae31fd2781fd2 100644 (file)
@@ -24,6 +24,8 @@ Abstract:
 #ifndef __GNUC__\r
 #include <windows.h>\r
 #include <io.h>\r
+#include <sys/types.h>\r
+#include <sys/stat.h>\r
 #endif\r
 #include <stdio.h>\r
 #include <stdlib.h>\r
@@ -1034,14 +1036,20 @@ WriteSections(
               - (SecOffset - SecShdr->sh_addr);\r
             break;\r
           default:\r
-            Error (NULL, 0, 3000, "Invalid", "%s unhandled section type %x.", mInImageName, (unsigned) ELF_R_TYPE(Rel->r_info));\r
+            Error (NULL, 0, 3000, "Invalid", "%s unsupported ELF EM_386 relocation 0x%x.", mInImageName, (unsigned) ELF_R_TYPE(Rel->r_info));\r
           }\r
         } else if (Ehdr->e_machine == EM_ARM) {\r
           switch (ELF32_R_TYPE(Rel->r_info)) {\r
           case R_ARM_RBASE:   // No relocation - no action required\r
-          case R_ARM_PC24:    // PC-relative relocations don't require modification\r
-          case R_ARM_XPC25:   // PC-relative relocations don't require modification\r
+          \r
+          // Thease are all PC-relative relocations and don't require modification\r
+          case R_ARM_PC24:    \r
+          case R_ARM_XPC25:   \r
+          case R_ARM_THM_PC22:\r
+          case R_ARM_THM_JUMP19:\r
+          case R_ARM_CALL:\r
             break;\r
+\r
           case R_ARM_ABS32:\r
           case R_ARM_RABS32:\r
             //\r
@@ -1050,7 +1058,7 @@ WriteSections(
             *(UINT32 *)Targ = *(UINT32 *)Targ - SymShdr->sh_addr + CoffSectionsOffset[Sym->st_shndx];\r
             break;\r
           default:\r
-            Error (NULL, 0, 3000, "Invalid", "%s unhandled section type %x.", mInImageName, (unsigned) ELF32_R_TYPE(Rel->r_info));\r
+            Error (NULL, 0, 3000, "Invalid", "WriteSections (): %s unsupported ELF EM_ARM relocation 0x%x.", mInImageName, (unsigned) ELF32_R_TYPE(Rel->r_info));\r
           }\r
         }\r
       }\r
@@ -1124,7 +1132,7 @@ GetPhdrByIndex (
 \r
 \r
 VOID\r
-WriteRelocations(\r
+WriteRelocations (\r
   VOID\r
   )\r
 {\r
@@ -1164,13 +1172,18 @@ WriteRelocations(
               EFI_IMAGE_REL_BASED_HIGHLOW);\r
               break;\r
             default:\r
-              Error (NULL, 0, 3000, "Invalid", "%s unhandled section type %x.", mInImageName, (unsigned) ELF_R_TYPE(Rel->r_info));\r
+              Error (NULL, 0, 3000, "Invalid", "%s unsupported ELF EM_386 relocation 0x%x.", mInImageName, (unsigned) ELF_R_TYPE(Rel->r_info));\r
             }\r
           } else if (Ehdr->e_machine == EM_ARM) {\r
             switch (ELF32_R_TYPE(Rel->r_info)) {\r
-            case R_ARM_RBASE:\r
+            case R_ARM_RBASE: // No relocation - no action required\r
+          \r
+            // Thease are all PC-relative relocations and don't require modification\r
             case R_ARM_PC24:\r
             case R_ARM_XPC25:\r
+            case R_ARM_THM_PC22:\r
+            case R_ARM_THM_JUMP19:\r
+            case R_ARM_CALL:\r
               break;\r
             case R_ARM_ABS32:\r
             case R_ARM_RABS32:\r
@@ -1180,8 +1193,9 @@ WriteRelocations(
                 EFI_IMAGE_REL_BASED_HIGHLOW\r
                 );\r
               break;\r
-            default:\r
-              Error (NULL, 0, 3000, "Invalid", "%s unhandled section type %x.", mInImageName, (unsigned) ELF32_R_TYPE(Rel->r_info));\r
+\r
+           default:\r
+              Error (NULL, 0, 3000, "Invalid", "WriteRelocations(): %s unsupported ELF EM_ARM relocation 0x%x.", mInImageName, (unsigned) ELF32_R_TYPE(Rel->r_info));\r
             }\r
           } else {\r
             Error (NULL, 0, 3000, "Not Supported", "This tool does not support relocations for ELF with e_machine %u (processor type).", (unsigned) Ehdr->e_machine);\r
@@ -1217,6 +1231,9 @@ WriteRelocations(
             case  DT_RELENT:\r
               RelElementSize = Dyn->d_un.d_val;\r
               break;\r
+\r
+            default:\r
+              break;\r
           }\r
           Dyn++;\r
         }\r
@@ -1226,7 +1243,13 @@ WriteRelocations(
 \r
         for (K = 0; K < RelSize; K += RelElementSize) {\r
 \r
-          Rel = (Elf32_Rel *) ((UINT8 *) Ehdr + DynamicSegment->p_offset + RelOffset + K);\r
+          if (DynamicSegment->p_paddr == 0) {\r
+            // This seems to be how it works on armcc???? Have the email in to find out?\r
+            Rel = (Elf32_Rel *) ((UINT8 *) Ehdr + DynamicSegment->p_offset + RelOffset + K);\r
+          } else {\r
+            // This is how it reads in the ELF specification\r
+            Rel = (Elf32_Rel *) ((UINT8 *) Ehdr + RelOffset + K);\r
+          }\r
 \r
           switch (ELF32_R_TYPE (Rel->r_info)) {\r
           case  R_ARM_RBASE:\r
@@ -1242,7 +1265,8 @@ WriteRelocations(
             CoffAddFixup (CoffSectionsOffset[ELF32_R_SYM (Rel->r_info)] + (Rel->r_offset - TargetSegment->p_vaddr), EFI_IMAGE_REL_BASED_HIGHLOW);\r
             break;\r
           default:\r
-            Error (NULL, 0, 3000, "Invalid", "%s bad ARM dynamic relocations, unkown type.", mInImageName);\r
+            Error (NULL, 0, 3000, "Invalid", "%s bad ARM dynamic relocations, unkown type %d.", mInImageName, ELF32_R_TYPE (Rel->r_info));\r
+            break;\r
           }\r
         }\r
         break;\r
@@ -1993,6 +2017,9 @@ Returns:
   FILE                             *ReportFile;\r
   CHAR8                            *ReportFileName;\r
   UINTN                            FileLen;\r
+  time_t                           InputFileTime;\r
+  time_t                           OutputFileTime;\r
+  struct stat                      Stat_Buf;\r
 \r
   SetUtilityName (UTILITY_NAME);\r
 \r
@@ -2038,6 +2065,8 @@ Returns:
   HiiSectionHeader       = NULL;\r
   NewBaseAddress         = 0;\r
   NegativeAddr           = FALSE;\r
+  InputFileTime          = 0;\r
+  OutputFileTime         = 0;\r
 \r
   if (argc == 1) {\r
     Error (NULL, 0, 1001, "Missing options", "No input options.");\r
@@ -2434,6 +2463,14 @@ Returns:
   if (OutImageName != NULL) {\r
     fpOut = fopen (OutImageName, "rb");\r
     if (fpOut != NULL) {\r
+      //\r
+      // Get Output file time stamp\r
+      //\r
+      fstat(fileno (fpOut), &Stat_Buf);\r
+      OutputFileTime = Stat_Buf.st_mtime;\r
+      //\r
+      // Get Output file data\r
+      //\r
       OutputFileLength = _filelength (fileno (fpOut));\r
       OutputFileBuffer = malloc (OutputFileLength);\r
       if (OutputFileBuffer == NULL) {\r
@@ -2460,6 +2497,14 @@ Returns:
     Error (NULL, 0, 0001, "Error opening file", mInImageName);\r
     goto Finish;\r
   }\r
+  //\r
+  // Get Iutput file time stamp\r
+  //\r
+  fstat(fileno (fpIn), &Stat_Buf);\r
+  InputFileTime = Stat_Buf.st_mtime;\r
+  //\r
+  // Get Input file data\r
+  //\r
   InputFileLength = _filelength (fileno (fpIn));\r
   InputFileBuffer = malloc (InputFileLength);\r
   if (InputFileBuffer == NULL) {\r
@@ -3467,6 +3512,27 @@ Returns:
     FileLength = FileLength + sizeof (EFI_TE_IMAGE_HEADER);\r
     memcpy (FileBuffer, &TEImageHeader, sizeof (EFI_TE_IMAGE_HEADER));\r
     VerboseMsg ("the size of output file is %u bytes", (unsigned) (FileLength));\r
+  } else {\r
+\r
+    //\r
+    // Following codes are to fix the objcopy's issue:\r
+    // objcopy in binutil 2.50.18 will set PE image's charactices to "RELOC_STRIPPED" if image has no ".reloc" section\r
+    // It cause issue for EFI image which has no ".reloc" sections.\r
+    // Following codes will be removed when objcopy in binutil fix this problem for PE image.\r
+    //\r
+    if ((PeHdr->Pe32.FileHeader.Characteristics & EFI_IMAGE_FILE_RELOCS_STRIPPED) != 0) {\r
+      if (PeHdr->Pe32.OptionalHeader.Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) {\r
+        Optional32 = (EFI_IMAGE_OPTIONAL_HEADER32 *)&PeHdr->Pe32.OptionalHeader;\r
+        if (Optional32->ImageBase == 0) {\r
+          PeHdr->Pe32.FileHeader.Characteristics &= ~EFI_IMAGE_FILE_RELOCS_STRIPPED;\r
+        }\r
+      } else if (PeHdr->Pe32.OptionalHeader.Magic == EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC) {\r
+        Optional64 = (EFI_IMAGE_OPTIONAL_HEADER64 *)&PeHdr->Pe32.OptionalHeader;\r
+        if (Optional64->ImageBase == 0) {\r
+          PeHdr->Pe32.FileHeader.Characteristics &= ~EFI_IMAGE_FILE_RELOCS_STRIPPED;\r
+        }\r
+      }\r
+    }\r
   }\r
 \r
 WriteFile:\r
@@ -3487,7 +3553,10 @@ WriteFile:
       VerboseMsg ("the size of output file is %u bytes", (unsigned) FileLength);\r
     }\r
   } else {\r
-    if ((FileLength != OutputFileLength) || (memcmp (FileBuffer, OutputFileBuffer, FileLength) != 0)) {\r
+    if ((OutputFileTime < InputFileTime) || (FileLength != OutputFileLength) || (memcmp (FileBuffer, OutputFileBuffer, FileLength) != 0)) {\r
+      //\r
+      // Update File when File is changed or File is old.\r
+      //\r
       fpOut = fopen (OutImageName, "wb");\r
       if (fpOut == NULL) {\r
         Error (NULL, 0, 0001, "Error opening output file", OutImageName);\r
index 1cd3f53907547d86f2b4b654b9ce1ad72d7bec5c..3798c95d613d42b5697c507cca0d674f8e07baee 100644 (file)
@@ -597,6 +597,8 @@ typedef struct {
 #define        R_ARM_GOTPC             25      /* Add PC-relative GOT table address. */
 #define        R_ARM_GOT32             26      /* Add PC-relative GOT offset. */
 #define        R_ARM_PLT32             27      /* Add PC-relative PLT offset. */
+#define R_ARM_CALL          28
+#define R_ARM_THM_JUMP19    51
 #define        R_ARM_GNU_VTENTRY       100
 #define        R_ARM_GNU_VTINHERIT     101
 #define        R_ARM_RSBREL32          250
index c5d8991e07677bb307c68f3381e8109ba5115f7b..b58d0c641f4b1a284c12a9b1fa3a1f6b1efed5ff 100644 (file)
@@ -1,7 +1,7 @@
 ## @file
 # Create makefile for MS nmake and GNU make
 #
-# Copyright (c) 2007, Intel Corporation
+# Copyright (c) 2007 - 2010, 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
@@ -26,7 +26,7 @@ from BuildEngine import *
 import Common.GlobalData as GlobalData
 
 ## Regular expression for finding header file inclusions
-gIncludePattern = re.compile(r"^[ \t]*#[ \t]*include(?:[ \t]*(?:\\(?:\r\n|\r|\n))*[ \t]*)*(?:[\"<][ \t]*)([\w.\\/]+)(?:[ \t]*[\">])", re.MULTILINE|re.UNICODE)
+gIncludePattern = re.compile(r"^[ \t]*#?[ \t]*include(?:[ \t]*(?:\\(?:\r\n|\r|\n))*[ \t]*)*(?:[\"<]?[ \t]*)([\w.\\/]+)(?:[ \t]*[\">]?)", re.MULTILINE|re.UNICODE)
 
 ## Regular expression for matching macro used in header file inclusion
 gMacroPattern = re.compile("([_A-Z][_A-Z0-9]*)[ \t]*\((.+)\)", re.UNICODE)
index 50b6cc5bcefd753559e17943423af42b4f129ccd..c25580ac3756407ea0c4d31081eff50a5623bc66 100644 (file)
@@ -1,7 +1,7 @@
 ## @file\r
 # This file is used to define each component of DSC file\r
 #\r
-# Copyright (c) 2007 ~ 2008, Intel Corporation\r
+# Copyright (c) 2007 - 2010, 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
@@ -989,10 +989,14 @@ class Dsc(DscObject):
             #\r
             elif PreviousIf[2] in (MODEL_META_DATA_CONDITIONAL_STATEMENT_IF, Model):\r
                 List = PreviousIf[0].split(' ')\r
-                Value1 = List[0]\r
-                Value2 = List[1]\r
-                Value3 = List[2]\r
-                Value3 = SplitString(Value3)\r
+                Value1, Value2, Value3 = '', '==', '0'\r
+                if len(List) == 3:\r
+                    Value1 = List[0]\r
+                    Value2 = List[1]\r
+                    Value3 = List[2]\r
+                    Value3 = SplitString(Value3)\r
+                if len(List) == 1:\r
+                    Value1 = List[0]\r
                 Model = PreviousIf[2]\r
                 self.TblDsc.Insert(Model, Value1, Value2, Value3, ArchList, BelongsToItem, self.FileID, PreviousIf[1], StartColumn, EndLine, EndColumn, Enabled)\r
             #\r
index eb7b0d75146665ef80814940af79e1bb13b7f16a..b181e65d162b0c2888578508a476bff9ec4f72f0 100644 (file)
@@ -1760,8 +1760,8 @@ class FdfParser(object):
         if not self.__GetNextHexNumber():\r
             raise Warning("expected Hex byte At Line ", self.FileName, self.CurrentLineNumber)\r
         \r
-        if len(self.__Token) > 4:\r
-            raise Warning("Hex byte(must be 2 digits) too long At Line ", self.FileName, self.CurrentLineNumber)\r
+        if len(self.__Token) > 18:\r
+            raise Warning("Hex string can't be converted to a valid UINT64 value", self.FileName, self.CurrentLineNumber)\r
         \r
         DataString = self.__Token\r
         DataString += ","\r
@@ -1792,8 +1792,8 @@ class FdfParser(object):
             if not self.__GetNextHexNumber():\r
                 raise Warning("expected Hex byte At Line ", self.FileName, self.CurrentLineNumber)\r
         \r
-            if len(self.__Token) > 4:\r
-                raise Warning("Hex byte(must be 2 digits) too long At Line ", self.FileName, self.CurrentLineNumber)\r
+            if len(self.__Token) > 18:\r
+                raise Warning("Hex string can't be converted to a valid UINT64 value", self.FileName, self.CurrentLineNumber)\r
         \r
             DataString = self.__Token\r
             DataString += ","\r
index 6ab91fbc33d4f2b0e64ed82cbaeb92e13587eef4..3884b0521cdc23b96b0b11c8a8e17340d3c243e5 100644 (file)
@@ -291,17 +291,17 @@ def QueryInfItem(Table, Model, BelongsToItem):
 # @retval truple() A truple structure as (Family, ToolChain, Flag)\r
 #\r
 def GetBuildOption(String, File, LineNo = -1):\r
+    (Family, ToolChain, Flag) = ('', '', '')\r
     if String.find(TAB_EQUAL_SPLIT) < 0:\r
         RaiseParserError(String, 'BuildOptions', File, '[<Family>:]<ToolFlag>=Flag', LineNo)\r
-    (Family, ToolChain, Flag) = ('', '', '')\r
-    List = GetSplitValueList(String, TAB_EQUAL_SPLIT, MaxSplit = 1)\r
-    if List[0].find(':') > -1:\r
-        Family = List[0][ : List[0].find(':')].strip()\r
-        ToolChain = List[0][List[0].find(':') + 1 : ].strip()\r
     else:\r
-        ToolChain = List[0].strip()\r
-    Flag = List[1].strip()\r
-\r
+        List = GetSplitValueList(String, TAB_EQUAL_SPLIT, MaxSplit = 1)\r
+        if List[0].find(':') > -1:\r
+            Family = List[0][ : List[0].find(':')].strip()\r
+            ToolChain = List[0][List[0].find(':') + 1 : ].strip()\r
+        else:\r
+            ToolChain = List[0].strip()\r
+        Flag = List[1].strip()\r
     return (Family, ToolChain, Flag)\r
 \r
 ## Get Library Class\r
index 92d6ab64ba842ee13ff59422c0ed2d5584be714a..1e87eb410eb5983075306f47b098f00b3cc01eea 100644 (file)
@@ -1787,19 +1787,27 @@ class FdfParser:
         if not self.__GetNextHexNumber():\r
             raise Warning("expected Hex byte", self.FileName, self.CurrentLineNumber)\r
 \r
-        if len(self.__Token) > 4:\r
-            raise Warning("Hex byte(must be 2 digits) too long", self.FileName, self.CurrentLineNumber)\r
-\r
-        DataString = self.__Token\r
-        DataString += ","\r
-\r
-        while self.__IsToken(","):\r
-            if not self.__GetNextHexNumber():\r
-                raise Warning("Invalid Hex number", self.FileName, self.CurrentLineNumber)\r
-            if len(self.__Token) > 4:\r
-                raise Warning("Hex byte(must be 2 digits) too long", self.FileName, self.CurrentLineNumber)\r
-            DataString += self.__Token\r
-            DataString += ","\r
+        if len(self.__Token) > 18:\r
+            raise Warning("Hex string can't be converted to a valid UINT64 value", self.FileName, self.CurrentLineNumber)\r
+\r
+        # convert hex string value to byte hex string array\r
+        AllString = self.__Token\r
+        AllStrLen = len (AllString)\r
+        DataString = ""\r
+        while AllStrLen > 4:\r
+            DataString = DataString + "0x" + AllString[AllStrLen - 2: AllStrLen] + ","\r
+            AllStrLen  = AllStrLen - 2\r
+        DataString = DataString + AllString[:AllStrLen] + ","\r
+\r
+        # byte value array\r
+        if len (self.__Token) <= 4:\r
+            while self.__IsToken(","):\r
+                if not self.__GetNextHexNumber():\r
+                    raise Warning("Invalid Hex number", self.FileName, self.CurrentLineNumber)\r
+                if len(self.__Token) > 4:\r
+                    raise Warning("Hex byte(must be 2 digits) too long", self.FileName, self.CurrentLineNumber)\r
+                DataString += self.__Token\r
+                DataString += ","\r
 \r
         if not self.__IsToken( "}"):\r
             raise Warning("expected '}'", self.FileName, self.CurrentLineNumber)\r
@@ -1819,18 +1827,27 @@ class FdfParser:
             if not self.__GetNextHexNumber():\r
                 raise Warning("expected Hex byte", self.FileName, self.CurrentLineNumber)\r
 \r
-            if len(self.__Token) > 4:\r
-                raise Warning("Hex byte(must be 2 digits) too long", self.FileName, self.CurrentLineNumber)\r
+            if len(self.__Token) > 18:\r
+                raise Warning("Hex string can't be converted to a valid UINT64 value", self.FileName, self.CurrentLineNumber)\r
 \r
-            DataString = self.__Token\r
-            DataString += ","\r
+            # convert hex string value to byte hex string array\r
+            AllString = self.__Token\r
+            AllStrLen = len (AllString)\r
+            DataString = ""\r
+            while AllStrLen > 4:\r
+                DataString = DataString + "0x" + AllString[AllStrLen - 2: AllStrLen] + ","\r
+                AllStrLen  = AllStrLen - 2\r
+            DataString = DataString + AllString[:AllStrLen] + ","\r
 \r
-            while self.__IsToken(","):\r
-                self.__GetNextHexNumber()\r
-                if len(self.__Token) > 4:\r
-                    raise Warning("Hex byte(must be 2 digits) too long", self.FileName, self.CurrentLineNumber)\r
-                DataString += self.__Token\r
-                DataString += ","\r
+            # byte value array\r
+            if len (self.__Token) <= 4:\r
+                while self.__IsToken(","):\r
+                    if not self.__GetNextHexNumber():\r
+                        raise Warning("Invalid Hex number", self.FileName, self.CurrentLineNumber)\r
+                    if len(self.__Token) > 4:\r
+                        raise Warning("Hex byte(must be 2 digits) too long", self.FileName, self.CurrentLineNumber)\r
+                    DataString += self.__Token\r
+                    DataString += ","\r
 \r
             if not self.__IsToken( "}"):\r
                 raise Warning("expected '}'", self.FileName, self.CurrentLineNumber)\r
index eac21d14950de27b0ecff7482a6a255d4f1124e5..f805aae5ca1b637cb7af007e70c298cb82bbe504 100644 (file)
@@ -221,7 +221,7 @@ class LibraryReport(object):
                         EdkIILibInfo += " C = " + LibConstructor\r
                     LibDestructor = " ".join(LibraryItem[3])\r
                     if LibDestructor:\r
-                        EdkIILibInfo += " D = " + LibConstructor\r
+                        EdkIILibInfo += " D = " + LibDestructor\r
                     LibDepex = " ".join(LibraryItem[4])\r
                     if LibDepex:\r
                         EdkIILibInfo += " Depex = " + LibDepex\r
@@ -255,7 +255,8 @@ class DepexReport(object):
         ModuleType = M.ModuleType\r
         if not ModuleType:\r
             ModuleType = gComponentType2ModuleType.get(M.ComponentType, "")\r
-        if ModuleType in ["SEC", "PEI_CORE", "DXE_CORE"]:\r
+\r
+        if ModuleType in ["SEC", "PEI_CORE", "DXE_CORE", "SMM_CORE", "UEFI_APPLICATION"]:\r
             return\r
       \r
         for Source in M.SourceFileList:\r
@@ -404,17 +405,18 @@ class ModuleReport(object):
         self.Size = 0\r
         self.BuildTimeStamp = None\r
         self.DriverType = ""\r
-        ModuleType = M.ModuleType\r
-        if not ModuleType:\r
-            ModuleType = gComponentType2ModuleType.get(M.ComponentType, "")\r
-        #\r
-        # If a module complies to PI 1.1, promote Module type to "SMM_DRIVER"\r
-        #\r
-        if ModuleType == "DXE_SMM_DRIVER":\r
-            PiSpec =  M.Module.Specification.get("PI_SPECIFICATION_VERSION", "0x00010000")\r
-            if int(PiSpec, 0) >= 0x0001000A:\r
-                ModuleType = "SMM_DRIVER"\r
-        self.DriverType = gDriverTypeMap.get(ModuleType, "")\r
+        if not M.IsLibrary:\r
+            ModuleType = M.ModuleType\r
+            if not ModuleType:\r
+                ModuleType = gComponentType2ModuleType.get(M.ComponentType, "")\r
+            #\r
+            # If a module complies to PI 1.1, promote Module type to "SMM_DRIVER"\r
+            #\r
+            if ModuleType == "DXE_SMM_DRIVER":\r
+                PiSpec =  M.Module.Specification.get("PI_SPECIFICATION_VERSION", "0x00010000")\r
+                if int(PiSpec, 0) >= 0x0001000A:\r
+                    ModuleType = "SMM_DRIVER"\r
+            self.DriverType = gDriverTypeMap.get(ModuleType, "0x2 (FREE_FORM)")\r
         self.UefiSpecVersion = M.Module.Specification.get("UEFI_SPECIFICATION_VERSION", "")\r
         self.PiSpecVersion = M.Module.Specification.get("PI_SPECIFICATION_VERSION", "")\r
         self.PciDeviceId = M.Module.Defines.get("PCI_DEVICE_ID", "")\r
@@ -1310,9 +1312,11 @@ class PlatformReport(object):
 \r
         self.ModuleReportList = []\r
         if MaList != None:\r
+            self._IsModuleBuild = True\r
             for Ma in MaList:\r
                 self.ModuleReportList.append(ModuleReport(Ma, ReportType))\r
         else:\r
+            self._IsModuleBuild = False\r
             for Pa in Wa.AutoGenObjectList:\r
                 for ModuleKey in Pa.Platform.Modules:\r
                     self.ModuleReportList.append(ModuleReport(Pa.Platform.Modules[ModuleKey].M, ReportType))\r
@@ -1343,18 +1347,20 @@ class PlatformReport(object):
         FileWrite(File, "Build Duration:       %s" % BuildDuration)\r
         FileWrite(File, "Report Content:       %s" % ", ".join(ReportType))\r
 \r
-        if "PCD" in ReportType:\r
-            self.PcdReport.GenerateReport(File, None)\r
-\r
-        if "FLASH" in ReportType:\r
-            for FdReportListItem in self.FdReportList:\r
-                FdReportListItem.GenerateReport(File)\r
+        if not self._IsModuleBuild:\r
+            if "PCD" in ReportType:\r
+                self.PcdReport.GenerateReport(File, None)\r
+    \r
+            if "FLASH" in ReportType:\r
+                for FdReportListItem in self.FdReportList:\r
+                    FdReportListItem.GenerateReport(File)\r
 \r
         for ModuleReportItem in self.ModuleReportList:\r
             ModuleReportItem.GenerateReport(File, self.PcdReport, self.PredictionReport, ReportType)\r
 \r
-        if "EXECUTION_ORDER" in ReportType:\r
-            self.PredictionReport.GenerateReport(File, None)\r
+        if not self._IsModuleBuild:\r
+            if "EXECUTION_ORDER" in ReportType:\r
+                self.PredictionReport.GenerateReport(File, None)\r
 \r
 ## BuildReport class\r
 #\r
@@ -1422,7 +1428,7 @@ class BuildReport(object):
                 EdkLogger.error("BuildReport", CODE_ERROR, "Unknown fatal error when generating build report", ExtraData=self.ReportFile, RaiseError=False)\r
                 EdkLogger.quiet("(Python %s on %s\n%s)" % (platform.python_version(), sys.platform, traceback.format_exc()))\r
             File.close()\r
-\r
+            \r
 # This acts like the main() function for the script, unless it is 'import'ed into another script.\r
 if __name__ == '__main__':\r
     pass\r
index e3a3dd9f3fc3368f3e5d726f51fe588b3111f27a..61293080117cae0862a581ea67c43f7ec9aa438e 100644 (file)
@@ -1090,9 +1090,10 @@ class Build():
 \r
     ## Collect MAP information of all FVs\r
     #\r
-    def _CollectFvMapBuffer (self, MapBuffer, Wa):\r
+    def _CollectFvMapBuffer (self, MapBuffer, Wa, ModuleList):\r
         if self.Fdf != '':\r
             # First get the XIP base address for FV map file.\r
+            GuidPattern = re.compile("[-a-fA-F0-9]+")\r
             for FvName in Wa.FdfProfile.FvDict.keys():\r
                 FvMapBuffer = os.path.join(Wa.FvDir, FvName + '.Fv.map')\r
                 if not os.path.exists(FvMapBuffer):\r
@@ -1103,7 +1104,16 @@ class Build():
                 FvMap.readline()\r
                 FvMap.readline()\r
                 FvMap.readline()\r
-                MapBuffer.write(FvMap.read())\r
+                for Line in FvMap:\r
+                    MatchGuid = GuidPattern.match(Line)\r
+                    if MatchGuid != None:\r
+                        #\r
+                        # Replace GUID with module name\r
+                        #\r
+                        GuidString = MatchGuid.group()\r
+                        if GuidString.upper() in ModuleList:\r
+                            Line = Line.replace(GuidString, ModuleList[GuidString.upper()].Name)\r
+                    MapBuffer.write('%s' % (Line))\r
                 FvMap.close()\r
 \r
     ## Collect MAP information of all modules\r
@@ -1124,7 +1134,8 @@ class Build():
         IsIpfPlatform = False\r
         if 'IPF' in self.ArchList:\r
             IsIpfPlatform = True\r
-        for Module in ModuleList:\r
+        for ModuleGuid in ModuleList:\r
+            Module = ModuleList[ModuleGuid]\r
             GlobalData.gProcessingFile = "%s [%s, %s, %s]" % (Module.MetaFile, Module.Arch, Module.ToolChain, Module.BuildTarget)\r
             \r
             OutputImageFile = ''\r
@@ -1259,7 +1270,8 @@ class Build():
         #\r
         SaveFileOnChange(MapFilePath, MapBuffer.getvalue(), False)\r
         MapBuffer.close()\r
-        sys.stdout.write ("\nLoad Module At Fix Address Map file saved to %s\n" %(MapFilePath))
+        if self.LoadFixAddress != 0:
+            sys.stdout.write ("\nLoad Module At Fix Address Map file saved to %s\n" %(MapFilePath))
         sys.stdout.flush()
 \r
     ## Build active platform for different build targets and different tool chains\r
@@ -1286,7 +1298,7 @@ class Build():
                 self._Build(self.Target, Wa)\r
                 \r
                 # Create MAP file when Load Fix Address is enabled.\r
-                if self.Target in ["", "all", "fds"] and self.LoadFixAddress != 0:\r
+                if self.Target in ["", "all", "fds"]:\r
                     for Arch in self.ArchList:\r
                         #\r
                         # Check whether the set fix address is above 4G for 32bit image.\r
@@ -1296,19 +1308,20 @@ class Build():
                     #\r
                     # Get Module List\r
                     #\r
-                    ModuleList = []\r
+                    ModuleList = {}\r
                     for Pa in Wa.AutoGenObjectList:\r
                         for Ma in Pa.ModuleAutoGenList:\r
                             if Ma == None:\r
                                 continue\r
                             if not Ma.IsLibrary:\r
-                                ModuleList.append (Ma)\r
+                                ModuleList[Ma.Guid.upper()] = Ma\r
 \r
                     MapBuffer = StringIO('')\r
-                    #\r
-                    # Rebase module to the preferred memory address before GenFds\r
-                    #\r
-                    self._CollectModuleMapBuffer(MapBuffer, ModuleList)\r
+                    if self.LoadFixAddress != 0:\r
+                        #\r
+                        # Rebase module to the preferred memory address before GenFds\r
+                        #\r
+                        self._CollectModuleMapBuffer(MapBuffer, ModuleList)\r
                     if self.Fdf != '':\r
                         #\r
                         # create FDS again for the updated EFI image\r
@@ -1317,7 +1330,7 @@ class Build():
                         #\r
                         # Create MAP file for all platform FVs after GenFds.\r
                         #\r
-                        self._CollectFvMapBuffer(MapBuffer, Wa)\r
+                        self._CollectFvMapBuffer(MapBuffer, Wa, ModuleList)\r
                     #\r
                     # Save MAP buffer into MAP file.\r
                     #\r
@@ -1367,7 +1380,7 @@ class Build():
                                 ExtraData=self.ModuleFile\r
                                 )\r
                 # Create MAP file when Load Fix Address is enabled.\r
-                if self.LoadFixAddress != 0 and self.Target == "fds" and self.Fdf != '':\r
+                if self.Target == "fds" and self.Fdf != '':\r
                     for Arch in self.ArchList:\r
                         #\r
                         # Check whether the set fix address is above 4G for 32bit image.\r
@@ -1377,27 +1390,28 @@ class Build():
                     #\r
                     # Get Module List\r
                     #\r
-                    ModuleList = []\r
+                    ModuleList = {}\r
                     for Pa in Wa.AutoGenObjectList:\r
                         for Ma in Pa.ModuleAutoGenList:\r
                             if Ma == None:\r
                                 continue\r
                             if not Ma.IsLibrary:\r
-                                ModuleList.append (Ma)\r
+                                ModuleList[Ma.Guid.upper()] = Ma\r
 \r
                     MapBuffer = StringIO('')\r
-                    #\r
-                    # Rebase module to the preferred memory address before GenFds\r
-                    #\r
-                    self._CollectModuleMapBuffer(MapBuffer, ModuleList)\r
-                    #\r
-                    # create FDS again for the updated EFI image\r
-                    #\r
-                    self._Build("fds", Wa)\r
+                    if self.LoadFixAddress != 0:\r
+                        #\r
+                        # Rebase module to the preferred memory address before GenFds\r
+                        #\r
+                        self._CollectModuleMapBuffer(MapBuffer, ModuleList)\r
+                        #\r
+                        # create FDS again for the updated EFI image\r
+                        #\r
+                        self._Build("fds", Wa)\r
                     #\r
                     # Create MAP file for all platform FVs after GenFds.\r
                     #\r
-                    self._CollectFvMapBuffer(MapBuffer, Wa)\r
+                    self._CollectFvMapBuffer(MapBuffer, Wa, ModuleList)\r
                     #\r
                     # Save MAP buffer into MAP file.\r
                     #\r
@@ -1483,7 +1497,7 @@ class Build():
                     EdkLogger.error("build", BUILD_ERROR, "Failed to build module", ExtraData=GlobalData.gBuildingModule)\r
 \r
                 # Create MAP file when Load Fix Address is enabled.\r
-                if self.Target in ["", "all", "fds"] and self.LoadFixAddress != 0:\r
+                if self.Target in ["", "all", "fds"]:\r
                     for Arch in self.ArchList:\r
                         #\r
                         # Check whether the set fix address is above 4G for 32bit image.\r
@@ -1493,30 +1507,31 @@ class Build():
                     #\r
                     # Get Module List\r
                     #\r
-                    ModuleList = []\r
+                    ModuleList = {}\r
                     for Pa in Wa.AutoGenObjectList:\r
                         for Ma in Pa.ModuleAutoGenList:\r
                             if Ma == None:\r
                                 continue\r
                             if not Ma.IsLibrary:\r
-                                ModuleList.append (Ma)\r
+                                ModuleList[Ma.Guid.upper()] = Ma\r
                     #\r
                     # Rebase module to the preferred memory address before GenFds\r
                     #\r
                     MapBuffer = StringIO('')\r
-                    self._CollectModuleMapBuffer(MapBuffer, ModuleList)\r
+                    if self.LoadFixAddress != 0:\r
+                        self._CollectModuleMapBuffer(MapBuffer, ModuleList)\r
 \r
                 # Generate FD image if there's a FDF file found\r
                 if self.Fdf != '' and self.Target in ["", "all", "fds"]:\r
                     LaunchCommand(Wa.BuildCommand + ["fds"], Wa.MakeFileDir)\r
 \r
                 # Create MAP file for all platform FV after GenFds\r
-                if self.Target in ["", "all", "fds"] and self.LoadFixAddress != 0:\r
+                if self.Target in ["", "all", "fds"]:\r
                     if self.Fdf != '':\r
                         #\r
                         # Create MAP file for all platform FVs after GenFds.\r
                         #\r
-                        self._CollectFvMapBuffer(MapBuffer, Wa)\r
+                        self._CollectFvMapBuffer(MapBuffer, Wa, ModuleList)\r
                     #\r
                     # Save MAP buffer into MAP file.\r
                     #\r