* as/link/z80/lkarea.c: essentially reverted lnksect() to #4380 which
authorMaartenBrock <MaartenBrock@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Mon, 2 Oct 2006 20:53:29 +0000 (20:53 +0000)
committerMaartenBrock <MaartenBrock@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Mon, 2 Oct 2006 20:53:29 +0000 (20:53 +0000)
  fixes bug 1566015

git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@4399 4a8a32a2-be11-0410-ad9d-d568d2c75423

ChangeLog
as/link/z80/lkarea.c

index 6fde20b6d426be7c279075b1562e4f11de2899b9..e5b4a62ba03e3f9972dc454b6bc325bf83e92ac6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2006-10-02 Maarten Brock <sourceforge.brock AT dse.nl>
+
+       * as/link/z80/lkarea.c: essentially reverted lnksect() to #4380 which
+         fixes bug 1566015
+
 2006-10-01 Maarten Brock <sourceforge.brock AT dse.nl>
 
        * src/pic16/glue.c (pic16emitMaps),
index 75de7c65864a2c0832e951330224d4ea5af86acc..95e5a8aca30342737811bd3a0a0e60a261837160 100644 (file)
@@ -305,8 +305,9 @@ lkparea(char *id)
  *             structures.
  */
 
-unsigned long codemap[2048];
-Addr_T lnksect(register struct area *tap);
+//unsigned long codemap[2048];
+//Addr_T lnksect(register struct area *tap);
+VOID lnksect(register struct area *tap);
 /*
  * Resolve all area addresses.
  */
@@ -314,9 +315,10 @@ VOID
 lnkarea()
 {
         register Addr_T rloc = 0;
-        Addr_T gs_size = 0;
+//        Addr_T gs_size = 0;
        char temp[NCPS];
        struct sym *sp;
+#if 0
         struct area *abs_ap = NULL;
         struct area *gs0_ap = NULL;
 
@@ -367,7 +369,7 @@ lnkarea()
         }
         if (gs0_ap)
                 gs0_ap->a_size = gs_size;
-
+#endif
        ap = areap;
         while (ap)
         {
@@ -382,7 +384,9 @@ lnkarea()
                         */
                        if (ap->a_addr == 0)
                                ap->a_addr = rloc;
-                        rloc = lnksect(ap);
+//                        rloc = lnksect(ap);
+                       lnksect(ap);
+                       rloc = ap->a_addr + ap->a_size;
                }
 
                /*
@@ -411,7 +415,7 @@ lnkarea()
                ap = ap->a_ap;
        }
 }
-
+#if 0
 static
 Addr_T find_empty_space(Addr_T start, Addr_T size, unsigned long *map)
 {
@@ -490,7 +494,7 @@ Addr_T allocate_space(Addr_T start, Addr_T size, char* id, unsigned long *map)
     map[i] |= mask;
     return start;
 }
-
+#endif
 /*)Function    VOID    lnksect()
  *
  *             area *  tap             pointer to an area structure
@@ -517,7 +521,8 @@ Addr_T allocate_space(Addr_T start, Addr_T size, char* id, unsigned long *map)
  *             and linked into the structures.
  */
 
-Addr_T lnksect(register struct area *tap)
+VOID lnksect(register struct area *tap)
+//Addr_T lnksect(register struct area *tap)
 {
        register Addr_T size, addr;
        register struct areax *taxp;
@@ -542,6 +547,7 @@ Addr_T lnksect(register struct area *tap)
                        taxp = taxp->a_axp;
                }
         }
+#if 0
         else if (tap->a_flag & A_ABS)
         {
                 /*
@@ -555,21 +561,26 @@ Addr_T lnksect(register struct area *tap)
                         taxp = taxp->a_axp;
                 }
         }
+#endif
         else
         {
                /*
                 * Concatenated sections
                 */
+/*
                 if (tap->a_size) {
                         addr = find_empty_space(addr, tap->a_size, codemap);
                 }
+*/
                while (taxp) {
+/*
                         //find next unused address now
                         if (taxp->a_size)
                         {
                                 addr = find_empty_space(addr, taxp->a_size, codemap);
                                 allocate_space(addr, taxp->a_size, tap->a_id, codemap);
                         }
+*/
                        taxp->a_addr = addr;
                        addr += taxp->a_size;
                        size += taxp->a_size;
@@ -584,5 +595,5 @@ Addr_T lnksect(register struct area *tap)
            "\n?ASlink-Warning-Paged Area %.8s Length Error\n", tap->a_id);
            lkerr++;
        }
-        return addr;
+//        return addr;
 }