blob: ec6d482d8c602f82157eabcade50afd483dc758e [file] [log] [blame]
The Android Open Source Project1dc9e472009-03-03 19:28:35 -08001/*
2 * Copyright (C) 2008 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
David 'Digit' Turner3a654b12009-06-03 19:32:37 +020033# this is the small startup code that is first run when
David 'Digit' Turner6a9b8882010-06-18 14:47:22 -070034# any executable that is dynamically-linked with Bionic
David 'Digit' Turner3a654b12009-06-03 19:32:37 +020035# runs.
The Android Open Source Project1dc9e472009-03-03 19:28:35 -080036#
David 'Digit' Turner3a654b12009-06-03 19:32:37 +020037# it's purpose is to call __libc_init with appropriate
The Android Open Source Project1dc9e472009-03-03 19:28:35 -080038# arguments, which are:
39#
40# - the address of the raw data block setup by the Linux
41# kernel ELF loader
42#
David 'Digit' Turner3a654b12009-06-03 19:32:37 +020043# - address of an "onexit" function, not used on any
44# platform supported by Bionic
The Android Open Source Project1dc9e472009-03-03 19:28:35 -080045#
Nick Kralevichd9ad6232011-10-20 14:57:56 -070046# - address of the "main" function of the program.
The Android Open Source Project1dc9e472009-03-03 19:28:35 -080047#
David 'Digit' Turner3a654b12009-06-03 19:32:37 +020048# - address of the constructor list
The Android Open Source Project1dc9e472009-03-03 19:28:35 -080049#
50_start:
51 mov r0, sp
52 mov r1, #0
Nick Kralevichd9ad6232011-10-20 14:57:56 -070053 ldr r2, =main
54 adr r3, 1f
55 ldr r4, =__libc_init
Evgeniy Stepanovcd15bac2012-04-10 14:10:11 +040056 blx r4
57 mov r0, #0
58 bx r0
The Android Open Source Project1dc9e472009-03-03 19:28:35 -080059
601: .long __PREINIT_ARRAY__
61 .long __INIT_ARRAY__
62 .long __FINI_ARRAY__
63 .long __CTOR_LIST__
David 'Digit' Turner6a9b8882010-06-18 14:47:22 -070064
The Android Open Source Project1dc9e472009-03-03 19:28:35 -080065 .section .preinit_array, "aw"
66 .globl __PREINIT_ARRAY__
67__PREINIT_ARRAY__:
68 .long -1
69
70 .section .init_array, "aw"
71 .globl __INIT_ARRAY__
72__INIT_ARRAY__:
73 .long -1
74
75 .section .fini_array, "aw"
76 .globl __FINI_ARRAY__
77__FINI_ARRAY__:
78 .long -1
79
80 .section .ctors, "aw"
81 .globl __CTOR_LIST__
82__CTOR_LIST__:
83 .long -1
84
David 'Digit' Turner6a9b8882010-06-18 14:47:22 -070085#include "__dso_handle.S"
Bruce Beare39640842011-06-20 10:29:50 -070086#include "atexit.S"