Hi,

1. How are the SFR's defined? Are you using both the "sfr" and "at" 
keyword? Are you trying to initialize them in the same line where 
they are defined?

2. Where does "-b CSEG = 0x0000" come from? SDCC no longer 
automatically uses that line. It uses "-b HOME = 0x0000" instead.

Maarten

> Moving a 8051 project for EZUSB (Cypress FX2LP CY7C68013A) from SDCC version
> 2.3.8 to 2.7.0 encounted two linker problems:
> 
> 1. wrongly counts the SFR space in the DATA memory size as a result
> displayes "Insufficient space in data memory."
> as\link\mcs51\lkmem.c line: 182
> 
> 2. the program won't run if the start address of the code segment is
> specified, the "_main" will be mapped to address 0x0000 instead of the "sdcc
> statup function"
> don't give "-b CSEG = 0x0000" for "aslink"
> 
> 
> ///////////////////////////// 1. SFR to DSEG bug //////////////////////
> 
>    Name             Start    End      Size     Max
>    ---------------- -------- -------- -------- --------
>    DATA             0x08     0xe5       222      128
>    ---------------- -------- -------- -------- --------
>    TOTAL:           0x00     0xe5       230      128
> *** ERROR: Insufficient space in data memory.   102 bytes short.
> Stack starts at: 0x6e (sp set to 0x6d).
> *** ERROR: Stack overlaps area 'DATA'
> 
> //////////////////////////////
> /////////////////////////////////////////////////////////////////////////////////
> as\link\mcs51\lkmem.c
> line:182
> 
> /////////////////////
> wrong:
> 
>         /*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;
>             }
>         }
> 
> /////////////////////
> good (copied from version 2.4.0):
> 
>         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;
>         }
> 
> //////////////////////////// 2. no CSEG for aslink
> //////////////////////////
> 
> wrong:
> Area                               Addr   Size   Decimal Bytes (Attributes)
> --------------------------------   ----   ----   ------- ----- ------------
> CSEG                               0000   1CA7 =   7335. bytes
> (REL,CON,CODE)
> 
>       Value  Global
>    --------  --------------------------------
>   0C:0000    _main
> 
> good:
> Area                               Addr   Size   Decimal Bytes (Attributes)
> --------------------------------   ----   ----   ------- ----- ------------
> CSEG                               00CC   1CA7 =   7335. bytes
> (REL,CON,CODE)
> 
>       Value  Global
>    --------  --------------------------------
>   0C:00CC    _main
> 
> 
> -- 
> Kovacs Laszlo Attila
> Digilent RO
> [EMAIL PROTECTED]
> 



-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/
_______________________________________________
Sdcc-user mailing list
Sdcc-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sdcc-user

Reply via email to