Fail-safe treat 16-bit alignment as a fixed address even in RGBLINK

RGBASM does this itself, so should not output sections with 16-bit
alignment, but an invalid object file could otherwise cause
`getPlacement` to infinitely loop.
This commit is contained in:
Rangi
2026-07-15 22:46:57 -04:00
parent 5aa7067876
commit b0948566bb
2 changed files with 13 additions and 0 deletions
+11
View File
@@ -321,6 +321,17 @@ static void doSanityChecks(Section &section) {
);
}
}
// An alignment of 16 is impossible to output from RGBASM, since it's treated as
// fixing the address, but is still satisfiable. A fixed address different from the
// alignment offset would not be, but we checked for that already above.
if (section.isAlignFixed && section.alignMask == (1 << 16) - 1) {
assume(!section.isAddressFixed || section.org == section.alignOfs);
section.isAddressFixed = true;
section.org = section.alignOfs;
section.isAlignFixed = false;
section.alignMask = section.alignOfs = 0;
}
}
void sect_DoSanityChecks() {