libc/libgloss/cr16/crt1.S
Jeff Johnston 8ae0b98903 2010-12-02 Jayant Sonar jayant.sonar@kpitcummins.com
Kaushik Phatak  kaushik.phatak@kpitcummins.com

        * configure.in: Add CR16 support.
        * configure: Regenerated.
        * cr16/aclocal.m4: New.
        * cr16/close.c: New.
        * cr16/configure: New.
        * cr16/configure.in: New.
        * cr16/crt1.S: New.
        * cr16/crti.S: New.
        * cr16/crtn.S: New.
        * cr16/dvz_hndl.c: New.
        * cr16/_exit.c: New.
        * cr16/flg_hndl.c: New.
        * cr16/fstat.c: New.
        * cr16/_getenv.c: New.
        * cr16/getpid.c: New.
        * cr16/iad_hndl.c: New.
        * cr16/intable.c: New.
        * cr16/isatty.c: New.
        * cr16/kill.c: New.
        * cr16/lseek.c: New.
        * cr16/Makefile.in: New.
        * cr16/open.c: New.
        * cr16/putnum.c: New.
        * cr16/read.c: New.
        * cr16/_rename.c: New.
        * cr16/sbrk.c: New.
        * cr16/sim.ld: New.
        * cr16/stat.c: New.
        * cr16/svc_hndl.c: New.
        * cr16/time.c: New.
        * cr16/und_hndl.c: New.
        * cr16/unlink.c: New.
        * cr16/write.c: New.
2010-12-02 19:35:47 +00:00

99 lines
4 KiB
ArmAsm

##############################################################################
# crt0.s -- CR16 default start-up routine #
# #
# Copyright (c) 2004 National Semiconductor Corporation #
# #
# The authors hereby grant permission to use, copy, modify, distribute, #
# and license this software and its documentation for any purpose, provided #
# that existing copyright notices are retained in all copies and that this #
# notice is included verbatim in any distributions. No written agreement, #
# license, or royalty fee is required for any of the authorized uses. #
# Modifications to this software may be copyrighted by their authors #
# and need not follow the licensing terms described here, provided that #
# the new terms are clearly indicated on the first page of each file where #
# they apply. #
# #
# This is the start routine of your CR16 program. #
# It is linked with your application automatically. You can use #
# this routine as a template and modify it to your needs, yet this #
# file must be supplied for the compiler. #
# It is assumed that the following symbols are defined in your linker #
# script: __STACK_START, __ISTACK_START #
##############################################################################
.text
#ifdef __CR16CP__
.align 4
#else
.align 2
#endif
.global _main
.global _atexit
.global _exit
.global _start
.global __fini
.global __init
.global __STACK_START
.global __ISTACK_START
_start:
#----------------------------------------------------------------------------#
# Initialize the stack pointers. The constants __STACK_START and #
# __ISTACK_START should be defined in the linker script. #
movd $__STACK_START, (sp)
movd $__ISTACK_START, (r1,r0)
lprd (r1,r0), isp
#----------------------------------------------------------------------------#
# Initialize the default sections according to the linker script. #
# bal (ra), __init_bss_data
#----------------------------------------------------------------------#
# Set the Extended Dispatch bit in the CFG register. This is the #
# default configuration for CR16C. #
spr cfg, r0 # Set dispatch table width
orw $0x100, r0
lpr r0, cfg
#----------------------------------------------------------------------------#
#----------------------------------------------------------------------------#
# Handle global and static constructurs execution and setup #
# destructors to be called from exit. #
bal (ra),__init
movd $__fini@c, (r3,r2)
bal (ra), _atexit
#----------------------------------------------------------------------------#
# Jump to the main function in your application. #
#ifdef __INT32__
movd $0, (r3,r2) # Number of arguments
movd $0, (r5,r4) # conatins pointer to argument string.
#else
movw $0, r2 # Number of arguments
movd $0, (r4,r3) # conatins pointer to argument string.
#endif
bal (ra), _main
#----------------------------------------------------------------------------#
# Upon returning from the main function (if it isn't an infinite loop), #
# jump to the exit function. The exit function is located in the #
# library 'libc.a'. #
#ifdef __INT32__
movd (r1,r0), (r3,r2) # _main return value gets forwarded.
#else
movw r0, r2 # _main return value gets forwarded.
#endif
br _exit # returns control to the functional simulator.