]> git.sur5r.net Git - cc65/blobdiff - src/ld65/bin.c
Add segment type "overlay".
[cc65] / src / ld65 / bin.c
index c3efd9cd1654db24f51e4e46c3cdfb77aa868337..927719016a549d676b555c0d410a7f547bf5354e 100644 (file)
@@ -193,8 +193,13 @@ static void BinWriteMem (BinDesc* D, MemoryArea* M)
                     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;
             }