git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@3316
4a8a32a2-be11-0410-ad9d-
d568d2c75423
+2004-05-15 Jesus Calvino-Fraga <jesusc AT ece.ubc.ca>
+
+ * as/mcs51/lkmem.c: better fix for bug #954173
+
2004-05-15 Maarten Brock <sourceforge.brock AT dse.nl>
committed by Frieder Ferlemann <Frieder.Ferlemann AT web.de>
2004-05-15 Maarten Brock <sourceforge.brock AT dse.nl>
committed by Frieder Ferlemann <Frieder.Ferlemann AT web.de>
{
Ram[4].Size=xp->a_size;
}
{
Ram[4].Size=xp->a_size;
}
- else if ( EQ(xp->a_id, "DSEG") || EQ(xp->a_id, "OSEG") )
- {
- Ram[6].Size+=xp->a_size;
- if(xp->a_addr<Ram[6].Start) Ram[6].Start=xp->a_addr;
- }
- else if( EQ(xp->a_id, "CSEG") || EQ(xp->a_id, "GSINIT") ||
- EQ(xp->a_id, "GSINIT0") || EQ(xp->a_id, "GSINIT1") ||
- EQ(xp->a_id, "GSINIT2") || EQ(xp->a_id, "GSINIT3") ||
- EQ(xp->a_id, "GSINIT4") || EQ(xp->a_id, "GSINIT5") ||
- EQ(xp->a_id, "GSFINAL") || EQ(xp->a_id, "HOME") )
+ else if(xp->a_flag & A_CODE)
- Rom.Size+=xp->a_size;
- if(xp->a_addr<Rom.Start) Rom.Start=xp->a_addr;
+ if(xp->a_size>0)
+ {
+ Rom.Size+=xp->a_size;
+ if(xp->a_addr<Rom.Start) Rom.Start=xp->a_addr;
+ }
}
else if (EQ(xp->a_id, "SSEG"))
}
else if (EQ(xp->a_id, "SSEG"))
if(xp->a_addr<Stack.Start) Stack.Start=xp->a_addr;
}
if(xp->a_addr<Stack.Start) Stack.Start=xp->a_addr;
}
- else if (EQ(xp->a_id, "XSEG") || EQ(xp->a_id, "XISEG"))
+ else if(xp->a_flag & A_XDATA)
- XRam.Size+=xp->a_size;
- if(xp->a_addr<XRam.Start) XRam.Start=xp->a_addr;
+ if(xp->a_size>0)
+ {
+ XRam.Size+=xp->a_size;
+ if(xp->a_addr<XRam.Start) XRam.Start=xp->a_addr;
+ }
}
else if (EQ(xp->a_id, "ISEG"))
}
else if (EQ(xp->a_id, "ISEG"))
IRam.Size+=xp->a_size;
if(xp->a_addr<IRam.Start) IRam.Start=xp->a_addr;
}
IRam.Size+=xp->a_size;
if(xp->a_addr<IRam.Start) IRam.Start=xp->a_addr;
}
+
+ /*If is not a register bank, bit, stack, or idata, then it should be data*/
+ else if((xp->a_flag & (A_CODE|A_BIT|A_XDATA))==0)
+ {
+ if(xp->a_size)
+ {
+ Ram[6].Size+=xp->a_size;
+ if(xp->a_addr<Ram[6].Start) Ram[6].Start=xp->a_addr;
+ }
+ }
+
+ xp=xp->a_ap;
fprintf(of, format, line, line, line, line, line);
/*Report IRam totals:*/
fprintf(of, format, line, line, line, line, line);
/*Report IRam totals:*/
- sprintf(start, "0x%02lx", IRam.Start);
+ {
+ start[0]=0;/*Empty string*/
end[0]=0;/*Empty string*/
end[0]=0;/*Empty string*/
+ {
+ sprintf(start, "0x%02lx", IRam.Start);
sprintf(end, "0x%02lx", IRam.Size+IRam.Start-1);
sprintf(end, "0x%02lx", IRam.Size+IRam.Start-1);
sprintf(size, "%5lu", IRam.Size);
sprintf(max, "%5lu", IRam.Max);
fprintf(of, format, IRam.Name, start, end, size, max);
/*Report XRam totals:*/
sprintf(size, "%5lu", IRam.Size);
sprintf(max, "%5lu", IRam.Max);
fprintf(of, format, IRam.Name, start, end, size, max);
/*Report XRam totals:*/
- sprintf(start, "0x%04lx", XRam.Start);
+ {
+ start[0]=0;/*Empty string*/
end[0]=0;/*Empty string*/
end[0]=0;/*Empty string*/
+ {
+ sprintf(start, "0x%04lx", XRam.Start);
sprintf(end, "0x%04lx", XRam.Size+XRam.Start-1);
sprintf(end, "0x%04lx", XRam.Size+XRam.Start-1);
sprintf(size, "%5lu", XRam.Size);
sprintf(max, "%5lu", xram_size<0?XRam.Max:xram_size);
fprintf(of, format, XRam.Name, start, end, size, max);
/*Report Rom/Flash totals:*/
sprintf(size, "%5lu", XRam.Size);
sprintf(max, "%5lu", xram_size<0?XRam.Max:xram_size);
fprintf(of, format, XRam.Name, start, end, size, max);
/*Report Rom/Flash totals:*/
- sprintf(start, "0x%04lx", Rom.Start);
+ {
+ start[0]=0;/*Empty string*/
end[0]=0;/*Empty string*/
end[0]=0;/*Empty string*/
+ {
+ sprintf(start, "0x%04lx", Rom.Start);
sprintf(end, "0x%04lx", Rom.Size+Rom.Start-1);
sprintf(end, "0x%04lx", Rom.Size+Rom.Start-1);
sprintf(size, "%5lu", Rom.Size);
sprintf(max, "%5lu", code_size<0?Rom.Max:code_size);
fprintf(of, format, Rom.Name, start, end, size, max);
sprintf(size, "%5lu", Rom.Size);
sprintf(max, "%5lu", code_size<0?Rom.Max:code_size);
fprintf(of, format, Rom.Name, start, end, size, max);
- if( EQ(xp->a_id, "CSEG") || EQ(xp->a_id, "GSINIT") ||
- EQ(xp->a_id, "GSINIT0") || EQ(xp->a_id, "GSINIT1") ||
- EQ(xp->a_id, "GSINIT2") || EQ(xp->a_id, "GSINIT3") ||
- EQ(xp->a_id, "GSINIT4") || EQ(xp->a_id, "GSINIT5") ||
- EQ(xp->a_id, "GSFINAL") || EQ(xp->a_id, "HOME") )
+ if(xp->a_flag & A_CODE)
- Rom.Size+=xp->a_size;
- if(xp->a_addr<Rom.Start) Rom.Start=xp->a_addr;
+ if(xp->a_size)
+ {
+ Rom.Size+=xp->a_size;
+ if(xp->a_addr<Rom.Start) Rom.Start=xp->a_addr;
+ }
}
else if (EQ(xp->a_id, "SSEG"))
}
else if (EQ(xp->a_id, "SSEG"))
if(xp->a_addr<Stack.Start) Stack.Start=xp->a_addr;
}
if(xp->a_addr<Stack.Start) Stack.Start=xp->a_addr;
}
- else if (EQ(xp->a_id, "XSEG") || EQ(xp->a_id, "XISEG"))
+ else if(xp->a_flag & A_XDATA)
- XRam.Size+=xp->a_size;
- if(xp->a_addr<XRam.Start) XRam.Start=xp->a_addr;
+ if(xp->a_size)
+ {
+ XRam.Size+=xp->a_size;
+ if(xp->a_addr<XRam.Start) XRam.Start=xp->a_addr;
+ }
fprintf(of, format, line, line, line, line, line);
/*Report XRam totals:*/
fprintf(of, format, line, line, line, line, line);
/*Report XRam totals:*/
- sprintf(start, "0x%04lx", XRam.Start);
+ {
+ start[0]=0;/*Empty string*/
end[0]=0;/*Empty string*/
end[0]=0;/*Empty string*/
+ {
+ sprintf(start, "0x%04lx", XRam.Start);
sprintf(end, "0x%04lx", XRam.Size+XRam.Start-1);
sprintf(end, "0x%04lx", XRam.Size+XRam.Start-1);
sprintf(size, "%5lu", XRam.Size);
sprintf(max, "%5lu", xram_size<0?XRam.Max:xram_size);
fprintf(of, format, XRam.Name, start, end, size, max);
/*Report Rom/Flash totals:*/
sprintf(size, "%5lu", XRam.Size);
sprintf(max, "%5lu", xram_size<0?XRam.Max:xram_size);
fprintf(of, format, XRam.Name, start, end, size, max);
/*Report Rom/Flash totals:*/
- sprintf(start, "0x%04lx", Rom.Start);
+ {
+ start[0]=0;/*Empty string*/
end[0]=0;/*Empty string*/
end[0]=0;/*Empty string*/
+ {
+ sprintf(start, "0x%04lx", Rom.Start);
sprintf(end, "0x%04lx", Rom.Size+Rom.Start-1);
sprintf(end, "0x%04lx", Rom.Size+Rom.Start-1);
sprintf(size, "%5lu", Rom.Size);
sprintf(max, "%5lu", code_size<0?Rom.Max:code_size);
fprintf(of, format, Rom.Name, start, end, size, max);
sprintf(size, "%5lu", Rom.Size);
sprintf(max, "%5lu", code_size<0?Rom.Max:code_size);
fprintf(of, format, Rom.Name, start, end, size, max);