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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [rtos/] [rtems/] [c/] [src/] [lib/] [libbsp/] [hppa1.1/] [simhppa/] [start/] [start.S] - Rev 30

Go to most recent revision | Compare with Previous | Blame | View Log

/*
 * crt0.S -- startup file for hppa on RTEMS
 *
 *  $Id: start.S,v 1.2 2001-09-27 11:59:45 chris Exp $
 */

        .COPYRIGHT "crt0.S for hppa"

        .DATA

_progname       .STRINGZ "simhppa"
_crt0_argv      .WORD    _progname, 0

/* 
 * Set up the standard spaces (sections) These definitions come
 * from /lib/pcc_prefix.s.
 */
        .TEXT
        
/*
 * stuff we need that is defined elsewhere.
 */
        .IMPORT boot_card, CODE
        .IMPORT _bss_start, DATA
        .IMPORT _bss_end, DATA
        .IMPORT environ, DATA

/*
 * start -- set things up so the application will run.
 *
 */
        .PROC
        .CALLINFO SAVE_SP, FRAME=48
        .EXPORT $START$,ENTRY
        .EXPORT start,ENTRY
$START$
start:

/*
 * Get a stack
 */
        
        ldil    L%crt_stack+48,%r30
        ldo     R%crt_stack+48(%r30),%r30

/*
 * we need to set %r27 (global data pointer) here
 */

        ldil    L%$global$,%r27
        ldo     R%$global$(%r27),%r27

/*
 * zerobss -- zero out the bss section
 * XXX We don't do this since simulator and boot rom will do this for us.
 */
#if 0
        ; load the start of bss
        ldil    L%_bss_start,%r4
        ldo     R%_bss_start(%r4),%r4

        ;  load the end of bss
        ldil    L%_bss_end,%r5
        ldo     R%_bss_end(%r5),%r5


bssloop
        addi    -1,%r5,%r5                      ; decrement _bss_end
        stb     %r0,0(0,%r5)                    ; we do this by bytes for now even
                                                ; though it is slower, it is safer
        combf,= %r4,%r5, bssloop        
        nop
#endif
    
        ldi     1,%ret0

/*
 * Call the "boot_card" routine from the application to get it going.
 * We call it as boot_card(1, argv, 0)
 */

        copy    %r0, %r24

        ldil    L%_crt0_argv,%r25
        ldo     R%_crt0_argv(%r25),%r25

        bl      boot_card,%r2
        ldo     1(%r0), %r26

        .PROCEND
/*
 * _exit -- Exit from the application. Normally we cause a user trap
 *          to return to the ROM monitor for another run, but with
 *          this monitor we can not. Still, "C" wants this symbol, it
 *          should be here. Jumping to 0xF0000004 jumps back into the
 *          firmware, while writing a 5 to 0xFFFE0030 causes a reset.
 */
_exit_fallthru
        .PROC
        .CALLINFO
        .ENTRY
        
        ;; This just causes a breakpoint exception
        break   0x0,0x0
        bv,n    (%rp)
        nop
        .EXIT
        .PROCEND

/*
 * _sr4export -- support for called functions. (mostly for GDB)
 */
        .EXPORT _sr4export, ENTRY
_sr4export:
        .PROC
        .CALLINFO
        .ENTRY

        ble     0(%sr4,%r22)
        copy    %r31,%rp
        ldw     -18(%sr0,%sp),%rp
        ldsid   (%sr0,%rp),%r1
        mtsp    %r1,%sr0
        be,n    0(%sr0,%rp)
        nop
        .EXIT
        .PROCEND


        .subspa $UNWIND_START$,QUAD=0,ALIGN=8,ACCESS=0x2c,SORT=56
        .export $UNWIND_START
$UNWIND_START
        .subspa $UNWIND$,QUAD=0,ALIGN=8,ACCESS=0x2c,SORT=64
        .subspa $UNWIND_END$,QUAD=0,ALIGN=8,ACCESS=0x2c,SORT=72
        .export $UNWIND_END
$UNWIND_END
        .subspa $RECOVER_START$,QUAD=0,ALIGN=4,ACCESS=0x2c,SORT=73
        .export $RECOVER_START
$RECOVER_START
        .subspa $RECOVER$,QUAD=0,ALIGN=4,ACCESS=0x2c,SORT=80
        .subspa $RECOVER_END$,QUAD=0,ALIGN=4,ACCESS=0x2c,SORT=88
        .export $RECOVER_END
$RECOVER_END

/*
 * Here we set up the standard date sub spaces.
 *
 * Set up some room for a stack. We just grab a chunk of memory.
 * We also setup some space for the global variable space, which
 * must be done using the reserved name "$global$" so "C" code
 * can find it. The stack grows towards the higher addresses.
 */

        .subspa $DATA$,QUAD=1,ALIGN=8,ACCESS=0x1f,SORT=16
        .subspa $SHORTDATA$,QUAD=1,ALIGN=8,ACCESS=0x1f,SORT=24
        .subspa $GLOBAL$,QUAD=1,ALIGN=8,ACCESS=0x1f,SORT=40
        .export $global$
$global$
        .subspa $SHORTBSS$,QUAD=1,ALIGN=8,ACCESS=0x1f,SORT=80,ZERO
        .subspa $BSS$,QUAD=1,ALIGN=8,ACCESS=0x1f,SORT=82,ZERO

        .subspa $STACK$,QUAD=1,ALIGN=8,ACCESS=0x1f,SORT=88,ZERO

        .export crt_stack
crt_stack
        .comm          0x1000

        .end

Go to most recent revision | 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.