Emit auxiliary files even if asserts fail (#2104)

Closes #2100
This commit is contained in:
Eldred Habert
2026-09-17 17:47:53 +02:00
committed by GitHub
parent b4988afc8a
commit 3b250d5386
3 changed files with 20 additions and 16 deletions
+3 -2
View File
@@ -11,7 +11,8 @@ void out_AddSection(Section const &section);
// Finds an assigned section overlapping another one. // Finds an assigned section overlapping another one.
Section const *out_OverlappingSection(Section const &section); Section const *out_OverlappingSection(Section const &section);
// Writes all output (bin, sym, map) files. void out_WriteROMIfAny();
void out_WriteFiles(); void out_WriteSymIfAny();
void out_WriteMapIfAny();
#endif // RGBDS_LINK_OUTPUT_HPP #endif // RGBDS_LINK_OUTPUT_HPP
+14 -5
View File
@@ -433,14 +433,14 @@ int main(int argc, char *argv[]) {
sectionTypeInfo[SECTTYPE_VRAM].lastBank = 0; sectionTypeInfo[SECTTYPE_VRAM].lastBank = 0;
} }
// Read all object files first, // Read all object files...
size_t nbFiles = localOptions.inputFileNames.size(); size_t nbFiles = localOptions.inputFileNames.size();
obj_Setup(nbFiles); obj_Setup(nbFiles);
for (size_t i = 0; i < nbFiles; ++i) { for (size_t i = 0; i < nbFiles; ++i) {
obj_ReadFile(localOptions.inputFileNames[i], nbFiles - i - 1); obj_ReadFile(localOptions.inputFileNames[i], nbFiles - i - 1);
} }
// apply the linker script's modifications, // Apply the linker script's modifications...
if (localOptions.linkerScriptName) { if (localOptions.linkerScriptName) {
verbosePrint(VERB_NOTICE, "Reading linker script...\n"); verbosePrint(VERB_NOTICE, "Reading linker script...\n");
@@ -453,16 +453,25 @@ int main(int argc, char *argv[]) {
requireZeroErrors(); requireZeroErrors();
} }
// then process them, // Attempt to generate a layout...
sect_DoSanityChecks(); sect_DoSanityChecks();
requireZeroErrors(); requireZeroErrors();
assign_AssignSections(); assign_AssignSections();
// Emit the symbol and/or map files now (if requested on the CLI),
// so that more link-time info is available to debug any failing assertions.
// This is safe to do, since we have a valid layout at this point;
// assertions only check user-level assumptions made about it.
out_WriteSymIfAny();
out_WriteMapIfAny();
// Make any last-minute verifications...
patch_CheckAssertions(); patch_CheckAssertions();
// and finally output the result. // And, finally, make the ROM and emit it!
patch_ApplyPatches(); patch_ApplyPatches();
requireZeroErrors(); requireZeroErrors();
out_WriteFiles(); out_WriteROMIfAny();
return 0; return 0;
} }
+3 -9
View File
@@ -204,7 +204,7 @@ static void
} }
} }
static void writeROM() { void out_WriteROMIfAny() {
if (options.outputFileName) { if (options.outputFileName) {
char const *outputFileName = options.outputFileName->c_str(); char const *outputFileName = options.outputFileName->c_str();
if (*options.outputFileName != "-") { if (*options.outputFileName != "-") {
@@ -536,7 +536,7 @@ static void writeMapSummary() {
} }
} }
static void writeSym() { void out_WriteSymIfAny() {
if (!options.symFileName) { if (!options.symFileName) {
return; return;
} }
@@ -587,7 +587,7 @@ static void writeSym() {
} }
} }
static void writeMap() { void out_WriteMapIfAny() {
if (!options.mapFileName) { if (!options.mapFileName) {
return; return;
} }
@@ -615,9 +615,3 @@ static void writeMap() {
} }
} }
} }
void out_WriteFiles() {
writeROM();
writeSym();
writeMap();
}