mirror of
https://github.com/gbdev/rgbds.git
synced 2025-11-20 18:22:07 +00:00
Add more RGBLINK test coverage (#1637)
This commit is contained in:
@@ -83,7 +83,7 @@ void sect_CheckSizes() {
|
|||||||
if (uint32_t maxSize = sectionTypeInfo[sect.type].size; sect.size > maxSize) {
|
if (uint32_t maxSize = sectionTypeInfo[sect.type].size; sect.size > maxSize) {
|
||||||
error(
|
error(
|
||||||
"Section '%s' grew too big (max size = 0x%" PRIX32 " bytes, reached 0x%" PRIX32
|
"Section '%s' grew too big (max size = 0x%" PRIX32 " bytes, reached 0x%" PRIX32
|
||||||
").\n",
|
")\n",
|
||||||
sect.name.c_str(),
|
sect.name.c_str(),
|
||||||
maxSize,
|
maxSize,
|
||||||
sect.size
|
sect.size
|
||||||
@@ -239,7 +239,7 @@ static void mergeSections(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (sect.modifier != mod) {
|
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 {
|
} else {
|
||||||
switch (mod) {
|
switch (mod) {
|
||||||
case SECTION_UNION:
|
case SECTION_UNION:
|
||||||
@@ -850,8 +850,8 @@ void sect_PCRelByte(Expression &expr, uint32_t pcShift) {
|
|||||||
|
|
||||||
if (offset < -128 || offset > 127) {
|
if (offset < -128 || offset > 127) {
|
||||||
error(
|
error(
|
||||||
"jr target must be between -128 and 127 bytes away, not %" PRId16
|
"JR target must be between -128 and 127 bytes away, not %" PRId16
|
||||||
"; use jp instead\n",
|
"; use JP instead\n",
|
||||||
offset
|
offset
|
||||||
);
|
);
|
||||||
writeByte(0);
|
writeByte(0);
|
||||||
|
|||||||
@@ -516,8 +516,8 @@ static void applyFilePatches(Section §ion, Section &dataSection) {
|
|||||||
error(
|
error(
|
||||||
patch.src,
|
patch.src,
|
||||||
patch.lineNo,
|
patch.lineNo,
|
||||||
"jr target must be between -128 and 127 bytes away, not %" PRId16
|
"JR target must be between -128 and 127 bytes away, not %" PRId16
|
||||||
"; use jp instead\n",
|
"; use JP instead",
|
||||||
jumpOffset
|
jumpOffset
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -133,12 +133,12 @@ static void mergeSections(Section &target, std::unique_ptr<Section> &&other) {
|
|||||||
if (target.modifier != other->modifier) {
|
if (target.modifier != other->modifier) {
|
||||||
fprintf(
|
fprintf(
|
||||||
stderr,
|
stderr,
|
||||||
"error: Section \"%s\" is defined as %s at ",
|
"error: Section \"%s\" is defined as SECTION %s at ",
|
||||||
target.name.c_str(),
|
target.name.c_str(),
|
||||||
sectionModNames[target.modifier]
|
sectionModNames[target.modifier]
|
||||||
);
|
);
|
||||||
target.src->dump(target.lineNo);
|
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);
|
other->src->dump(other->lineNo);
|
||||||
putc('\n', stderr);
|
putc('\n', stderr);
|
||||||
exit(1);
|
exit(1);
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ SectionTypeInfo sectionTypeInfo[SECTTYPE_INVALID] = {
|
|||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
char const * const sectionModNames[] = {
|
char const * const sectionModNames[] = {
|
||||||
"regular", // SECTION_NORMAL
|
"(no modifier)", // SECTION_NORMAL
|
||||||
"union", // SECTION_UNION
|
"UNION", // SECTION_UNION
|
||||||
"fragment", // SECTION_FRAGMENT
|
"FRAGMENT", // SECTION_FRAGMENT
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
error: invalid-jr.asm(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)!
|
error: Assembly aborted (1 error)!
|
||||||
|
|||||||
@@ -3,13 +3,13 @@ warning: load-overflow.asm(5): [-Wempty-data-directive]
|
|||||||
warning: load-overflow.asm(6): [-Wempty-data-directive]
|
warning: load-overflow.asm(6): [-Wempty-data-directive]
|
||||||
DB directive without data in ROM
|
DB directive without data in ROM
|
||||||
error: load-overflow.asm(26):
|
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):
|
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):
|
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):
|
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):
|
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)!
|
error: Assembly aborted (5 errors)!
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
error: section-union.asm(37):
|
error: section-union.asm(37):
|
||||||
Section already declared as union section
|
Section already declared as SECTION UNION
|
||||||
FATAL: section-union.asm(37):
|
FATAL: section-union.asm(37):
|
||||||
Cannot create section "test" (1 error)
|
Cannot create section "test" (1 error)
|
||||||
|
|||||||
10
test/link/invalid-patches.asm
Normal file
10
test/link/invalid-patches.asm
Normal file
@@ -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
test/link/invalid-patches.out
Normal file
9
test/link/invalid-patches.out
Normal file
@@ -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
test/link/section-conflict/different-mod/a.asm
Normal file
2
test/link/section-conflict/different-mod/a.asm
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
section fragment "test", rom0
|
||||||
|
db 1
|
||||||
2
test/link/section-conflict/different-mod/b.asm
Normal file
2
test/link/section-conflict/different-mod/b.asm
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
section union "test", rom0
|
||||||
|
db 2
|
||||||
1
test/link/section-conflict/different-mod/out.err
Normal file
1
test/link/section-conflict/different-mod/out.err
Normal file
@@ -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)
|
||||||
@@ -269,6 +269,15 @@ rgblinkQuiet "$otemp" "$test"/b.rel 2>"$outtemp"
|
|||||||
tryDiff "$test"/out.err "$outtemp"
|
tryDiff "$test"/out.err "$outtemp"
|
||||||
evaluateTest
|
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"
|
test="section-fragment/good"
|
||||||
startTest
|
startTest
|
||||||
"$RGBASM" -o "$otemp" "$test"/a.asm
|
"$RGBASM" -o "$otemp" "$test"/a.asm
|
||||||
|
|||||||
Reference in New Issue
Block a user