glibc/sysdeps/standalone/i960/start.S

153 lines
4.4 KiB
ArmAsm
Raw Normal View History

/* Copyright (C) 1994, 1997 Free Software Foundation, Inc.
1994-08-25 16:44:14 +02:00
Contributed by Joel Sherrill (jsherril@redstone-emh2.army.mil),
On-Line Applications Research Corporation.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
2001-07-06 06:56:23 +02:00
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
2004-08-15 Roland McGrath <roland@frob.com> * csu/elf-init.c: Update copyright terms including special exception for these trivial files, which are statically linked into executables that use dynamic linking for the significant library code. * io/fstat.c: Likewise. * io/fstat64.c: Likewise. * io/lstat.c: Likewise. * io/lstat64.c: Likewise. * io/stat.c: Likewise. * io/stat64.c: Likewise. * stdlib/atexit.c: Likewise. * sysdeps/alpha/elf/initfini.c: Likewise. * sysdeps/alpha/elf/start.S: Likewise. * sysdeps/arm/elf/start.S: Likewise. * sysdeps/cris/elf/start.S: Likewise. * sysdeps/generic/initfini.c: Likewise. * sysdeps/generic/mknod.c: Likewise. * sysdeps/hppa/elf/initfini.c: Likewise. * sysdeps/hppa/elf/start.S: Likewise. * sysdeps/i386/elf/start.S: Likewise. * sysdeps/i386/i686/hp-timing.c: Likewise. * sysdeps/ia64/elf/initfini.c: Likewise. * sysdeps/ia64/elf/start.S: Likewise. * sysdeps/ia64/hp-timing.c: Likewise. * sysdeps/m68k/elf/start.S: Likewise. * sysdeps/mach/start.c: Likewise. * sysdeps/mips/elf/start.S: Likewise. * sysdeps/powerpc/powerpc32/elf/start.S: Likewise. * sysdeps/powerpc/powerpc64/elf/start.S: Likewise. * sysdeps/s390/s390-32/elf/start.S: Likewise. * sysdeps/s390/s390-32/initfini.c: Likewise. * sysdeps/s390/s390-64/elf/start.S: Likewise. * sysdeps/s390/s390-64/initfini.c: Likewise. * sysdeps/sh/elf/initfini.c: Likewise. * sysdeps/sh/elf/start.S: Likewise. * sysdeps/sparc/sparc32/elf/start.S: Likewise. * sysdeps/sparc/sparc32/sparcv9/hp-timing.c: Likewise. * sysdeps/sparc/sparc64/elf/start.S: Likewise. * sysdeps/sparc/sparc64/hp-timing.c: Likewise. * sysdeps/standalone/i386/start.S: Likewise. * sysdeps/standalone/i960/start.S: Likewise. * sysdeps/standalone/m68k/m68020/start.S: Likewise. * sysdeps/unix/arm/start.c: Likewise. * sysdeps/unix/bsd/osf/alpha/start.S: Likewise. * sysdeps/unix/bsd/ultrix4/mips/start.S: Likewise. * sysdeps/unix/sparc/start.c: Likewise. * sysdeps/unix/start.c: Likewise. * sysdeps/unix/sysv/aix/start.s: Likewise. * sysdeps/unix/sysv/irix4/start.c: Likewise. * sysdeps/x86_64/elf/initfini.c: Likewise. * sysdeps/x86_64/elf/start.S: Likewise.
2004-08-16 06:51:04 +02:00
In addition to the permissions in the GNU Lesser General Public
License, the Free Software Foundation gives you unlimited
permission to link the compiled version of this file with other
programs, and to distribute those programs without any restriction
coming from the use of this file. (The GNU Lesser General Public
License restrictions do apply in other respects; for example, they
cover modification of the file, and distribution when not linked
into another program.)
Note that people who make modified versions of this file are not
obligated to grant this special exception for their modified
versions; it is their choice whether to do so. The GNU Lesser
General Public License gives permission to release a modified
version without this exception; this exception also makes it
possible to release a modified version which carries forward this
exception.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
2001-07-06 06:56:23 +02:00
Lesser General Public License for more details.
2001-07-06 06:56:23 +02:00
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
1994-08-25 16:44:14 +02:00
/* entry.s
*
* This file contains the entry point for the application.
* The name of this entry point is compiler dependent.
* It jumps to the BSP which is responsible for performing
* all initialization.
*
*/
.text
.globl start # GNU960 default entry point
1994-08-25 16:44:14 +02:00
start:
mov 3, r12
modpc r12, r12, r12 # enable tracing/trace faults
mov g5, g5 # NOP
mov 0, g14 # initialize constant for C
/*
* zero out uninitialized data area
*/
1994-08-25 16:44:14 +02:00
zerobss:
lda _end, r4 /* find end of .bss */
lda _bss_start, r5 /* find beginning of .bss */
ldconst 0, r6
1994-08-25 16:44:14 +02:00
loop: st r6, (r5) /* to zero out uninitialized */
addo 4, r5, r5 /* data area */
cmpobl r5, r4, loop /* loop until _end reached */
1994-08-25 16:44:14 +02:00
lda heap_memory, r12 /* tell C lib where heap is */
st r12,___C_heap_start
lda heap_size, r12 /* tell C lib how big heap is */
st r12,___C_heap_size
lda stack_memory,r12 /* set up stack pointer: */
mov r12, sp
mov 0, g14 /* initialize constant for C */
1994-08-25 16:44:14 +02:00
call init_frames
ret /* return to monitor */
1994-08-25 16:44:14 +02:00
init_frames:
ldconst 0x3b001000, g0
ldconst 0x00009107, g1
modac g1, g0, g0 /* set AC controls */
/*
* Call application mainline.
* Someday, real values of argc and argv will be set up.
* For now, they are set to 0.
*/
callx __Board_Initialize /* Initialize the board */
ldconst 0,g0
ldconst 0,g1
ldconst 0,g2
callx ___libc_init /* initialize the library and */
/* call main */
/*
* if we return from main, we have "fallen" off the end
* of the program, therefore status is 0
* so move 0 to g0 (exit parameter)
*/
mov 0, g0
callx __exit
ret
1994-08-25 16:44:14 +02:00
/*
* Data Declarations. Start with a macro which helps declare space.
*/
#define DECLARE_SPACE(_name,_space,_align) \
.globl _name ; \
.align _align ; \
1994-08-25 16:44:14 +02:00
.comm _name##,_space
#define DECLARE_LABEL(_name) \
.globl _name ; \
_name##:
1994-08-25 16:44:14 +02:00
#define DECLARE_PTR(_name) DECLARE_SPACE(_name,4,2)
#define DECLARE_U32(_name) DECLARE_SPACE(_name,4,2)
#define DECLARE_U16(_name) DECLARE_SPACE(_name,2,1)
/*
* Require environment stuff
*/
DECLARE_LABEL(_environ)
DECLARE_PTR(environ)
DECLARE_LABEL(_errno)
DECLARE_U32(errno)
/*
* Stack Size and Space
*/
.set stack_size, 0x20000
1994-08-25 16:44:14 +02:00
DECLARE_SPACE(stack_memory,stack_size,4)
DECLARE_LABEL(stack_end)
/*
* Heap Size and Space
*/
.set heap_size, 0x20000
1994-08-25 16:44:14 +02:00
DECLARE_SPACE(heap_memory,heap_size,4)
DECLARE_LABEL(heap_end)