NewAddr += M->Start;
}
if (DoWrite || (M->Flags & MF_FILL) != 0) {
- WriteMult (D->F, M->FillVal, NewAddr-Addr);
- PrintNumVal ("SF_OFFSET", NewAddr - Addr);
+ /* Seek back for "overlay" segments */
+ if (NewAddr < Addr) {
+ fseek(D->F, NewAddr - M->Start, SEEK_SET);
+ } else {
+ WriteMult (D->F, M->FillVal, NewAddr-Addr);
+ PrintNumVal ("SF_OFFSET", NewAddr - Addr);
+ }
}
Addr = NewAddr;
}