better fix for bug #954173
[fw/sdcc] / as / mcs51 / lkrloc.c
index 7a9dbcfb9dc05c6c2f3a4edaa8e150aa2377f6fa..baa056496fe455baa649ef505d3340fa5d790c1e 100644 (file)
@@ -16,9 +16,6 @@
 
 #include <stdio.h>
 #include <string.h>
-//#if !defined(_MSC_VER)
-//#include <alloc.h>
-//#endif
 #include "aslink.h"
 
 /*)Module      lkrloc.c
  */
 int    lastExtendedAddress=-1;
 
+/* Static variable which holds the index of last processed area.
+ * Useful only for iHex mode.
+ */
+static int lastAreaIndex = -1;
+
 /*)Function    VOID    reloc(c)
  *
  *                     char c          process code
@@ -531,17 +533,21 @@ relr()
                 * This is another reason why we can't have areas greater
                 * than 64K yet, even in flat24 mode.
                 */
-               extendedAddress += ((a[aindex]->a_size) >> 16 & 0xffff);
+       //      extendedAddress += ((a[aindex]->a_size) >> 16 & 0xffff);
+       //      commented out by jr 
+               
+               if (lastAreaIndex != aindex) {
+                       lastAreaIndex = aindex;
+                       newArea();
+               }
                
                if (extendedAddress != lastExtendedAddress)
                {
                
-#if 1 // jwk
-                 if (lastExtendedAddress!=-1) {
-                   printf("output extended linear address record 0x%x 0x%x\n",
-                          extendedAddress, lastExtendedAddress);
-                 }
-#endif
+                   if (lastExtendedAddress!=-1) {
+                     printf("output extended linear address record 0x%x 0x%x\n",
+                            extendedAddress, lastExtendedAddress);
+                   }
                    
                    if (rflag)
                    {