@@ -711,19 +711,16 @@ def _generate_bootloader_build(self, rom_start, rom_size):
711
711
if part .minaddr () != rom_start :
712
712
raise ConfigException ("bootloader executable does not "
713
713
"start at 0x%x" % rom_start )
714
- if len (part .segments ()) == 1 :
715
- part_size = (part .maxaddr () - part .minaddr ()) + 1
716
- part_size = Config ._align_ceiling (rom_start + part_size , self .sectors ) - rom_start
717
- else :
718
- # assume first segment is at start
714
+
715
+ # segments returns start address and 'next after end' address
716
+ part_size = part .segments ()[0 ][1 ] - part .segments ()[0 ][0 ]
717
+ part_size = Config ._align_ceiling (rom_start + part_size , self .sectors ) - rom_start
718
+
719
+ if len (part .segments ()) > 1 and part .segments ()[1 ][0 ] < rom_end :
720
+ # assume first segment is at start (already checked earlier as segments are returned in order)
719
721
# second at the end or outside ROM
720
722
# rest outside regular ROM
721
- if part .segments ()[0 ][0 ] != rom_start :
722
- raise ConfigException ("bootloader segments not in order" )
723
- part_size = part .segments ()[0 ][1 ] - part .segments ()[0 ][0 ]
724
- part_size = Config ._align_ceiling (rom_start + part_size , self .sectors ) - rom_start
725
- if part .segments ()[1 ][0 ] < rom_end :
726
- max_app_addr = part .segments ()[1 ][0 ]
723
+ max_app_addr = part .segments ()[1 ][0 ]
727
724
728
725
yield Region ("bootloader" , rom_start , part_size , False ,
729
726
filename )
0 commit comments