OSDN Git Service

original
[gb-231r1-is01/Gingerbread_2.3.3_r1_IS01.git] / bionic / libc / arch-sh / bionic / crtbegin_static.S
1 /*
2  * Copyright (C) 2009-2010 The Android Open Source Project
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *  * Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  *  * Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in
12  *    the documentation and/or other materials provided with the
13  *    distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
18  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
19  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
20  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
21  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
22  * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
23  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
25  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26  * SUCH DAMAGE.
27  */
28 .text
29 .align  4
30 .type   _start,#function
31 .globl  _start
32
33 # this is the small startup code that is first run when
34 # any executable that is statically-linked with Bionic
35 # runs.
36 #
37 # it's purpose is to call __libc_init with appropriate
38 # arguments, which are:
39 #
40 #    - the address of the raw data block setup by the Linux
41 #      kernel ELF loader
42 #
43 #    - address of an "onexit" function, not used on any
44 #      platform supported by Bionic
45 #
46 #    - address of the "main" function of the program. We
47 #      can't hard-code it in the adr pseudo instruction
48 #      so we use a tiny trampoline that will get relocated
49 #      by the dynamic linker before this code runs
50 #
51 #    - address of the constructor list
52 #
53 _start:
54     mov     r15, r4
55     mov     #0, r5
56     mov.l   0f, r6
57     mova    2f, r0
58     mov     r0, r7
59     mov.l   1f, r0
60     jmp     @r0
61     nop
62
63     .balign 4
64 0:  .long   main
65 1:  .long   __libc_init
66 2:  .long   __PREINIT_ARRAY__
67     .long   __INIT_ARRAY__
68     .long   __FINI_ARRAY__
69     .long   __CTOR_LIST__
70
71     .section .preinit_array, "aw"
72     .globl __PREINIT_ARRAY__
73 __PREINIT_ARRAY__:
74     .long -1
75
76     .section .init_array, "aw"
77     .globl __INIT_ARRAY__
78 __INIT_ARRAY__:
79     .long -1
80
81     .section .fini_array, "aw"
82     .globl __FINI_ARRAY__
83 __FINI_ARRAY__:
84     .long -1
85
86     .section .ctors, "aw"
87     .globl __CTOR_LIST__
88 __CTOR_LIST__:
89     .long -1
90
91 #include "__dso_handle.S"