Changeset 54b617a in rtems


Ignore:
Timestamp:
Jul 22, 2008, 5:44:58 AM (11 years ago)
Author:
Till Straumann <strauman@…>
Branches:
4.10, 4.11, 4.9, master
Children:
e1095fc
Parents:
c607d50e
Message:

2008-07-21 Till Straumann <strauman@…>

  • startup/linkcmds: fixed sdata/sbss areas -- these must be contiguous for SVR4 complicant access via R13. Use kludged layout so that sbss, bss, sbss2 are all contiguous and zeroed by dlentry.S.

Provide _SDA_BASE_ and _SDA2_BASE_ for loading R13 (and
R2 if anyone wants to use EABI).

Make sure interrupt stack is never in heap area by
moving it below '_end'.

Provide symbols for start + end of interrupt stack.

Location:
c/src/lib/libbsp/powerpc/virtex
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • c/src/lib/libbsp/powerpc/virtex/ChangeLog

    rc607d50e r54b617a  
     12008-07-21      Till Straumann <strauman@slac.stanford.edu>
     2
     3        * startup/linkcmds: fixed sdata/sbss areas -- these
     4        must be contiguous for SVR4 complicant access via R13.
     5        Use kludged layout so that sbss, bss, sbss2 are all
     6        contiguous and zeroed by dlentry.S.
     7
     8        Provide _SDA_BASE_ and _SDA2_BASE_ for loading R13 (and
     9        R2 if anyone wants to use EABI).
     10
     11        Make sure interrupt stack is never in heap area by
     12        moving it below '_end'.
     13
     14        Provide symbols for start + end of interrupt stack.
     15
    1162008-07-21      Till Straumann <strauman@slac.stanford.edu>
    217
  • c/src/lib/libbsp/powerpc/virtex/startup/linkcmds

    rc607d50e r54b617a  
    180180    } >RAM
    181181
    182     PROVIDE (__SDATA2_START__ = .);
    183   .sdata2         : { *(.sdata2) *(.gnu.linkonce.s2.*)  } >RAM
    184   .sbss2          : { *(.sbss2) *(.gnu.linkonce.sb2.*)  } >RAM
    185     PROVIDE (__SBSS2_END__ = .);
    186        
    187     .sbss2        : { *(.sbss2)         } >RAM
    188     PROVIDE (__SBSS2_END__ = .);
    189        
     182
    190183    /* R/W Data */
    191184    .data ( . ) :
     
    198191      *(.data1)
    199192      *(.data.* .gnu.linkonce.d.*)
    200       PROVIDE (__SDATA_START__ = .);
    201       *(.sdata*)
    202       *(.gnu.linkonce.s.*)
    203193      data.end = .;
    204194      data.size = data.end - data.start;
    205       PROVIDE (_edata = .);
    206     } >RAM
    207 
    208     __SBSS_START__ = .;
    209     .bss :
    210     {
    211       bss.start = .;
    212       *(.bss .bss* .gnu.linkonce.b*)
    213       *(.sbss*) *(COMMON)
    214     bss.end = ALIGN(4);
    215     } >RAM
    216       bss.size = bss.end - bss.start;
    217     __SBSS_END__ = .;
    218    
    219     PROVIDE(_bss_start   = ADDR(.bss));
    220     PROVIDE(_bss_size    = SIZEOF(.bss));
    221     PROVIDE(bss.size    = SIZEOF(.bss));
    222     PROVIDE(_data_start  = ADDR(.data));
    223     PROVIDE(_data_size   = SIZEOF(.data));
    224     PROVIDE(_text_start  = ADDR(.text));
    225     PROVIDE(_text_size   = SIZEOF(.text));
    226     PROVIDE(_end = bss.end);
    227 
    228 
    229     .gzipmalloc : {
    230         . = ALIGN (16);
    231         _startmalloc = .;
    232      } >RAM
    233                
    234 
    235     /*
    236      * Interrupt stack setup
    237      */
    238     IntrStack_start = ALIGN(0x10);
    239     . += 0x4000;
    240     intrStack = .;
    241     PROVIDE(intrStackPtr = intrStack);
    242 
    243     /* Sections for compressed .text and .data         */
    244     /* after the .datarom section is an int specifying */
    245     /* the length of the following compressed image    */
    246     /* Executes once then could get overwritten        */
    247     .textrom 0x100000 :
    248     {
    249         *(.textrom)
    250         _endloader = .;
    251     } >RAM
    252 
    253     .datarom :
    254     {
    255         _dr_start = .;
    256         *(.datarom)
    257         _dr_end = .;
    258     } >RAM
    259     dr_len = _dr_end - _dr_start;
     195    } >RAM
     196
     197        /* Arrange as follows:
     198         *   sdata
     199         *   sbss
     200     *   bss
     201     *   sbss2
     202     *   sdata2
     203         * so that we have a contiguous 'bss' area
     204         * which can be zeroed in one sweep.
     205         * (sdata/sbss and sdata2/sbss2 must also be
     206         * contiguous).
     207         */
     208
     209        _SDA_BASE_ = __SDATA_START__ + 0x8000;
     210        .sdata : {
     211                *(.sdata .sdata.*)
     212                *(.gnu.linkonce.s.*)
     213        } > RAM
     214        _edata = .;
     215        .sbss : {
     216        *(.dynsbss)
     217        *(.sbss .sbss.* .gnu.linkonce.sb.*)
     218            *(.scommon)
     219        } > RAM
     220        .bss : {
     221                *(.dynbss)
     222                *(.bss .bss* .gnu.linkonce.b*)
     223                *(COMMON)
     224    } >RAM
     225        _SDA2_BASE_ = __SBSS2_START__ + 0x8000;
     226        .sbss2 : {
     227                *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*)
     228        } > RAM
     229        .sdata2 : {
     230                *(.sdata2 .sdata2.* .gnu.linkonce.s2.*)
     231        } > RAM
     232       
     233        PROVIDE(bss.start    = __SBSS_START__);
     234    PROVIDE(bss.size     = __SBSS2_END__ - __SBSS_START__);
    260235
    261236  /* align bottom of 32k init stack at a 32k boundary */
     
    268243   * Interrupt stack setup
    269244   */
    270   IntrStack_start = ALIGN(0x10);
    271   . += 0x4000;
    272   intrStack = .;
    273   PROVIDE(intrStackPtr = intrStack);
     245    IntrStack_start = ALIGN(0x10);
     246    . += 0x4000;
     247    IntrStack_end = .;
    274248 
     249    PROVIDE(_end = . );
     250
     251
     252    .gzipmalloc : {
     253        . = ALIGN (16);
     254        _startmalloc = .;
     255     } >RAM
     256               
     257
     258    /* Sections for compressed .text and .data         */
     259    /* after the .datarom section is an int specifying */
     260    /* the length of the following compressed image    */
     261    /* Executes once then could get overwritten        */
     262    .textrom 0x100000 :
     263    {
     264        *(.textrom)
     265        _endloader = .;
     266    } >RAM
     267
     268    .datarom :
     269    {
     270        _dr_start = .;
     271        *(.datarom)
     272        _dr_end = .;
     273    } >RAM
     274    dr_len = _dr_end - _dr_start;
     275
     276
    275277    .line 0 : { *(.line) }
    276278    .debug 0 : { *(.debug) }
Note: See TracChangeset for help on using the changeset viewer.