Fix underflowing SECTION FRAGMENT fixed address in RGBLINK (#2122)

This commit is contained in:
Rangi
2026-09-18 22:00:27 -04:00
committed by GitHub
parent 76bba2809b
commit c151450d9f
5 changed files with 30 additions and 0 deletions
+12
View File
@@ -56,6 +56,18 @@ static void checkPieceCompat(Section &target, Section const &other, size_t delta
other.org
);
}
} else if (other.org < delta) {
// Check that `org` did not underflow. Note that it's safe for the above checks to
// use an underflowed value, since their reported errors will still be accurate.
fatalTwoAt(
target,
other,
"Section \"%s\" contains %" PRIu16
" bytes, but is also defined with a lower fixed address $%04" PRIx16,
target.name.c_str(),
target.size,
other.org
);
}
target.isAddressFixed = true;
@@ -0,0 +1,2 @@
SECTION FRAGMENT "f", ROM0
ds 32, 0
@@ -0,0 +1,2 @@
SECTION FRAGMENT "f", ROM0[$10]
db 42
@@ -0,0 +1,5 @@
FATAL: Section "f" contains 32 bytes, but is also defined with a lower fixed address $0010
at section-fragment/org-beyond-size/a.asm(1)
and also:
at section-fragment/org-beyond-size/b.asm(1)
Linking aborted with 1 error
+9
View File
@@ -417,6 +417,15 @@ rgblinkQuiet -o "$gbtemp" "$otemp" "$gbtemp2"
tryCmpRom "$test"/ref.out.bin
evaluateTest
test="section-fragment/org-beyond-size"
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-normal/same-name"
startTest
"$RGBASM" -o "$otemp" "$test"/a.asm