trogdor: support mbn_version 6 with python build scripts

Developer/Reviewer, be aware of this patch from Mistral:
 https://review.coreboot.org/c/coreboot/+/33425/18

Change-Id: I020d1e4d4f5c948948e1b39dd18af1d0e860c279
Signed-off-by: T Michael Turney <mturney@codeaurora.org>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/35506
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Julius Werner <jwerner@chromium.org>
This commit is contained in:
T Michael Turney
2019-08-07 14:26:32 -07:00
committed by Julius Werner
parent 01bfa53f77
commit bcd62f5737
3 changed files with 112 additions and 70 deletions

View File

@@ -44,11 +44,13 @@
#
# when who what, where, why
# -------- --- ------------------------------------------------------
# 05/21/19 rissha Added --mbn_version to add MBN header accordingly
# 03/26/18 tv Added -e to enable extended MBNV5 support
# 09/04/15 et Added -x and -d to embed xbl_sec ELF
# 02/11/15 ck Fixed missing elf type check in ZI OOB feature
# 11/04/14 ck Updated calls to mbn_tools functions
# 10/22/14 ck Added -z option to remove out of bounds ZI segments when converting from 64 to 32
# 10/22/14 ck Added -z option to remove out of bounds ZI segments when
# converting from 64 to 32
# 10/10/14 ck Added -c option and logic to enable elf type swapping
# 09/12/14 ck Added single file logic
# 08/29/14 ck Added no_hash option
@@ -119,6 +121,10 @@ def main():
help="Removes ZI segments that have addresses greater" + \
" than 32 bits when converting from a 64 to 32 bit ELF")
parser.add_option("--mbn_version",
action="store", type="int", dest="mbn_version",
help="Add mbn header in elf image. '3', '5' or '6'")
(options, args) = parser.parse_args()
if not options.elf_inp_file1:
@@ -206,11 +212,13 @@ def main():
else:
zi_oob_enabled = True
if options.elf_inp_xbl_sec:
is_ext_mbn_v5 = True
else:
is_ext_mbn_v5 = False
header_version = 3
if options.elf_inp_xbl_sec:
header_version = 5
if options.mbn_version:
header_version = options.mbn_version
mbn_type = 'elf'
header_format = 'reg'
@@ -244,7 +252,7 @@ def main():
is_elf_xbl_sec_64_bit,
is_out_elf_64_bit,
zi_oob_enabled,
is_ext_mbn_v5)
header_version)
# Hash the image if user did not explicitly say not to
@@ -259,7 +267,8 @@ def main():
source_elf,
target_hash,
elf_out_file_name = target_phdr_elf,
secure_type = image_header_secflag)
secure_type = image_header_secflag,
header_version = header_version )
if rv:
raise RuntimeError, "Failed to run pboot_gen_elf"
@@ -269,8 +278,8 @@ def main():
target_hash,
target_hash_hd,
image_header_secflag,
is_ext_mbn_v5,
elf_file_name = source_elf)
elf_file_name = source_elf,
header_version = header_version)
if rv:
raise RuntimeError, "Failed to create image header for hash segment"
@@ -305,7 +314,7 @@ def merge_elfs(env,
is_elf_xbl_sec_64_bit,
is_out_elf_64_bit,
zi_oob_enabled,
is_ext_mbn_v5):
header_version):
[elf_header1, phdr_table1] = \
mbn_tools.preprocess_elf_file(elf_in_file_name1)
@@ -663,12 +672,12 @@ def merge_elfs(env,
new_phdr.p_paddr = phys_virt_addr
new_phdr.p_filesz = os.path.getsize(elf_in_file_xbl_sec)
new_phdr.p_memsz = new_phdr.p_filesz
if is_ext_mbn_v5 == True:
new_phdr.p_flags = (0x5 |
(mbn_tools.MI_PBT_XBL_SEC_SEGMENT <<
mbn_tools.MI_PBT_FLAG_SEGMENT_TYPE_SHIFT));
if header_version >= 5:
new_phdr.p_flags = (0x5 |
(mbn_tools.MI_PBT_XBL_SEC_SEGMENT <<
mbn_tools.MI_PBT_FLAG_SEGMENT_TYPE_SHIFT));
else:
new_phdr.p_flags = 0x5
new_phdr.p_flags = 0x5
new_phdr.p_align = 0x1000
else:
# Converting from 64 to 32 elf requires data size validation
@@ -677,12 +686,12 @@ def merge_elfs(env,
new_phdr = mbn_tools.Elf32_Phdr('\0' * ELF32_PHDR_SIZE)
new_phdr.p_type = 0x1 #
new_phdr.p_offset = segment_offset
if is_ext_mbn_v5 == True:
new_phdr.p_flags = (0x5 |
(mbn_tools.MI_PBT_XBL_SEC_SEGMENT <<
mbn_tools.MI_PBT_FLAG_SEGMENT_TYPE_SHIFT));
if header_version >= 5:
new_phdr.p_flags = (0x5 |
(mbn_tools.MI_PBT_XBL_SEC_SEGMENT <<
mbn_tools.MI_PBT_FLAG_SEGMENT_TYPE_SHIFT));
else:
new_phdr.p_flags = 0x5
new_phdr.p_flags = 0x5
new_phdr.p_align = 0x1000
if phys_virt_addr > 0xFFFFFFFF: