From 0d028847fd051321a65e04f34e9fd9fb61998b1f Mon Sep 17 00:00:00 2001 From: Wentong Wu Date: Sat, 21 Sep 2019 07:33:08 +0800 Subject: [PATCH] scripts: gen_relocate_app.py: add custom align size for relocation add custom align size for code relocation to reduce alignment memory wasting. Fixes: #17337. Signed-off-by: Wentong Wu --- scripts/gen_relocate_app.py | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/scripts/gen_relocate_app.py b/scripts/gen_relocate_app.py index 16649ed0b34fc7..cc523b2ea4c722 100644 --- a/scripts/gen_relocate_app.py +++ b/scripts/gen_relocate_app.py @@ -84,7 +84,11 @@ {{ __{0}_{1}_start = .; {4} +#if {6} + . = ALIGN({6}); +#else MPU_ALIGN(__{0}_{1}_size); +#endif __{0}_{1}_end = .; }} {5} __{0}_{1}_size = __{0}_{1}_end - __{0}_{1}_start; @@ -188,6 +192,12 @@ def assign_to_correct_mem_region(memory_type, iteration_sections["text"] or iteration_sections["rodata"]): all_regions = True + pos = memory_type.find('_') + if pos in range(len(memory_type)): + align_size = int(memory_type[pos+1:]) + memory_type = memory_type[:pos] + mpu_align[memory_type] = align_size + if memory_type in complete_list_of_sections: for iter_sec in ["text", "rodata", "data", "bss"]: if ((iteration_sections[iter_sec] or all_regions) and @@ -229,9 +239,14 @@ def string_create_helper(region, memory_type, linker_string += tmp else: if memory_type != 'SRAM' and region == 'rodata': + align_size = 0 + if memory_type in mpu_align.keys(): + align_size = mpu_align[memory_type] + linker_string += LINKER_SECTION_SEQ_MPU.format(memory_type.lower(), - region, memory_type.upper(), - region.upper(), tmp, load_address_string) + region, memory_type.upper(), + region.upper(), tmp, + load_address_string, align_size) else: linker_string += LINKER_SECTION_SEQ.format(memory_type.lower(), region, memory_type.upper(), region.upper(), @@ -400,6 +415,8 @@ def create_dict_wrt_mem(): def main(): + global mpu_align + mpu_align = {} parse_args() searchpath = args.directory linker_file = args.output