Ticket #1168: start.S.diff

File start.S.diff, 3.3 KB (added by Ingolf Steinbach, on Dec 3, 2006 at 1:31:12 PM)

start.S.diff

  • start.S

    RCS file: /usr1/CVS/rtems/c/src/lib/libbsp/sparc/shared/start.S,v
    retrieving revision 1.2.6.1
    diff -u -r1.2.6.1 start.S
     
    217217        nop
    218218        nop
    219219
     220        /*
     221         *  Copy the initialized data to RAM
     222         *
     223         *  FROM:   _endtext
     224         *  TO:     _data_start
     225         *  LENGTH: (__bss_start - _data_start) bytes
     226         */
     227 
     228
     229        sethi %hi(_endtext),%g2
     230        or    %g2,%lo(_endtext),%g2     ! g2 = start of initialized data in ROM
     231
     232        sethi %hi(_data_start),%g3
     233        or    %g3,%lo(_data_start),%g3  ! g3 = start of initialized data in RAM
     234
     235        sethi %hi(__bss_start),%g4
     236        or    %g4,%lo(__bss_start),%g4  ! g4 = end of initialized data in RAM
     237
     238        cmp   %g2, %g3
     239        be    1f
     240        nop
     241
     242copy_data:
     243        ldd   [ %g2 ], %g6
     244        std   %g6 , [ %g3 ]             ! copy this double word
     245        add   %g3, 8, %g3               ! bump the destination pointer
     246        add   %g2, 8, %g2               ! bump the source pointer
     247        cmp   %g3, %g4                  ! Is the pointer past the end of dest?
     248        bl    copy_data
     249        nop
     250
     251        /* clear the bss */
     2521:
     253
     254        sethi %hi(_edata),%g2
     255        or    %g2,%lo(_edata),%g2       ! g2 = start of bss
     256        sethi %hi(_end),%g3
     257        or    %g3,%lo(_end),%g3         ! g3 = end of bss
     258        mov   %g0,%g1                   ! so std has two zeros
     259zerobss:
     260        std    %g0,[%g2]
     261        add    %g2,8,%g2
     262        cmp    %g2,%g3
     263        bleu,a zerobss
     264        nop
     265
    220266        set     (SYM(rdb_start)), %g6   ! End of work-space area
    221267        st      %sp, [%g6]
    222268        set     (SYM(Configuration)), %l1
     
    2833292:     
    284330#endif 
    285331
    286         /*
    287          *  Copy the initialized data to RAM
    288          *
    289          *  FROM:   _endtext
    290          *  TO:     _data_start
    291          *  LENGTH: (__bss_start - _data_start) bytes
    292          */
    293  
    294 
    295         sethi %hi(_endtext),%g2
    296         or    %g2,%lo(_endtext),%g2     ! g2 = start of initialized data in ROM
    297 
    298         sethi %hi(_data_start),%g3
    299         or    %g3,%lo(_data_start),%g3  ! g3 = start of initialized data in RAM
    300 
    301         sethi %hi(__bss_start),%g4
    302         or    %g4,%lo(__bss_start),%g4  ! g4 = end of initialized data in RAM
    303 
    304         cmp   %g2, %g3
    305         be    1f
    306         nop
    307 
    308 copy_data:
    309         ldd   [ %g2 ], %g6
    310         std   %g6 , [ %g3 ]             ! copy this double word
    311         add   %g3, 8, %g3               ! bump the destination pointer
    312         add   %g2, 8, %g2               ! bump the source pointer
    313         cmp   %g3, %g4                  ! Is the pointer past the end of dest?
    314         bl    copy_data
    315         nop
    316 
    317         /* clear the bss */
    318 1:
    319 
    320         sethi %hi(_edata),%g2
    321         or    %g2,%lo(_edata),%g2       ! g2 = start of bss
    322         sethi %hi(_end),%g3
    323         or    %g3,%lo(_end),%g3         ! g3 = end of bss
    324         mov   %g0,%g1                   ! so std has two zeros
    325 zerobss:
    326         std    %g0,[%g2]
    327         add    %g2,8,%g2
    328         cmp    %g2,%g3
    329         bleu,a zerobss
    330         nop
    331 
    332332        mov     %0, %o2                 ! environ
    333333        mov     %0, %o1                 ! argv
    334334        mov     %0, %o0                 ! argc