newlib/libgloss/xstormy16/crt0.s
Geoffrey Keating f6eff1c046 In newlib/:
2001-12-22  Geoffrey Keating  <geoffk@redhat.com>
	    Catherine Moore  <clm@redhat.com>
	    Richard Henderson  <rth@redhat.com>
	    Corinna Vinschen  <vinschen@redhat.com>

	* configure.host: Add support for xstormy16.
	* libc/include/machine/ieeefp.h: Add support for xstormy16.
	* libc/include/machine/setjmp.h: Add support for xstormy16.
	* libc/include/sys/config.h: Add support for xstormy16.
	* libc/machine/xstormy16/Makefile.am: New file.
	* libc/machine/xstormy16/Makefile.in: New file.
	* libc/machine/xstormy16/aclocal.m4: New file.
	* libc/machine/xstormy16/configure: New file.
	* libc/machine/xstormy16/configure.in: New file.
	* libc/machine/xstormy16/setjmp.S: New file.

In libgloss/:
2001-12-22  Geoffrey Keating  <geoffk@redhat.com>
	    Mark Salter  <msalter@redhat.com>
	    Catherine Moore  <clm@redhat.com>
	    Richard Henderson  <rth@redhat.com>

	* configure.in: Add xstormy16.
	* libnosys/configure.in: Add xstormy16.
	* configure: Regenerated.
	* libnosys/configure: Regenerated.
	* xstormy16/Makefile.in: New file.
	* xstormy16/close.c: New file.
	* xstormy16/configure: New file.
	* xstormy16/configure.in: New file.
	* xstormy16/crt0.s: New file.
	* xstormy16/crt0_stub.s: New file.
	* xstormy16/crti.s: New file.
	* xstormy16/crtn.s: New file.
	* xstormy16/eva_app.c: New file.
	* xstormy16/eva_app.ld: New file.
	* xstormy16/eva_stub.ld: New file.
	* xstormy16/fstat.c: New file.
	* xstormy16/getpid.c: New file.
	* xstormy16/kill.c: New file.
	* xstormy16/lseek.c: New file.
	* xstormy16/open.c: New file.
	* xstormy16/sbrk.c: New file.
	* xstormy16/sim_high.ld: New file.
	* xstormy16/stat.c: New file.
	* xstormy16/syscalls.S: New file.
	* xstormy16/syscalls.m4: New file.
	* xstormy16/unlink.c: New file.
	* xstormy16/xstormy16_stub.c: New file.
2001-12-22 22:47:58 +00:00

95 lines
1.7 KiB
ArmAsm

# XSTORMY16 startup code
# Interrupt vectors at 0x8000.
.section .int_vec,"ax"
.global _start
.align 1
_start:
;; Reset, watchdog timer interrupt
jmpf _int_reset
;; base timer interrupt
jmpf _int_basetimer
;; timer 0
jmpf _int_timer0
;; timer 1
jmpf _int_timer1
;; SIO0 interrupt
jmpf _int_sio0
;; SIO1 interrupt
jmpf _int_sio1
;; port0 interrupt
jmpf _int_port0
;; port1 interrupt
jmpf _int_port1
.text
# Reset code, set up memory and call main.
_int_reset:
;; Set up the stack pointer.
mov r0,#__stack
bz r0,#0,0f
mov sp,r0
0:
;; Zero the data space
mov r0,#_edata
mov r1,#_end
mov r2,#0
0: mov.w (r0++),r2
blt r0,r1,0b
;; Call hardware init routine
callf _hwinit
;; Call initialization routines
callf _init
;; Set up fini routines to be called from exit
mov r2,#@fptr(_fini)
callf atexit
;; Call main() with empty argc/argv/envp
mov r2,#0
mov r3,#0
mov r4,#0
callf main
;; Exit.
callf exit
;; Should never reach this code.
halt
1: .size _int_reset,1b-_int_reset
# Stub interrupt routines.
.globl _int_timer0
.weak _int_timer0
.globl _int_timer1
.weak _int_timer1
.globl _int_sio0
.weak _int_sio0
.globl _int_sio1
.weak _int_sio1
.globl _int_port0
.weak _int_port0
.globl _int_port1
.weak _int_port1
.globl _int_basetimer
.weak _int_basetimer
_int_timer0:
_int_timer1:
_int_sio0:
_int_sio1:
_int_port0:
_int_port1:
_int_basetimer:
iret
1: .size _int_timer0,1b-_int_timer0
# Stub hardware init
.globl _hwinit
.weak _hwinit
_hwinit:
ret
1: .size _int_hwinit,1b-_int_hwinit
# The first word in .data has address 0, so it's not a good
# idea to use it as its address conflicts with NULL.
# Place a HALT instruction there to try to catch NULL pointer
# dereferences.
.data
halt