diff --git a/src/link/output.cpp b/src/link/output.cpp index ececfcc2..47106466 100644 --- a/src/link/output.cpp +++ b/src/link/output.cpp @@ -468,11 +468,12 @@ static void writeMapBank(SortedSections const §List, SectionType type, uint3 uint16_t prevEndAddr = sectionTypeInfo[type].startAddr; uint16_t used = forEachSection(sectList, [&](Section const §) { assume(sect.offset == 0); - - writeEmptySpace(prevEndAddr, sect.org); - assume(sect.org + sect.size <= UINT16_MAX); - prevEndAddr = sect.org + sect.size; + + if (uint16_t endAddr = sect.org + sect.size; endAddr > prevEndAddr) { + writeEmptySpace(prevEndAddr, sect.org); + prevEndAddr = endAddr; + } fprintf(mapFile, "\tSECTION: $%04" PRIx16, sect.org); if (sect.size != 0) { diff --git a/test/link/map-file/a.asm b/test/link/map-file/a.asm index 18993697..f20eaa9c 100644 --- a/test/link/map-file/a.asm +++ b/test/link/map-file/a.asm @@ -4,7 +4,7 @@ Label0:: ds 1 : SECTION "romx", ROMX -Label1:: ds 2 +xLabel:: ds 2 .local:: : @@ -34,3 +34,16 @@ hLabel:: ds 7 : SECTION "\n\r\t\"\\", ROM0[1] + +SECTION "empty rom0", ROM0[2] + +SECTION "rom0 again", ROM0 +Label1:: ds 10 + +SECTION "empty rom0 again", ROM0[8] + +SECTION "rom0 yet again", ROM0 +Label2:: ds 10 + +SECTION "rom0 lonely", ROM0[$100] +FarAway:: diff --git a/test/link/map-file/ref.out.map b/test/link/map-file/ref.out.map index b12a8348..bed120f9 100644 --- a/test/link/map-file/ref.out.map +++ b/test/link/map-file/ref.out.map @@ -1,5 +1,5 @@ SUMMARY: - ROM0: 1 byte used / 16383 free + ROM0: 21 bytes used / 16363 free ROMX: 2 bytes used / 16382 free in 1 bank SRAM: 4 bytes used / 8188 free in 1 bank WRAM0: 5 bytes used / 4091 free @@ -7,17 +7,26 @@ SUMMARY: HRAM: 7 bytes used / 120 free ROM0 bank #0: - SECTION: $0000-$0000 ($0001 byte) ["rom0"] - $0000 = Label0 - $0001 = Label0.local + SECTION: $0000-$0009 ($000a bytes) ["rom0 yet again"] + $0000 = Label2 SECTION: $0001 ($0000 bytes) ["\n\r\t\"\\"] - EMPTY: $0001-$3fff ($3fff bytes) - TOTAL EMPTY: $3fff bytes + SECTION: $0002 ($0000 bytes) ["empty rom0"] + SECTION: $0008 ($0000 bytes) ["empty rom0 again"] + SECTION: $000a-$0013 ($000a bytes) ["rom0 again"] + $000a = Label1 + SECTION: $0014-$0014 ($0001 byte) ["rom0"] + $0014 = Label0 + $0015 = Label0.local + EMPTY: $0015-$00ff ($00eb bytes) + SECTION: $0100 ($0000 bytes) ["rom0 lonely"] + $0100 = FarAway + EMPTY: $0100-$3fff ($3f00 bytes) + TOTAL EMPTY: $3feb bytes ROMX bank #1: SECTION: $4000-$4001 ($0002 bytes) ["romx"] - $4000 = Label1 - $4002 = Label1.local + $4000 = xLabel + $4002 = xLabel.local EMPTY: $4002-$7fff ($3ffe bytes) TOTAL EMPTY: $3ffe bytes