@@ -411,7 +411,7 @@ def _fill_header(region_list, current_region):
411
411
return header
412
412
413
413
414
- def merge_region_list (region_list , destination , notify , padding = b'\xFF ' ):
414
+ def merge_region_list (region_list , destination , notify , config , padding = b'\xFF ' ):
415
415
"""Merge the region_list into a single image
416
416
417
417
Positional Arguments:
@@ -435,6 +435,13 @@ def merge_region_list(region_list, destination, notify, padding=b'\xFF'):
435
435
notify .info (" Filling region %s with %s" % (region .name , region .filename ))
436
436
part = intelhex_offset (region .filename , offset = region .start )
437
437
part .start_addr = None
438
+ # Normally, we assume that part.maxddr() can be beyond
439
+ # end of rom. However, if the size is restricted with config, do check.
440
+ if config .target .restrict_size is not None :
441
+ part_size = (part .maxaddr () - part .minaddr ()) + 1
442
+ if part_size > region .size :
443
+ raise ToolException ("Contents of region %s does not fit"
444
+ % region .name )
438
445
merged .merge (part )
439
446
440
447
# Hex file can have gaps, so no padding needed. While other formats may
@@ -555,13 +562,13 @@ def build_project(src_paths, build_path, target, toolchain_name,
555
562
for r in region_list ]
556
563
res = "%s.%s" % (join (build_path , name ),
557
564
getattr (toolchain .target , "OUTPUT_EXT" , "bin" ))
558
- merge_region_list (region_list , res , notify )
565
+ merge_region_list (region_list , res , notify , toolchain . config )
559
566
update_regions = [
560
567
r for r in region_list if r .name in UPDATE_WHITELIST
561
568
]
562
569
if update_regions :
563
570
update_res = join (build_path , generate_update_filename (name , toolchain .target ))
564
- merge_region_list (update_regions , update_res , notify )
571
+ merge_region_list (update_regions , update_res , notify , toolchain . config )
565
572
res = (res , update_res )
566
573
else :
567
574
res = (res , None )
0 commit comments