]> git.sur5r.net Git - cc65/commitdiff
Fixed ld65's precalculation of memory-area sizes. 20/head
authorGreg King <gregdk@users.sf.net>
Wed, 10 Jul 2013 06:37:09 +0000 (02:37 -0400)
committerGreg King <gregdk@users.sf.net>
Wed, 10 Jul 2013 06:37:09 +0000 (02:37 -0400)
Before this fix, BSS-type and ZP-type segments never were counted.  Now, they are counted if their memory areas are filled.  (It must be done because their places in the output file are filled.)

The fix allows us to build programs for the CBM510 and CBM610 platforms.  We won't see an "Internal error" diagnostic message about a bad file-offset.

src/ld65/config.c

index 76518cafdf5957a6205f80116dfa95d2bf4d9fcb..a5d6ff39ba53ecbc6ecde46b5ed228584e529ced 100644 (file)
@@ -6,7 +6,7 @@
 /*                                                                           */
 /*                                                                           */
 /*                                                                           */
-/* (C) 1998-2012, Ullrich von Bassewitz                                      */
+/* (c) 1998-2013, Ullrich von Bassewitz                                      */
 /*                Roemerstrasse 52                                           */
 /*                D-70794 Filderstadt                                        */
 /* EMail:         uz@cc65.org                                                */
@@ -1959,8 +1959,11 @@ unsigned CfgProcess (void)
             /* Calculate the new address */
             Addr += S->Seg->Size;
 
-            /* If this segment goes out to the file, increase the file size */
-            if ((S->Flags & SF_BSS) == 0 && S->Load == M) {
+            /* If this segment will go out to the file, or its place
+             * in the file will be filled, then increase the file size.
+             */
+            if (S->Load == M &&
+                ((S->Flags & SF_BSS) == 0 || (M->Flags & MF_FILL) != 0)) {
                 M->F->Size += Addr - StartAddr;
             }