+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"
iramsav();
return(0);
+ case 'v':
+ case 'V':
+ xramsav();
+ return(0);
+
+ case 'w':
+ case 'W':
+ codesav();
+ return(0);
+
case 'z':
case 'Z':
dflag = 1;
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
" -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
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:*/
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:*/
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);