OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [newlib/] [libgloss/] [sparc/] [erc32-crt0.S] - Rev 1765

Compare with Previous | Blame | View Log

/*
 * This is based on the file srt0.s provided with the binary
 * distribution of the SPARC Instruction Simulator (SIS) found
 * at ftp://ftp.estec.esa.nl/pub/ws/wsd/erc32.
 */

#include "asm.h"

        .data
        .align  8
SYM(environ):
        .long   0

        .text

        .globl SYM(start)
SYM(start):
        sethi   %hi(__stack), %g1
        or      %g1,%lo(__stack),%g1
        mov     %g1, %sp                ! set the stack pointer
        mov     %sp, %fp

        /* clear the bss */
        sethi %hi(__bss_start),%g2
        or    %g2,%lo(__bss_start),%g2  ! start of bss
        sethi %hi(_end),%g3
        or    %g3,%lo(_end),%g3         ! end of bss
        mov   %g0,%g1                   ! so std has two zeros
zerobss:
        std    %g0,[%g2]
        add    %g2,8,%g2
        cmp    %g2,%g3
        bleu,a zerobss
        nop

        /* move data segment to proper location */
 
#if 0
relocd:
        set (_endtext),%g2              ! g2 = start of data in aout file
        set (_environ),%g4              ! g4 = start of where data should go
        set (_edata),%g3                ! g3 = end of where data should go
        subcc   %g3, %g4, %g5           ! g5 = length of data

        subcc   %g4, %g2, %g0           ! need to relocate data ?
        ble     initok
        ld      [%g4], %g6
        subcc   %g6, 1, %g0
        be      initok
mvdata:
        subcc   %g5, 8, %g5
        ldd     [%g2 + %g5], %g6
        bg      mvdata
        std     %g6, [%g4 + %g5]

initok:
#endif

        call    SYM(__fix_ctors)
        nop
        call    SYM(main)
        nop

        /* call exit from the C library so atexit gets called, and the
         * C++ destructors get run. This calls our exit routine below    * when it's done.
         */
        call    SYM(exit)
        nop

        .globl  SYM(_exit)
SYM(_exit):
        set     0xdeadd00d, %o1         ! Magic number for simulator.
        ta      0                       ! Halt if _main returns ...
        nop
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.