diff options
author | Jeff Johnston <jjohnstn@redhat.com> | 2010-12-02 19:35:47 +0000 |
---|---|---|
committer | Jeff Johnston <jjohnstn@redhat.com> | 2010-12-02 19:35:47 +0000 |
commit | 8ae0b98903893e68a52baa9a2e3df574f0d7a39e (patch) | |
tree | e6810305a55e34b3b0598e4d04e236ace3b606c6 /libgloss/cr16/crt1.S | |
parent | 874a87f8cd93365c3bea0e6e5d14c265e9bb01f6 (diff) | |
download | cygnal-8ae0b98903893e68a52baa9a2e3df574f0d7a39e.tar.gz cygnal-8ae0b98903893e68a52baa9a2e3df574f0d7a39e.tar.bz2 cygnal-8ae0b98903893e68a52baa9a2e3df574f0d7a39e.zip |
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.
Diffstat (limited to 'libgloss/cr16/crt1.S')
-rw-r--r-- | libgloss/cr16/crt1.S | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/libgloss/cr16/crt1.S b/libgloss/cr16/crt1.S new file mode 100644 index 000000000..eee6fc10b --- /dev/null +++ b/libgloss/cr16/crt1.S @@ -0,0 +1,98 @@ + ############################################################################## + # 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. + + |