Skip to content

Commit

Permalink
Add more RGBLINK test coverage (gbdev#1637)
Browse files Browse the repository at this point in the history
  • Loading branch information
Rangi42 authored Jan 29, 2025
1 parent c19ddc8 commit f61019d
Show file tree
Hide file tree
Showing 13 changed files with 51 additions and 18 deletions.
8 changes: 4 additions & 4 deletions src/asm/section.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ void sect_CheckSizes() {
if (uint32_t maxSize = sectionTypeInfo[sect.type].size; sect.size > maxSize) {
error(
"Section '%s' grew too big (max size = 0x%" PRIX32 " bytes, reached 0x%" PRIX32
").\n",
")\n",
sect.name.c_str(),
maxSize,
sect.size
Expand Down Expand Up @@ -239,7 +239,7 @@ static void mergeSections(
}

if (sect.modifier != mod) {
sectError("Section already declared as %s section\n", sectionModNames[sect.modifier]);
sectError("Section already declared as SECTION %s\n", sectionModNames[sect.modifier]);
} else {
switch (mod) {
case SECTION_UNION:
Expand Down Expand Up @@ -850,8 +850,8 @@ void sect_PCRelByte(Expression &expr, uint32_t pcShift) {

if (offset < -128 || offset > 127) {
error(
"jr target must be between -128 and 127 bytes away, not %" PRId16
"; use jp instead\n",
"JR target must be between -128 and 127 bytes away, not %" PRId16
"; use JP instead\n",
offset
);
writeByte(0);
Expand Down
4 changes: 2 additions & 2 deletions src/link/patch.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -516,8 +516,8 @@ static void applyFilePatches(Section &section, Section &dataSection) {
error(
patch.src,
patch.lineNo,
"jr target must be between -128 and 127 bytes away, not %" PRId16
"; use jp instead\n",
"JR target must be between -128 and 127 bytes away, not %" PRId16
"; use JP instead",
jumpOffset
);
}
Expand Down
4 changes: 2 additions & 2 deletions src/link/section.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -133,12 +133,12 @@ static void mergeSections(Section &target, std::unique_ptr<Section> &&other) {
if (target.modifier != other->modifier) {
fprintf(
stderr,
"error: Section \"%s\" is defined as %s at ",
"error: Section \"%s\" is defined as SECTION %s at ",
target.name.c_str(),
sectionModNames[target.modifier]
);
target.src->dump(target.lineNo);
fprintf(stderr, ", but as %s at ", sectionModNames[other->modifier]);
fprintf(stderr, ", but as SECTION %s at ", sectionModNames[other->modifier]);
other->src->dump(other->lineNo);
putc('\n', stderr);
exit(1);
Expand Down
6 changes: 3 additions & 3 deletions src/linkdefs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ SectionTypeInfo sectionTypeInfo[SECTTYPE_INVALID] = {
// clang-format on

char const * const sectionModNames[] = {
"regular", // SECTION_NORMAL
"union", // SECTION_UNION
"fragment", // SECTION_FRAGMENT
"(no modifier)", // SECTION_NORMAL
"UNION", // SECTION_UNION
"FRAGMENT", // SECTION_FRAGMENT
};
2 changes: 1 addition & 1 deletion test/asm/invalid-jr.err
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
error: invalid-jr.asm(3):
jr target must be between -128 and 127 bytes away, not -258; use jp instead
JR target must be between -128 and 127 bytes away, not -258; use JP instead
error: Assembly aborted (1 error)!
10 changes: 5 additions & 5 deletions test/asm/load-overflow.err
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@ warning: load-overflow.asm(5): [-Wempty-data-directive]
warning: load-overflow.asm(6): [-Wempty-data-directive]
DB directive without data in ROM
error: load-overflow.asm(26):
Section 'Overflow' grew too big (max size = 0x8000 bytes, reached 0x8002).
Section 'Overflow' grew too big (max size = 0x8000 bytes, reached 0x8002)
error: load-overflow.asm(26):
Section 'oops' grew too big (max size = 0x2000 bytes, reached 0x2002).
Section 'oops' grew too big (max size = 0x2000 bytes, reached 0x2002)
error: load-overflow.asm(26):
Section 'Moar overflow' grew too big (max size = 0x8000 bytes, reached 0xD000).
Section 'Moar overflow' grew too big (max size = 0x8000 bytes, reached 0xD000)
error: load-overflow.asm(26):
Section 'hmm' grew too big (max size = 0x2000 bytes, reached 0x4000).
Section 'hmm' grew too big (max size = 0x2000 bytes, reached 0x4000)
error: load-overflow.asm(26):
Section 'lol' grew too big (max size = 0x2000 bytes, reached 0x3000).
Section 'lol' grew too big (max size = 0x2000 bytes, reached 0x3000)
error: Assembly aborted (5 errors)!
2 changes: 1 addition & 1 deletion test/asm/section-union.err
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
error: section-union.asm(37):
Section already declared as union section
Section already declared as SECTION UNION
FATAL: section-union.asm(37):
Cannot create section "test" (1 error)
10 changes: 10 additions & 0 deletions test/link/invalid-patches.asm
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
section "zero", rom0
Zero::
db 1 % Zero
db 2 ** (Zero - 1)
db BANK(NonexistentSymbol)
db BANK("NonexistentSection")
db STARTOF("NonexistentSection")
db SIZEOF("NonexistentSection")
ldh [Zero], a
jr Zero + 200
9 changes: 9 additions & 0 deletions test/link/invalid-patches.out
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
error: invalid-patches.asm(10): JR target must be between -128 and 127 bytes away, not 190; use JP instead
warning: invalid-patches.asm(9): LDH is deprecated with values from $00 to $FF; use $FF00 to $FFFF
error: invalid-patches.asm(8): Requested SIZEOF() of section "NonexistentSection", which was not found
error: invalid-patches.asm(7): Requested STARTOF() of section "NonexistentSection", which was not found
error: invalid-patches.asm(6): Requested BANK() of section "NonexistentSection", which was not found
error: invalid-patches.asm(5): Requested BANK() of symbol "NonexistentSymbol", which was not found
error: invalid-patches.asm(4): Exponent by negative value -1
error: invalid-patches.asm(3): Modulo by 0
Linking failed with 7 errors
2 changes: 2 additions & 0 deletions test/link/section-conflict/different-mod/a.asm
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
section fragment "test", rom0
db 1
2 changes: 2 additions & 0 deletions test/link/section-conflict/different-mod/b.asm
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
section union "test", rom0
db 2
1 change: 1 addition & 0 deletions test/link/section-conflict/different-mod/out.err
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
error: Section "test" is defined as SECTION FRAGMENT at section-conflict/different-mod/a.asm(1), but as SECTION UNION at section-conflict/different-mod/b.asm(1)
9 changes: 9 additions & 0 deletions test/link/test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -269,6 +269,15 @@ rgblinkQuiet "$otemp" "$test"/b.rel 2>"$outtemp"
tryDiff "$test"/out.err "$outtemp"
evaluateTest

test="section-conflict/different-mod"
startTest
"$RGBASM" -o "$otemp" "$test"/a.asm
"$RGBASM" -o "$gbtemp" "$test"/b.asm
continueTest
rgblinkQuiet "$otemp" "$gbtemp" 2>"$outtemp"
tryDiff "$test"/out.err "$outtemp"
evaluateTest

test="section-fragment/good"
startTest
"$RGBASM" -o "$otemp" "$test"/a.asm
Expand Down

0 comments on commit f61019d

Please sign in to comment.