mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-05-02 17:00:53 +00:00
tools: Small improvement to print_memory_map script
This patch: - Add the __COHERENT_RAM_START__ and __COHERENT_RAM_END__ symbols. - Improve how the symbols are found with a regex. - Add a build option to revert the memory layout output. Change-Id: I54ec660261431bc98d78acb0f80e3d95bc5397ac Signed-off-by: Louis Mayencourt <louis.mayencourt@arm.com>
This commit is contained in:
parent
572fcdd547
commit
b890b36d1d
3 changed files with 33 additions and 16 deletions
3
Makefile
3
Makefile
|
@ -770,6 +770,7 @@ $(eval $(call assert_boolean,GENERATE_COT))
|
||||||
$(eval $(call assert_boolean,GICV2_G0_FOR_EL3))
|
$(eval $(call assert_boolean,GICV2_G0_FOR_EL3))
|
||||||
$(eval $(call assert_boolean,HANDLE_EA_EL3_FIRST))
|
$(eval $(call assert_boolean,HANDLE_EA_EL3_FIRST))
|
||||||
$(eval $(call assert_boolean,HW_ASSISTED_COHERENCY))
|
$(eval $(call assert_boolean,HW_ASSISTED_COHERENCY))
|
||||||
|
$(eval $(call assert_boolean,INVERTED_MEMMAP))
|
||||||
$(eval $(call assert_boolean,MEASURED_BOOT))
|
$(eval $(call assert_boolean,MEASURED_BOOT))
|
||||||
$(eval $(call assert_boolean,NS_TIMER_SWITCH))
|
$(eval $(call assert_boolean,NS_TIMER_SWITCH))
|
||||||
$(eval $(call assert_boolean,OVERRIDE_LIBC))
|
$(eval $(call assert_boolean,OVERRIDE_LIBC))
|
||||||
|
@ -1088,7 +1089,7 @@ romlib.bin: libraries
|
||||||
|
|
||||||
# Call print_memory_map tool
|
# Call print_memory_map tool
|
||||||
memmap: all
|
memmap: all
|
||||||
${Q}${PYTHON} $(PRINT_MEMORY_MAP) $(BUILD_PLAT)
|
${Q}${PYTHON} ${PRINT_MEMORY_MAP} ${BUILD_PLAT} ${INVERTED_MEMMAP}
|
||||||
|
|
||||||
doc:
|
doc:
|
||||||
@echo " BUILD DOCUMENTATION"
|
@echo " BUILD DOCUMENTATION"
|
||||||
|
|
|
@ -340,6 +340,11 @@ Common build options
|
||||||
translation library (xlat tables v2) must be used; version 1 of translation
|
translation library (xlat tables v2) must be used; version 1 of translation
|
||||||
library is not supported.
|
library is not supported.
|
||||||
|
|
||||||
|
- ``INVERTED_MEMMAP``: memmap tool print by default lower addresses at the
|
||||||
|
bottom, higher addresses at the top. This buid flag can be set to '1' to
|
||||||
|
invert this behavior. Lower addresses will be printed at the top and higher
|
||||||
|
addresses at the bottom.
|
||||||
|
|
||||||
- ``JUNO_AARCH32_EL3_RUNTIME``: This build flag enables you to execute EL3
|
- ``JUNO_AARCH32_EL3_RUNTIME``: This build flag enables you to execute EL3
|
||||||
runtime software in AArch32 mode, which is required to run AArch32 on Juno.
|
runtime software in AArch32 mode, which is required to run AArch32 on Juno.
|
||||||
By default this flag is set to '0'. Enabling this flag builds BL1 and BL2 in
|
By default this flag is set to '0'. Enabling this flag builds BL1 and BL2 in
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# Copyright (c) 2019, Arm Limited. All rights reserved.
|
# Copyright (c) 2019-2020, Arm Limited. All rights reserved.
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: BSD-3-Clause
|
# SPDX-License-Identifier: BSD-3-Clause
|
||||||
#
|
#
|
||||||
|
@ -22,6 +22,7 @@ blx_symbols = ['__BL1_RAM_START__', '__BL1_RAM_END__',
|
||||||
'__DATA_START__', '__DATA_END__',
|
'__DATA_START__', '__DATA_END__',
|
||||||
'__STACKS_START__', '__STACKS_END__',
|
'__STACKS_START__', '__STACKS_END__',
|
||||||
'__BSS_END',
|
'__BSS_END',
|
||||||
|
'__COHERENT_RAM_START__', '__COHERENT_RAM_END__',
|
||||||
]
|
]
|
||||||
|
|
||||||
# Regex to extract address from map file
|
# Regex to extract address from map file
|
||||||
|
@ -31,8 +32,11 @@ address_pattern = re.compile(r"\b0x\w*")
|
||||||
address_list = []
|
address_list = []
|
||||||
|
|
||||||
# Get the directory from command line or use a default one
|
# Get the directory from command line or use a default one
|
||||||
|
inverted_print = True
|
||||||
if len(sys.argv) >= 2:
|
if len(sys.argv) >= 2:
|
||||||
build_dir = sys.argv[1]
|
build_dir = sys.argv[1]
|
||||||
|
if len(sys.argv) >= 3:
|
||||||
|
inverted_print = sys.argv[2] == '0'
|
||||||
else:
|
else:
|
||||||
build_dir = 'build/fvp/debug'
|
build_dir = 'build/fvp/debug'
|
||||||
|
|
||||||
|
@ -43,7 +47,10 @@ for image in bl_images:
|
||||||
with open (file_path, 'rt') as mapfile:
|
with open (file_path, 'rt') as mapfile:
|
||||||
for line in mapfile:
|
for line in mapfile:
|
||||||
for symbol in blx_symbols:
|
for symbol in blx_symbols:
|
||||||
if line.find(symbol) > 0 and line.find("ASSERT") < 0:
|
# Regex to find symbol definition
|
||||||
|
line_pattern = re.compile(r"\b0x\w*\s*" + symbol + "\s= .")
|
||||||
|
match = line_pattern.search(line)
|
||||||
|
if match:
|
||||||
# Extract address from line
|
# Extract address from line
|
||||||
match = address_pattern.search(line)
|
match = address_pattern.search(line)
|
||||||
if match:
|
if match:
|
||||||
|
@ -52,17 +59,21 @@ for image in bl_images:
|
||||||
# Sort by address
|
# Sort by address
|
||||||
address_list.sort(key=operator.itemgetter(0))
|
address_list.sort(key=operator.itemgetter(0))
|
||||||
|
|
||||||
# Generate memory view
|
# Invert list for lower address at bottom
|
||||||
print('{:-^87}'.format('Memory Map from: ' + build_dir))
|
if inverted_print:
|
||||||
for address in reversed(address_list):
|
address_list = reversed(address_list)
|
||||||
if "bl1" in address[2]:
|
|
||||||
print(address[0], '+{:-^20}+ |{:^20}| |{:^20}|'.format(address[1], '', ''))
|
|
||||||
elif "bl2" in address[2]:
|
|
||||||
print(address[0], '|{:^20}| +{:-^20}+ |{:^20}|'.format('', address[1], ''))
|
|
||||||
elif "bl31" in address[2]:
|
|
||||||
print(address[0], '|{:^20}| |{:^20}| +{:-^20}+'.format('', '', address[1]))
|
|
||||||
else:
|
|
||||||
print(address[0], '|{:^20}| |{:^20}| +{:-^20}+'.format('', '', address[1]))
|
|
||||||
|
|
||||||
print('{:^20}{:_^20} {:_^20} {:_^20}'.format('', '', '', ''))
|
# Generate memory view
|
||||||
print('{:^20}{:^20} {:^20} {:^20}'.format('address', 'bl1', 'bl2', 'bl31'))
|
print('{:-^93}'.format('Memory Map from: ' + build_dir))
|
||||||
|
for address in address_list:
|
||||||
|
if "bl1" in address[2]:
|
||||||
|
print(address[0], '+{:-^22}+ |{:^22}| |{:^22}|'.format(address[1], '', ''))
|
||||||
|
elif "bl2" in address[2]:
|
||||||
|
print(address[0], '|{:^22}| +{:-^22}+ |{:^22}|'.format('', address[1], ''))
|
||||||
|
elif "bl31" in address[2]:
|
||||||
|
print(address[0], '|{:^22}| |{:^22}| +{:-^22}+'.format('', '', address[1]))
|
||||||
|
else:
|
||||||
|
print(address[0], '|{:^22}| |{:^22}| +{:-^22}+'.format('', '', address[1]))
|
||||||
|
|
||||||
|
print('{:^20}{:_^22} {:_^22} {:_^22}'.format('', '', '', ''))
|
||||||
|
print('{:^20}{:^22} {:^22} {:^22}'.format('address', 'bl1', 'bl2', 'bl31'))
|
||||||
|
|
Loading…
Add table
Reference in a new issue