From e569e0c2005acadfd60c7442f388e56682367bd8 Mon Sep 17 00:00:00 2001 From: Rangi42 Date: Fri, 5 Sep 2025 15:17:21 -0400 Subject: [PATCH] Don't comment "; Next fragment/union" in .map files for empty section pieces Fixes #1821 --- src/link/output.cpp | 21 ++++++++++-------- test/link/fragment-literals/a.asm | 18 +++++++++++++++ test/link/fragment-literals/ref.out.bin | Bin 0 -> 39 bytes test/link/fragment-literals/ref.out.map | 10 +++++++++ test/link/fragment-literals/ref.out.sym | 3 +++ .../link/load-fragment/section-fragment/c.asm | 3 +-- .../section-fragment/ref.out.map | 3 --- .../section-fragment/ref.out.sym | 2 -- test/link/test.sh | 10 +++++++++ 9 files changed, 54 insertions(+), 16 deletions(-) create mode 100644 test/link/fragment-literals/a.asm create mode 100644 test/link/fragment-literals/ref.out.bin create mode 100644 test/link/fragment-literals/ref.out.map create mode 100644 test/link/fragment-literals/ref.out.sym diff --git a/src/link/output.cpp b/src/link/output.cpp index adbeeeba..c4c8868c 100644 --- a/src/link/output.cpp +++ b/src/link/output.cpp @@ -433,25 +433,28 @@ uint16_t forEachSection(SortedSections const §List, F callback) { } static void writeMapSymbols(Section const *sect) { - for (uint16_t org = sect->org; sect; sect = sect->nextu.get()) { + uint16_t org = sect->org; + + for (bool announced = true; sect; sect = sect->nextu.get(), announced = false) { for (Symbol *sym : sect->symbols) { // Don't output symbols that begin with an illegal character if (sym->name.empty() || !startsIdentifier(sym->name[0])) { continue; } + // Announce this "piece" before its contents + if (!announced) { + if (sect->modifier == SECTION_UNION) { + fputs("\t ; Next union\n", mapFile); + } else if (sect->modifier == SECTION_FRAGMENT) { + fputs("\t ; Next fragment\n", mapFile); + } + announced = true; + } // Space matches "\tSECTION: $xxxx ..." fprintf(mapFile, "\t $%04" PRIx32 " = ", sym->label().offset + org); writeSymName(sym->name, mapFile); putc('\n', mapFile); } - - // Announce the following "piece" - if (SectionModifier mod = sect->nextu ? sect->nextu->modifier : SECTION_NORMAL; - mod == SECTION_UNION) { - fputs("\t ; Next union\n", mapFile); - } else if (mod == SECTION_FRAGMENT) { - fputs("\t ; Next fragment\n", mapFile); - } } } diff --git a/test/link/fragment-literals/a.asm b/test/link/fragment-literals/a.asm new file mode 100644 index 00000000..180d6a0f --- /dev/null +++ b/test/link/fragment-literals/a.asm @@ -0,0 +1,18 @@ +section "PrintHL", rom0 +PrintHL:: + ; ... + ret + +section "PrintNth", rom0 +PrintNth:: + ld hl, [[ + dw [[ db "one\0" ]] + dw [[ db "two\0" ]] + dw [[ db "three\0" ]] + dw [[ db "four\0" ]] + ]] + ld d, 0 + ld e, a + add hl, de + add hl, de + call PrintHL diff --git a/test/link/fragment-literals/ref.out.bin b/test/link/fragment-literals/ref.out.bin new file mode 100644 index 0000000000000000000000000000000000000000..fdd3e3ae6658cee353627e97000588058f68d3ec GIT binary patch literal 39 ucmY%7W)NeDmy|rK#vsff&LGX8$dI3x%1~0C&rp(4l$y$rmS0-La1sEGya{Fi literal 0 HcmV?d00001 diff --git a/test/link/fragment-literals/ref.out.map b/test/link/fragment-literals/ref.out.map new file mode 100644 index 00000000..621c9442 --- /dev/null +++ b/test/link/fragment-literals/ref.out.map @@ -0,0 +1,10 @@ +SUMMARY: + ROM0: 39 bytes used / 16345 free + +ROM0 bank #0: + SECTION: $0000-$0025 ($0026 bytes) ["PrintNth"] + $0000 = PrintNth + SECTION: $0026-$0026 ($0001 byte) ["PrintHL"] + $0026 = PrintHL + EMPTY: $0027-$3fff ($3fd9 bytes) + TOTAL EMPTY: $3fd9 bytes diff --git a/test/link/fragment-literals/ref.out.sym b/test/link/fragment-literals/ref.out.sym new file mode 100644 index 00000000..e40106c5 --- /dev/null +++ b/test/link/fragment-literals/ref.out.sym @@ -0,0 +1,3 @@ +; File generated by rgblink +00:0000 PrintNth +00:0026 PrintHL diff --git a/test/link/load-fragment/section-fragment/c.asm b/test/link/load-fragment/section-fragment/c.asm index 27ed94c0..0ec4b4f1 100644 --- a/test/link/load-fragment/section-fragment/c.asm +++ b/test/link/load-fragment/section-fragment/c.asm @@ -1,8 +1,7 @@ SECTION FRAGMENT "rom", ROM0 -Part3:: +; No labels in this fragment LOAD FRAGMENT "ram", WRAM0 wPart3:: jr wPart1 jr wPart3 ENDL -Part3End:: diff --git a/test/link/load-fragment/section-fragment/ref.out.map b/test/link/load-fragment/section-fragment/ref.out.map index bb7b7b97..8f094214 100644 --- a/test/link/load-fragment/section-fragment/ref.out.map +++ b/test/link/load-fragment/section-fragment/ref.out.map @@ -7,9 +7,6 @@ ROM0 bank #0: $0000 = Part1 $0004 = Part1End ; Next fragment - $0010 = Part3 - $0014 = Part3End - ; Next fragment $0004 = Part2 $0010 = Part2End EMPTY: $0014-$3fff ($3fec bytes) diff --git a/test/link/load-fragment/section-fragment/ref.out.sym b/test/link/load-fragment/section-fragment/ref.out.sym index aeee3e80..033767ea 100644 --- a/test/link/load-fragment/section-fragment/ref.out.sym +++ b/test/link/load-fragment/section-fragment/ref.out.sym @@ -3,7 +3,5 @@ 00:0004 Part1End 00:0004 Part2 00:0010 Part2End -00:0010 Part3 -00:0014 Part3End 00:c000 wPart1 00:c004 wPart3 diff --git a/test/link/test.sh b/test/link/test.sh index f2f6a4a9..15958c75 100755 --- a/test/link/test.sh +++ b/test/link/test.sh @@ -174,6 +174,16 @@ for test in fragment-align/*; do evaluateTest done +test="fragment-literals" +startTest +"$RGBASM" -o "$otemp" "$test"/a.asm +continueTest +rgblinkQuiet -o "$gbtemp" -m "$outtemp" -n "$outtemp2" "$otemp" +tryCmpRom "$test"/ref.out.bin +tryDiff "$test"/ref.out.map "$outtemp" +tryDiff "$test"/ref.out.sym "$outtemp2" +evaluateTest + test="high-low" startTest "$RGBASM" -o "$otemp" "$test"/a.asm