+ while (fixup != NULL)
+ {
+ // We do it this way because we have continues everywhere... :-P
+ FIXUP * fup = fixup;
+ fixup = fixup->next;
+
+ uint32_t w = fup->attr; // Fixup long (type + modes + flags)
+ uint32_t loc = fup->loc; // Location to fixup
+ cfileno = fup->fileno;
+ curlineno = fup->lineno;
+ DEBUG { printf("ResolveFixups: sect#=%u, l#=%u, attr=$%X, loc=$%X, expr=%p, sym=%p, org=$%X\n", sno, fup->lineno, fup->attr, fup->loc, (void *)fup->expr, (void *)fup->symbol, fup->orgaddr); }
+
+ // This is based on global vars cfileno, curfname :-P
+ // This approach is kinda meh as well. I think we can do better
+ // than this.
+ SetFilenameForErrorReporting();
+
+ // Search for chunk containing location to fix up; compute a
+ // pointer to the location (in the chunk). Often we will find the
+ // Fixup is in the "cached" chunk, so the linear-search is seldom
+ // executed.
+ if (loc < cch->chloc || loc >= (cch->chloc + cch->ch_size))