BaseTools: extend FFS alignment to 16M
Current FFS only supports 64KiB alignment for data, Per PI 1.6 requirement, we extend FFS alignment to 16M. Cc: Liming Gao <liming.gao@intel.com> Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Yonghong Zhu <yonghong.zhu@intel.com> Reviewed-by: Liming Gao <liming.gao@intel.com>
This commit is contained in:
@ -50,14 +50,17 @@ STATIC CHAR8 *mFfsFileType[] = {
|
|||||||
|
|
||||||
STATIC CHAR8 *mAlignName[] = {
|
STATIC CHAR8 *mAlignName[] = {
|
||||||
"1", "2", "4", "8", "16", "32", "64", "128", "256", "512",
|
"1", "2", "4", "8", "16", "32", "64", "128", "256", "512",
|
||||||
"1K", "2K", "4K", "8K", "16K", "32K", "64K"
|
"1K", "2K", "4K", "8K", "16K", "32K", "64K", "128K", "256K",
|
||||||
|
"512K", "1M", "2M", "4M", "8M", "16M"
|
||||||
};
|
};
|
||||||
|
|
||||||
STATIC CHAR8 *mFfsValidAlignName[] = {
|
STATIC CHAR8 *mFfsValidAlignName[] = {
|
||||||
"8", "16", "128", "512", "1K", "4K", "32K", "64K"
|
"8", "16", "128", "512", "1K", "4K", "32K", "64K", "128K","256K",
|
||||||
|
"512K", "1M", "2M", "4M", "8M", "16M"
|
||||||
};
|
};
|
||||||
|
|
||||||
STATIC UINT32 mFfsValidAlign[] = {0, 8, 16, 128, 512, 1024, 4096, 32768, 65536};
|
STATIC UINT32 mFfsValidAlign[] = {0, 8, 16, 128, 512, 1024, 4096, 32768, 65536, 131072, 262144,
|
||||||
|
524288, 1048576, 2097152, 4194304, 8388608, 16777216};
|
||||||
|
|
||||||
STATIC EFI_GUID mZeroGuid = {0};
|
STATIC EFI_GUID mZeroGuid = {0};
|
||||||
|
|
||||||
@ -144,12 +147,13 @@ Returns:
|
|||||||
fprintf (stdout, " -s, --checksum Indicates to calculate file checksum.\n");
|
fprintf (stdout, " -s, --checksum Indicates to calculate file checksum.\n");
|
||||||
fprintf (stdout, " -a FileAlign, --align FileAlign\n\
|
fprintf (stdout, " -a FileAlign, --align FileAlign\n\
|
||||||
FileAlign points to file alignment, which only support\n\
|
FileAlign points to file alignment, which only support\n\
|
||||||
the following align: 1,2,4,8,16,128,512,1K,4K,32K,64K\n");
|
the following align: 1,2,4,8,16,128,512,1K,4K,32K,64K\n\
|
||||||
|
128K,256K,512K,1M,2M,4M,8M,16M\n");
|
||||||
fprintf (stdout, " -i SectionFile, --sectionfile SectionFile\n\
|
fprintf (stdout, " -i SectionFile, --sectionfile SectionFile\n\
|
||||||
Section file will be contained in this FFS file.\n");
|
Section file will be contained in this FFS file.\n");
|
||||||
fprintf (stdout, " -n SectionAlign, --sectionalign SectionAlign\n\
|
fprintf (stdout, " -n SectionAlign, --sectionalign SectionAlign\n\
|
||||||
SectionAlign points to section alignment, which support\n\
|
SectionAlign points to section alignment, which support\n\
|
||||||
the alignment scope 1~64K. It is specified together\n\
|
the alignment scope 1~16M. It is specified together\n\
|
||||||
with sectionfile to point its alignment in FFS file.\n");
|
with sectionfile to point its alignment in FFS file.\n");
|
||||||
fprintf (stdout, " -v, --verbose Turn on verbose output with informational messages.\n");
|
fprintf (stdout, " -v, --verbose Turn on verbose output with informational messages.\n");
|
||||||
fprintf (stdout, " -q, --quiet Disable all messages except key message and fatal error\n");
|
fprintf (stdout, " -q, --quiet Disable all messages except key message and fatal error\n");
|
||||||
@ -168,7 +172,7 @@ StringtoAlignment (
|
|||||||
|
|
||||||
Routine Description:
|
Routine Description:
|
||||||
|
|
||||||
Converts Align String to align value (1~64K).
|
Converts Align String to align value (1~16M).
|
||||||
|
|
||||||
Arguments:
|
Arguments:
|
||||||
|
|
||||||
@ -893,7 +897,12 @@ Returns:
|
|||||||
}
|
}
|
||||||
VerboseMsg ("the size of the generated FFS file is %u bytes", (unsigned) FileSize);
|
VerboseMsg ("the size of the generated FFS file is %u bytes", (unsigned) FileSize);
|
||||||
|
|
||||||
FfsFileHeader.Attributes = (EFI_FFS_FILE_ATTRIBUTES) (FfsAttrib | (FfsAlign << 3));
|
//FfsAlign larger than 7, set FFS_ATTRIB_DATA_ALIGNMENT2
|
||||||
|
if (FfsAlign < 8) {
|
||||||
|
FfsFileHeader.Attributes = (EFI_FFS_FILE_ATTRIBUTES) (FfsAttrib | (FfsAlign << 3));
|
||||||
|
} else {
|
||||||
|
FfsFileHeader.Attributes = (EFI_FFS_FILE_ATTRIBUTES) (FfsAttrib | ((FfsAlign & 0x7) << 3) | FFS_ATTRIB_DATA_ALIGNMENT2);
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Fill in checksums and state, these must be zero for checksumming
|
// Fill in checksums and state, these must be zero for checksumming
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/** @file
|
/** @file
|
||||||
This file contains the internal functions required to generate a Firmware Volume.
|
This file contains the internal functions required to generate a Firmware Volume.
|
||||||
|
|
||||||
Copyright (c) 2004 - 2016, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2004 - 2017, Intel Corporation. All rights reserved.<BR>
|
||||||
Portions Copyright (c) 2011 - 2013, ARM Ltd. All rights reserved.<BR>
|
Portions Copyright (c) 2011 - 2013, ARM Ltd. All rights reserved.<BR>
|
||||||
Portions Copyright (c) 2016 HP Development Company, L.P.<BR>
|
Portions Copyright (c) 2016 HP Development Company, L.P.<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
@ -464,57 +464,97 @@ Returns:
|
|||||||
case 0:
|
case 0:
|
||||||
//
|
//
|
||||||
// 1 byte alignment
|
// 1 byte alignment
|
||||||
|
//if bit 1 have set, 128K byte alignmnet
|
||||||
//
|
//
|
||||||
*Alignment = 0;
|
if (FfsFile->Attributes & FFS_ATTRIB_DATA_ALIGNMENT2) {
|
||||||
|
*Alignment = 17;
|
||||||
|
} else {
|
||||||
|
*Alignment = 0;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
//
|
//
|
||||||
// 16 byte alignment
|
// 16 byte alignment
|
||||||
|
//if bit 1 have set, 256K byte alignment
|
||||||
//
|
//
|
||||||
*Alignment = 4;
|
if (FfsFile->Attributes & FFS_ATTRIB_DATA_ALIGNMENT2) {
|
||||||
|
*Alignment = 18;
|
||||||
|
} else {
|
||||||
|
*Alignment = 4;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
//
|
//
|
||||||
// 128 byte alignment
|
// 128 byte alignment
|
||||||
|
//if bit 1 have set, 512K byte alignment
|
||||||
//
|
//
|
||||||
*Alignment = 7;
|
if (FfsFile->Attributes & FFS_ATTRIB_DATA_ALIGNMENT2) {
|
||||||
|
*Alignment = 19;
|
||||||
|
} else {
|
||||||
|
*Alignment = 7;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
//
|
//
|
||||||
// 512 byte alignment
|
// 512 byte alignment
|
||||||
|
//if bit 1 have set, 1M byte alignment
|
||||||
//
|
//
|
||||||
*Alignment = 9;
|
if (FfsFile->Attributes & FFS_ATTRIB_DATA_ALIGNMENT2) {
|
||||||
|
*Alignment = 20;
|
||||||
|
} else {
|
||||||
|
*Alignment = 9;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 4:
|
case 4:
|
||||||
//
|
//
|
||||||
// 1K byte alignment
|
// 1K byte alignment
|
||||||
|
//if bit 1 have set, 2M byte alignment
|
||||||
//
|
//
|
||||||
*Alignment = 10;
|
if (FfsFile->Attributes & FFS_ATTRIB_DATA_ALIGNMENT2) {
|
||||||
|
*Alignment = 21;
|
||||||
|
} else {
|
||||||
|
*Alignment = 10;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 5:
|
case 5:
|
||||||
//
|
//
|
||||||
// 4K byte alignment
|
// 4K byte alignment
|
||||||
|
//if bit 1 have set, 4M byte alignment
|
||||||
//
|
//
|
||||||
*Alignment = 12;
|
if (FfsFile->Attributes & FFS_ATTRIB_DATA_ALIGNMENT2) {
|
||||||
|
*Alignment = 22;
|
||||||
|
} else {
|
||||||
|
*Alignment = 12;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 6:
|
case 6:
|
||||||
//
|
//
|
||||||
// 32K byte alignment
|
// 32K byte alignment
|
||||||
|
//if bit 1 have set , 8M byte alignment
|
||||||
//
|
//
|
||||||
*Alignment = 15;
|
if (FfsFile->Attributes & FFS_ATTRIB_DATA_ALIGNMENT2) {
|
||||||
|
*Alignment = 23;
|
||||||
|
} else {
|
||||||
|
*Alignment = 15;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 7:
|
case 7:
|
||||||
//
|
//
|
||||||
// 64K byte alignment
|
// 64K byte alignment
|
||||||
|
//if bit 1 have set, 16M alignment
|
||||||
//
|
//
|
||||||
*Alignment = 16;
|
if (FfsFile->Attributes & FFS_ATTRIB_DATA_ALIGNMENT2) {
|
||||||
|
*Alignment = 24;
|
||||||
|
} else {
|
||||||
|
*Alignment = 16;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -1060,7 +1100,7 @@ Returns:
|
|||||||
// Clear the alignment bits: these have become meaningless now that we have
|
// Clear the alignment bits: these have become meaningless now that we have
|
||||||
// adjusted the padding section.
|
// adjusted the padding section.
|
||||||
//
|
//
|
||||||
FfsFile->Attributes &= ~FFS_ATTRIB_DATA_ALIGNMENT;
|
FfsFile->Attributes &= ~(FFS_ATTRIB_DATA_ALIGNMENT | FFS_ATTRIB_DATA_ALIGNMENT2);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Recalculate the FFS header checksum. Instead of setting Header and State
|
// Recalculate the FFS header checksum. Instead of setting Header and State
|
||||||
|
@ -74,7 +74,8 @@ STATIC CHAR8 *mGUIDedSectionAttribue[] = { "NONE", "PROCESSING_REQUIRED",
|
|||||||
|
|
||||||
STATIC CHAR8 *mAlignName[] = {
|
STATIC CHAR8 *mAlignName[] = {
|
||||||
"1", "2", "4", "8", "16", "32", "64", "128", "256", "512",
|
"1", "2", "4", "8", "16", "32", "64", "128", "256", "512",
|
||||||
"1K", "2K", "4K", "8K", "16K", "32K", "64K"
|
"1K", "2K", "4K", "8K", "16K", "32K", "64K", "128K", "256K",
|
||||||
|
"512K", "1M", "2M", "4M", "8M", "16M"
|
||||||
};
|
};
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -184,7 +185,7 @@ Returns:
|
|||||||
used in Ver section.\n");
|
used in Ver section.\n");
|
||||||
fprintf (stdout, " --sectionalign SectionAlign\n\
|
fprintf (stdout, " --sectionalign SectionAlign\n\
|
||||||
SectionAlign points to section alignment, which support\n\
|
SectionAlign points to section alignment, which support\n\
|
||||||
the alignment scope 1~64K. It is specified in same\n\
|
the alignment scope 1~16M. It is specified in same\n\
|
||||||
order that the section file is input.\n");
|
order that the section file is input.\n");
|
||||||
fprintf (stdout, " -v, --verbose Turn on verbose output with informational messages.\n");
|
fprintf (stdout, " -v, --verbose Turn on verbose output with informational messages.\n");
|
||||||
fprintf (stdout, " -q, --quiet Disable all messages except key message and fatal error\n");
|
fprintf (stdout, " -q, --quiet Disable all messages except key message and fatal error\n");
|
||||||
@ -356,7 +357,7 @@ StringtoAlignment (
|
|||||||
|
|
||||||
Routine Description:
|
Routine Description:
|
||||||
|
|
||||||
Converts Align String to align value (1~64K).
|
Converts Align String to align value (1~16M).
|
||||||
|
|
||||||
Arguments:
|
Arguments:
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
@par Revision Reference:
|
@par Revision Reference:
|
||||||
Version 1.4.
|
Version 1.4.
|
||||||
|
|
||||||
Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
|
||||||
|
|
||||||
This program and the accompanying materials are licensed and made available
|
This program and the accompanying materials are licensed and made available
|
||||||
under the terms and conditions of the BSD License which accompanies this
|
under the terms and conditions of the BSD License which accompanies this
|
||||||
@ -65,6 +65,7 @@ typedef UINT8 EFI_FFS_FILE_STATE;
|
|||||||
// FFS File Attributes.
|
// FFS File Attributes.
|
||||||
//
|
//
|
||||||
#define FFS_ATTRIB_LARGE_FILE 0x01
|
#define FFS_ATTRIB_LARGE_FILE 0x01
|
||||||
|
#define FFS_ATTRIB_DATA_ALIGNMENT2 0x02
|
||||||
#define FFS_ATTRIB_FIXED 0x04
|
#define FFS_ATTRIB_FIXED 0x04
|
||||||
#define FFS_ATTRIB_DATA_ALIGNMENT 0x38
|
#define FFS_ATTRIB_DATA_ALIGNMENT 0x38
|
||||||
#define FFS_ATTRIB_CHECKSUM 0x40
|
#define FFS_ATTRIB_CHECKSUM 0x40
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
## @file
|
## @file
|
||||||
# parse FDF file
|
# parse FDF file
|
||||||
#
|
#
|
||||||
# Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.<BR>
|
# Copyright (c) 2007 - 2017, Intel Corporation. All rights reserved.<BR>
|
||||||
#
|
#
|
||||||
# This program and the accompanying materials
|
# This program and the accompanying materials
|
||||||
# are licensed and made available under the terms and conditions of the BSD License
|
# are licensed and made available under the terms and conditions of the BSD License
|
||||||
@ -2340,7 +2340,8 @@ class FdfParser(object):
|
|||||||
|
|
||||||
AlignValue = None
|
AlignValue = None
|
||||||
if self.__GetAlignment():
|
if self.__GetAlignment():
|
||||||
if self.__Token not in ("Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"):
|
if self.__Token not in ("Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K", "128K",
|
||||||
|
"256K", "512K", "1M", "2M", "4M", "8M", "16M"):
|
||||||
raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)
|
raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)
|
||||||
AlignValue = self.__Token
|
AlignValue = self.__Token
|
||||||
|
|
||||||
@ -2608,7 +2609,8 @@ class FdfParser(object):
|
|||||||
|
|
||||||
AlignValue = None
|
AlignValue = None
|
||||||
if self.__GetAlignment():
|
if self.__GetAlignment():
|
||||||
if self.__Token not in ("8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"):
|
if self.__Token not in ("8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K", "128K",
|
||||||
|
"256K", "512K", "1M", "2M", "4M", "8M", "16M"):
|
||||||
raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)
|
raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)
|
||||||
AlignValue = self.__Token
|
AlignValue = self.__Token
|
||||||
|
|
||||||
@ -2924,7 +2926,8 @@ class FdfParser(object):
|
|||||||
|
|
||||||
AlignValue = ""
|
AlignValue = ""
|
||||||
if self.__GetAlignment():
|
if self.__GetAlignment():
|
||||||
if self.__Token not in ("Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"):
|
if self.__Token not in ("Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K", "128K",
|
||||||
|
"256K", "512K", "1M", "2M", "4M", "8M", "16M"):
|
||||||
raise Warning("Incorrect alignment At Line ", self.FileName, self.CurrentLineNumber)
|
raise Warning("Incorrect alignment At Line ", self.FileName, self.CurrentLineNumber)
|
||||||
AlignValue = self.__Token
|
AlignValue = self.__Token
|
||||||
|
|
||||||
@ -2988,7 +2991,8 @@ class FdfParser(object):
|
|||||||
CheckSum = True
|
CheckSum = True
|
||||||
|
|
||||||
if self.__GetAlignment():
|
if self.__GetAlignment():
|
||||||
if self.__Token not in ("Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"):
|
if self.__Token not in ("Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K", "128K",
|
||||||
|
"256K", "512K", "1M", "2M", "4M", "8M", "16M"):
|
||||||
raise Warning("Incorrect alignment At Line ", self.FileName, self.CurrentLineNumber)
|
raise Warning("Incorrect alignment At Line ", self.FileName, self.CurrentLineNumber)
|
||||||
if self.__Token == 'Auto' and (not SectionName == 'PE32') and (not SectionName == 'TE'):
|
if self.__Token == 'Auto' and (not SectionName == 'PE32') and (not SectionName == 'TE'):
|
||||||
raise Warning("Auto alignment can only be used in PE32 or TE section ", self.FileName, self.CurrentLineNumber)
|
raise Warning("Auto alignment can only be used in PE32 or TE section ", self.FileName, self.CurrentLineNumber)
|
||||||
@ -3062,7 +3066,8 @@ class FdfParser(object):
|
|||||||
FvImageSectionObj.FvFileType = self.__Token
|
FvImageSectionObj.FvFileType = self.__Token
|
||||||
|
|
||||||
if self.__GetAlignment():
|
if self.__GetAlignment():
|
||||||
if self.__Token not in ("8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"):
|
if self.__Token not in ("8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K", "128K",
|
||||||
|
"256K", "512K", "1M", "2M", "4M", "8M", "16M"):
|
||||||
raise Warning("Incorrect alignment At Line ", self.FileName, self.CurrentLineNumber)
|
raise Warning("Incorrect alignment At Line ", self.FileName, self.CurrentLineNumber)
|
||||||
FvImageSectionObj.Alignment = self.__Token
|
FvImageSectionObj.Alignment = self.__Token
|
||||||
|
|
||||||
@ -3129,7 +3134,8 @@ class FdfParser(object):
|
|||||||
EfiSectionObj.BuildNum = self.__Token
|
EfiSectionObj.BuildNum = self.__Token
|
||||||
|
|
||||||
if self.__GetAlignment():
|
if self.__GetAlignment():
|
||||||
if self.__Token not in ("Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"):
|
if self.__Token not in ("Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K", "128K",
|
||||||
|
"256K", "512K", "1M", "2M", "4M", "8M", "16M"):
|
||||||
raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)
|
raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)
|
||||||
if self.__Token == 'Auto' and (not SectionName == 'PE32') and (not SectionName == 'TE'):
|
if self.__Token == 'Auto' and (not SectionName == 'PE32') and (not SectionName == 'TE'):
|
||||||
raise Warning("Auto alignment can only be used in PE32 or TE section ", self.FileName, self.CurrentLineNumber)
|
raise Warning("Auto alignment can only be used in PE32 or TE section ", self.FileName, self.CurrentLineNumber)
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
## @file
|
## @file
|
||||||
# process data section generation
|
# process data section generation
|
||||||
#
|
#
|
||||||
# Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.<BR>
|
# Copyright (c) 2007 - 2017, Intel Corporation. All rights reserved.<BR>
|
||||||
#
|
#
|
||||||
# This program and the accompanying materials
|
# This program and the accompanying materials
|
||||||
# are licensed and made available under the terms and conditions of the BSD License
|
# are licensed and made available under the terms and conditions of the BSD License
|
||||||
@ -79,8 +79,10 @@ class DataSection (DataSectionClassObject):
|
|||||||
ImageObj = PeImageClass (Filename)
|
ImageObj = PeImageClass (Filename)
|
||||||
if ImageObj.SectionAlignment < 0x400:
|
if ImageObj.SectionAlignment < 0x400:
|
||||||
self.Alignment = str (ImageObj.SectionAlignment)
|
self.Alignment = str (ImageObj.SectionAlignment)
|
||||||
else:
|
elif ImageObj.SectionAlignment < 0x100000:
|
||||||
self.Alignment = str (ImageObj.SectionAlignment / 0x400) + 'K'
|
self.Alignment = str (ImageObj.SectionAlignment / 0x400) + 'K'
|
||||||
|
else:
|
||||||
|
self.Alignment = str (ImageObj.SectionAlignment / 0x100000) + 'M'
|
||||||
|
|
||||||
NoStrip = True
|
NoStrip = True
|
||||||
if self.SecType in ('TE', 'PE32'):
|
if self.SecType in ('TE', 'PE32'):
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
## @file
|
## @file
|
||||||
# process rule section generation
|
# process rule section generation
|
||||||
#
|
#
|
||||||
# Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.<BR>
|
# Copyright (c) 2007 - 2017, Intel Corporation. All rights reserved.<BR>
|
||||||
#
|
#
|
||||||
# This program and the accompanying materials
|
# This program and the accompanying materials
|
||||||
# are licensed and made available under the terms and conditions of the BSD License
|
# are licensed and made available under the terms and conditions of the BSD License
|
||||||
@ -231,8 +231,10 @@ class EfiSection (EfiSectionClassObject):
|
|||||||
ImageObj = PeImageClass (File)
|
ImageObj = PeImageClass (File)
|
||||||
if ImageObj.SectionAlignment < 0x400:
|
if ImageObj.SectionAlignment < 0x400:
|
||||||
Align = str (ImageObj.SectionAlignment)
|
Align = str (ImageObj.SectionAlignment)
|
||||||
else:
|
elif ImageObj.SectionAlignment < 0x100000:
|
||||||
Align = str (ImageObj.SectionAlignment / 0x400) + 'K'
|
Align = str (ImageObj.SectionAlignment / 0x400) + 'K'
|
||||||
|
else:
|
||||||
|
Align = str (ImageObj.SectionAlignment / 0x100000) + 'M'
|
||||||
|
|
||||||
if File[(len(File)-4):] == '.efi':
|
if File[(len(File)-4):] == '.efi':
|
||||||
MapFile = File.replace('.efi', '.map')
|
MapFile = File.replace('.efi', '.map')
|
||||||
|
@ -2767,7 +2767,8 @@ class FdfParser:
|
|||||||
while True:
|
while True:
|
||||||
AlignValue = None
|
AlignValue = None
|
||||||
if self.__GetAlignment():
|
if self.__GetAlignment():
|
||||||
if self.__Token not in ("Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"):
|
if self.__Token not in ("Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K", "128K",
|
||||||
|
"256K", "512K", "1M", "2M", "4M", "8M", "16M"):
|
||||||
raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)
|
raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)
|
||||||
#For FFS, Auto is default option same to ""
|
#For FFS, Auto is default option same to ""
|
||||||
if not self.__Token == "Auto":
|
if not self.__Token == "Auto":
|
||||||
@ -2826,7 +2827,8 @@ class FdfParser:
|
|||||||
FfsFileObj.CheckSum = True
|
FfsFileObj.CheckSum = True
|
||||||
|
|
||||||
if self.__GetAlignment():
|
if self.__GetAlignment():
|
||||||
if self.__Token not in ("Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"):
|
if self.__Token not in ("Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K", "128K",
|
||||||
|
"256K", "512K", "1M", "2M", "4M", "8M", "16M"):
|
||||||
raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)
|
raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)
|
||||||
#For FFS, Auto is default option same to ""
|
#For FFS, Auto is default option same to ""
|
||||||
if not self.__Token == "Auto":
|
if not self.__Token == "Auto":
|
||||||
@ -2897,7 +2899,8 @@ class FdfParser:
|
|||||||
|
|
||||||
AlignValue = None
|
AlignValue = None
|
||||||
if self.__GetAlignment():
|
if self.__GetAlignment():
|
||||||
if self.__Token not in ("Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"):
|
if self.__Token not in ("Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K", "128K",
|
||||||
|
"256K", "512K", "1M", "2M", "4M", "8M", "16M"):
|
||||||
raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)
|
raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)
|
||||||
AlignValue = self.__Token
|
AlignValue = self.__Token
|
||||||
|
|
||||||
@ -3186,7 +3189,8 @@ class FdfParser:
|
|||||||
|
|
||||||
AlignValue = None
|
AlignValue = None
|
||||||
if self.__GetAlignment():
|
if self.__GetAlignment():
|
||||||
if self.__Token not in ("8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"):
|
if self.__Token not in ("8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K", "128K",
|
||||||
|
"256K", "512K", "1M", "2M", "4M", "8M", "16M"):
|
||||||
raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)
|
raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)
|
||||||
AlignValue = self.__Token
|
AlignValue = self.__Token
|
||||||
|
|
||||||
@ -3777,7 +3781,8 @@ class FdfParser:
|
|||||||
|
|
||||||
AlignValue = ""
|
AlignValue = ""
|
||||||
if self.__GetAlignment():
|
if self.__GetAlignment():
|
||||||
if self.__Token not in ("Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"):
|
if self.__Token not in ("Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K", "128K",
|
||||||
|
"256K", "512K", "1M", "2M", "4M", "8M", "16M"):
|
||||||
raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)
|
raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)
|
||||||
#For FFS, Auto is default option same to ""
|
#For FFS, Auto is default option same to ""
|
||||||
if not self.__Token == "Auto":
|
if not self.__Token == "Auto":
|
||||||
@ -3826,7 +3831,8 @@ class FdfParser:
|
|||||||
|
|
||||||
SectAlignment = ""
|
SectAlignment = ""
|
||||||
if self.__GetAlignment():
|
if self.__GetAlignment():
|
||||||
if self.__Token not in ("Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"):
|
if self.__Token not in ("Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K", "128K",
|
||||||
|
"256K", "512K", "1M", "2M", "4M", "8M", "16M"):
|
||||||
raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)
|
raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)
|
||||||
if self.__Token == 'Auto' and (not SectionName == 'PE32') and (not SectionName == 'TE'):
|
if self.__Token == 'Auto' and (not SectionName == 'PE32') and (not SectionName == 'TE'):
|
||||||
raise Warning("Auto alignment can only be used in PE32 or TE section ", self.FileName, self.CurrentLineNumber)
|
raise Warning("Auto alignment can only be used in PE32 or TE section ", self.FileName, self.CurrentLineNumber)
|
||||||
@ -3905,7 +3911,8 @@ class FdfParser:
|
|||||||
FvImageSectionObj.FvFileType = self.__Token
|
FvImageSectionObj.FvFileType = self.__Token
|
||||||
|
|
||||||
if self.__GetAlignment():
|
if self.__GetAlignment():
|
||||||
if self.__Token not in ("8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"):
|
if self.__Token not in ("8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K", "128K",
|
||||||
|
"256K", "512K", "1M", "2M", "4M", "8M", "16M"):
|
||||||
raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)
|
raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)
|
||||||
FvImageSectionObj.Alignment = self.__Token
|
FvImageSectionObj.Alignment = self.__Token
|
||||||
|
|
||||||
@ -3972,7 +3979,8 @@ class FdfParser:
|
|||||||
EfiSectionObj.BuildNum = self.__Token
|
EfiSectionObj.BuildNum = self.__Token
|
||||||
|
|
||||||
if self.__GetAlignment():
|
if self.__GetAlignment():
|
||||||
if self.__Token not in ("Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"):
|
if self.__Token not in ("Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K", "128K",
|
||||||
|
"256K", "512K", "1M", "2M", "4M", "8M", "16M"):
|
||||||
raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)
|
raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)
|
||||||
if self.__Token == 'Auto' and (not SectionName == 'PE32') and (not SectionName == 'TE'):
|
if self.__Token == 'Auto' and (not SectionName == 'PE32') and (not SectionName == 'TE'):
|
||||||
raise Warning("Auto alignment can only be used in PE32 or TE section ", self.FileName, self.CurrentLineNumber)
|
raise Warning("Auto alignment can only be used in PE32 or TE section ", self.FileName, self.CurrentLineNumber)
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
## @file
|
## @file
|
||||||
# process FFS generation from INF statement
|
# process FFS generation from INF statement
|
||||||
#
|
#
|
||||||
# Copyright (c) 2007 - 2016, Intel Corporation. All rights reserved.<BR>
|
# Copyright (c) 2007 - 2017, Intel Corporation. All rights reserved.<BR>
|
||||||
# Copyright (c) 2014-2016 Hewlett-Packard Development Company, L.P.<BR>
|
# Copyright (c) 2014-2016 Hewlett-Packard Development Company, L.P.<BR>
|
||||||
#
|
#
|
||||||
# This program and the accompanying materials
|
# This program and the accompanying materials
|
||||||
@ -731,8 +731,10 @@ class FfsInfStatement(FfsInfStatementClassObject):
|
|||||||
ImageObj = PeImageClass (File)
|
ImageObj = PeImageClass (File)
|
||||||
if ImageObj.SectionAlignment < 0x400:
|
if ImageObj.SectionAlignment < 0x400:
|
||||||
self.Alignment = str (ImageObj.SectionAlignment)
|
self.Alignment = str (ImageObj.SectionAlignment)
|
||||||
else:
|
elif ImageObj.SectionAlignment < 0x100000:
|
||||||
self.Alignment = str (ImageObj.SectionAlignment / 0x400) + 'K'
|
self.Alignment = str (ImageObj.SectionAlignment / 0x400) + 'K'
|
||||||
|
else:
|
||||||
|
self.Alignment = str (ImageObj.SectionAlignment / 0x100000) + 'M'
|
||||||
|
|
||||||
if not NoStrip:
|
if not NoStrip:
|
||||||
FileBeforeStrip = os.path.join(self.OutputPath, ModuleName + '.reloc')
|
FileBeforeStrip = os.path.join(self.OutputPath, ModuleName + '.reloc')
|
||||||
@ -770,8 +772,10 @@ class FfsInfStatement(FfsInfStatementClassObject):
|
|||||||
ImageObj = PeImageClass (GenSecInputFile)
|
ImageObj = PeImageClass (GenSecInputFile)
|
||||||
if ImageObj.SectionAlignment < 0x400:
|
if ImageObj.SectionAlignment < 0x400:
|
||||||
self.Alignment = str (ImageObj.SectionAlignment)
|
self.Alignment = str (ImageObj.SectionAlignment)
|
||||||
else:
|
elif ImageObj.SectionAlignment < 0x100000:
|
||||||
self.Alignment = str (ImageObj.SectionAlignment / 0x400) + 'K'
|
self.Alignment = str (ImageObj.SectionAlignment / 0x400) + 'K'
|
||||||
|
else:
|
||||||
|
self.Alignment = str (ImageObj.SectionAlignment / 0x100000) + 'M'
|
||||||
|
|
||||||
if not NoStrip:
|
if not NoStrip:
|
||||||
FileBeforeStrip = os.path.join(self.OutputPath, ModuleName + '.reloc')
|
FileBeforeStrip = os.path.join(self.OutputPath, ModuleName + '.reloc')
|
||||||
|
@ -196,9 +196,12 @@ class FV (FvClassObject):
|
|||||||
FvAlignmentValue = 1 << (ord (FvHeaderBuffer[0x2E]) & 0x1F)
|
FvAlignmentValue = 1 << (ord (FvHeaderBuffer[0x2E]) & 0x1F)
|
||||||
# FvAlignmentValue is larger than or equal to 1K
|
# FvAlignmentValue is larger than or equal to 1K
|
||||||
if FvAlignmentValue >= 0x400:
|
if FvAlignmentValue >= 0x400:
|
||||||
if FvAlignmentValue >= 0x10000:
|
if FvAlignmentValue >= 0x100000:
|
||||||
#The max alignment supported by FFS is 64K.
|
#The max alignment supported by FFS is 16M.
|
||||||
self.FvAlignment = "64K"
|
if FvAlignmentValue >= 0x1000000:
|
||||||
|
self.FvAlignment = "16M"
|
||||||
|
else:
|
||||||
|
self.FvAlignment = str(FvAlignmentValue / 0x100000) + "M"
|
||||||
else:
|
else:
|
||||||
self.FvAlignment = str (FvAlignmentValue / 0x400) + "K"
|
self.FvAlignment = str (FvAlignmentValue / 0x400) + "K"
|
||||||
else:
|
else:
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
## @file
|
## @file
|
||||||
# process FV image section generation
|
# process FV image section generation
|
||||||
#
|
#
|
||||||
# Copyright (c) 2007 - 2016, Intel Corporation. All rights reserved.<BR>
|
# Copyright (c) 2007 - 2017, Intel Corporation. All rights reserved.<BR>
|
||||||
#
|
#
|
||||||
# This program and the accompanying materials
|
# This program and the accompanying materials
|
||||||
# are licensed and made available under the terms and conditions of the BSD License
|
# are licensed and made available under the terms and conditions of the BSD License
|
||||||
@ -80,9 +80,12 @@ class FvImageSection(FvImageSectionClassObject):
|
|||||||
|
|
||||||
# MaxFvAlignment is larger than or equal to 1K
|
# MaxFvAlignment is larger than or equal to 1K
|
||||||
if MaxFvAlignment >= 0x400:
|
if MaxFvAlignment >= 0x400:
|
||||||
if MaxFvAlignment >= 0x10000:
|
if MaxFvAlignment >= 0x100000:
|
||||||
#The max alignment supported by FFS is 64K.
|
#The max alignment supported by FFS is 16M.
|
||||||
self.Alignment = "64K"
|
if MaxFvAlignment >=1000000:
|
||||||
|
self.Alignment = "16M"
|
||||||
|
else:
|
||||||
|
self.Alignment = str(MaxFvAlignment / 0x100000) + "M"
|
||||||
else:
|
else:
|
||||||
self.Alignment = str (MaxFvAlignment / 0x400) + "K"
|
self.Alignment = str (MaxFvAlignment / 0x400) + "K"
|
||||||
else:
|
else:
|
||||||
@ -117,9 +120,12 @@ class FvImageSection(FvImageSectionClassObject):
|
|||||||
FvAlignmentValue = 1 << (ord (FvHeaderBuffer[0x2E]) & 0x1F)
|
FvAlignmentValue = 1 << (ord (FvHeaderBuffer[0x2E]) & 0x1F)
|
||||||
# FvAlignmentValue is larger than or equal to 1K
|
# FvAlignmentValue is larger than or equal to 1K
|
||||||
if FvAlignmentValue >= 0x400:
|
if FvAlignmentValue >= 0x400:
|
||||||
if FvAlignmentValue >= 0x10000:
|
if FvAlignmentValue >= 0x100000:
|
||||||
#The max alignment supported by FFS is 64K.
|
#The max alignment supported by FFS is 16M.
|
||||||
self.Alignment = "64K"
|
if FvAlignmentValue >= 0x1000000:
|
||||||
|
self.Alignment = "16M"
|
||||||
|
else:
|
||||||
|
self.Alignment = str(FvAlignmentValue / 0x100000) + "M"
|
||||||
else:
|
else:
|
||||||
self.Alignment = str (FvAlignmentValue / 0x400) + "K"
|
self.Alignment = str (FvAlignmentValue / 0x400) + "K"
|
||||||
else:
|
else:
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
## @file
|
## @file
|
||||||
# Global variables for GenFds
|
# Global variables for GenFds
|
||||||
#
|
#
|
||||||
# Copyright (c) 2007 - 2016, Intel Corporation. All rights reserved.<BR>
|
# Copyright (c) 2007 - 2017, Intel Corporation. All rights reserved.<BR>
|
||||||
#
|
#
|
||||||
# This program and the accompanying materials
|
# This program and the accompanying materials
|
||||||
# are licensed and made available under the terms and conditions of the BSD License
|
# are licensed and made available under the terms and conditions of the BSD License
|
||||||
@ -420,8 +420,10 @@ class GenFdsGlobalVariable:
|
|||||||
def GetAlignment (AlignString):
|
def GetAlignment (AlignString):
|
||||||
if AlignString == None:
|
if AlignString == None:
|
||||||
return 0
|
return 0
|
||||||
if AlignString in ("1K", "2K", "4K", "8K", "16K", "32K", "64K"):
|
if AlignString in ("1K", "2K", "4K", "8K", "16K", "32K", "64K", "128K", "256K", "512K"):
|
||||||
return int (AlignString.rstrip('K')) * 1024
|
return int (AlignString.rstrip('K')) * 1024
|
||||||
|
elif AlignString in ("1M", "2M", "4M", "8M", "16M"):
|
||||||
|
return int (AlignString.rstrip('M')) * 1024 * 1024
|
||||||
else:
|
else:
|
||||||
return int (AlignString)
|
return int (AlignString)
|
||||||
|
|
||||||
@ -429,7 +431,7 @@ class GenFdsGlobalVariable:
|
|||||||
def GenerateFfs(Output, Input, Type, Guid, Fixed=False, CheckSum=False, Align=None,
|
def GenerateFfs(Output, Input, Type, Guid, Fixed=False, CheckSum=False, Align=None,
|
||||||
SectionAlign=None):
|
SectionAlign=None):
|
||||||
Cmd = ["GenFfs", "-t", Type, "-g", Guid]
|
Cmd = ["GenFfs", "-t", Type, "-g", Guid]
|
||||||
mFfsValidAlign = ["0", "8", "16", "128", "512", "1K", "4K", "32K", "64K"]
|
mFfsValidAlign = ["0", "8", "16", "128", "512", "1K", "4K", "32K", "64K", "128K", "256K", "512K", "1M", "2M", "4M", "8M", "16M"]
|
||||||
if Fixed == True:
|
if Fixed == True:
|
||||||
Cmd += ["-x"]
|
Cmd += ["-x"]
|
||||||
if CheckSum:
|
if CheckSum:
|
||||||
|
Reference in New Issue
Block a user