Added option --code-size and --xram-size
authorjesusc <jesusc@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Wed, 29 Jan 2003 08:59:29 +0000 (08:59 +0000)
committerjesusc <jesusc@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Wed, 29 Jan 2003 08:59:29 +0000 (08:59 +0000)
git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@2187 4a8a32a2-be11-0410-ad9d-d568d2c75423

ChangeLog
as/mcs51/aslink.h
as/mcs51/lkdata.c
as/mcs51/lkmain.c
as/mcs51/lkmem.c

index ba913355a281154b27312e82251767f41b61ad42..3e97581d1ce94f6dde84ca51da053053b9ca98cd 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2003-01-29  Jesus Calvino-Fraga <jesusc@ece.ubc.ca>
+
+       * as/mcs51/aslink.h: Added options --xram-size and --code-size 
+       * as/mcs51/lkdata.c: Added options --xram-size and --code-size 
+       * as/mcs51/lkmain.c: Added options --xram-size and --code-size 
+       * as/mcs51/lkmem.c:  Added options --xram-size and --code-size 
+       * src/SDCCglobl.h:   Added options --xram-size and --code-size 
+       * src/SDCCmain.c:    Added options --xram-size and --code-size 
+
 2003-01-28  Bernhard Held <bernhard@bernhardheld.de>
 
        * src/ds390/gen.c: fix deps by replacing <common.h> with "common.h"
index 6928054f2e9d00116254e630bc5c0f4bc5b1e66b..403fd89c5620614d8cb496dbca9c26b8b1f4b79e 100644 (file)
@@ -622,6 +622,10 @@ extern     struct lbfile *lbfhead; /*      pointer to the first
                                 */
 extern Addr_T iram_size;       /*      internal ram size
                                 */
+extern long xram_size; /*      external ram size
+                                */
+extern long code_size; /*      code size
+                                */
 
 
 /* C Library function definitions */
@@ -646,6 +650,8 @@ extern      FILE *          afile();
 extern VOID            bassav();
 extern VOID            gblsav();
 extern VOID            iramsav();
+extern VOID            xramsav();
+extern VOID            codesav();
 extern VOID            iramcheck();
 extern VOID            link_main();
 extern VOID            lkexit();
index 19a8437717e2b2375c4dca603a1894c7dc0dbf6a..1d100f8a329b1b306774f274b3fdcf6c56a21f1b 100644 (file)
@@ -93,6 +93,10 @@ int  gcntr;          /*      LST file relocation active
                         */
 Addr_T iram_size;      /*      internal ram size
                         */
+long   xram_size=-1;   /*      external ram size
+                        */
+long   code_size=-1;   /*      code size
+                        */
 
 /*
  *     The structure lfile contains a pointer to a
index e0f6a924b766339c787000e6257383752272767d..4b96033c388503ff90f087a215e10637b1807f03 100644 (file)
@@ -791,6 +791,16 @@ parse()
                                        iramsav();
                                        return(0);
 
+                               case 'v':
+                               case 'V':
+                                       xramsav();
+                                       return(0);
+
+                               case 'w':
+                               case 'W':
+                                       codesav();
+                                       return(0);
+
                                case 'z':
                                 case 'Z':
                                        dflag = 1;                                      
@@ -1161,6 +1171,29 @@ iramsav()
     iram_size = 128;           /* Default is 128 (0x80) bytes */
 }
 
+/*Similar to iramsav but for xram memory*/
+VOID
+xramsav()
+{
+  unget(getnb());
+  if (ip && *ip)
+    xram_size = expr(0);       /* evaluate size expression */
+  else
+       xram_size = rflag?0x1000000:0x10000;
+}
+
+/*Similar to iramsav but for code memory*/
+VOID
+codesav()
+{
+  unget(getnb());
+  if (ip && *ip)
+    code_size = expr(0);       /* evaluate size expression */
+  else
+       code_size = rflag?0x1000000:0x10000;
+}
+
+
 /*)Function    VOID    iramcheck()
  *
  *     The function iramcheck() is used at the end of linking to check that
@@ -1231,6 +1264,8 @@ char *usetxt[] = {
        "  -u   Update listing file(s) with link data as file(s)[.RST]",
        "Miscellaneous:\n"
        "  -a   [iram-size] Check for internal RAM overflow",
+       "  -v   [xram-size] Check for external RAM overflow",
+       "  -w   [code-size] Check for code overflow",
        "End:",
        "  -e   or null line terminates input",
        0
index ba31c4d567d9c420625c9c1952ea295508f376f7..6a2d8770c5563cea8cd604be87a9583eb3329ed4 100644 (file)
@@ -314,7 +314,7 @@ int summary(struct area * areap)
        else
                sprintf(end,  "0x%04lx", XRam.Size+XRam.Start-1);
        sprintf(size, "%5lu", XRam.Size);
-       sprintf(max, "%5lu", XRam.Max);
+       sprintf(max, "%5lu", xram_size<0?XRam.Max:xram_size);
        fprintf(of, format, XRam.Name, start, end, size, max);
 
        /*Report Rom/Flash totals:*/
@@ -324,7 +324,7 @@ int summary(struct area * areap)
        else
                sprintf(end,  "0x%04lx", Rom.Size+Rom.Start-1);
        sprintf(size, "%5lu", Rom.Size);
-       sprintf(max, "%5lu", Rom.Max);
+       sprintf(max, "%5lu", code_size<0?Rom.Max:code_size);
        fprintf(of, format, Rom.Name, start, end, size, max);
 
        /*Report any excess:*/
@@ -333,12 +333,14 @@ int summary(struct area * areap)
                sprintf(buff, "Insufficient INDIRECT RAM memory.\n");
                REPORT_ERROR(buff, 1);
        }
-       if((XRam.Start+XRam.Size)>XRam.Max)
+       if( ((XRam.Start+XRam.Size)>XRam.Max) ||
+               (((int)XRam.Size>xram_size)&&(xram_size>=0)) )
        {
                sprintf(buff, "Insufficient EXTERNAL RAM memory.\n");
                REPORT_ERROR(buff, 1);
        }
-       if((Rom.Start+Rom.Size)>Rom.Max)
+       if( ((Rom.Start+Rom.Size)>Rom.Max) ||
+               (((int)Rom.Size>code_size)&&(code_size>=0)) )
        {
                sprintf(buff, "Insufficient ROM/EPROM/FLASH memory.\n");
                REPORT_ERROR(buff, 1);