1# bionic/arch-x86/bionic/crtbegin_static.S 2# 3# Copyright 2006, The Android Open Source Project 4# 5# Redistribution and use in source and binary forms, with or without 6# modification, are permitted provided that the following conditions are met: 7# * Redistributions of source code must retain the above copyright 8# notice, this list of conditions and the following disclaimer. 9# * Redistributions in binary form must reproduce the above copyright 10# notice, this list of conditions and the following disclaimer in the 11# documentation and/or other materials provided with the distribution. 12# * Neither the name of Google Inc. nor the names of its contributors may 13# be used to endorse or promote products derived from this software 14# without specific prior written permission. 15# 16# THIS SOFTWARE IS PROVIDED BY Google Inc. ``AS IS'' AND ANY EXPRESS OR 17# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 19# EVENT SHALL Google Inc. BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 20# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 21# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 22# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 23# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 24# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 25# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 27 .text 28 .align 4 29 .type _start, @function 30 .globl _start 31 32# this is the small startup code that is first run when 33# any executable that is statically-linked with Bionic 34# runs. 35# 36# it's purpose is to call __libc_init with appropriate 37# arguments, which are: 38# 39# - the address of the raw data block setup by the Linux 40# kernel ELF loader 41# 42# - address of an "onexit" function, not used on any 43# platform supported by Bionic 44# 45# - address of the "main" function of the program. We 46# can't hard-code it in the adr pseudo instruction 47# so we use a tiny trampoline that will get relocated 48# by the dynamic linker before this code runs 49# 50# - address of the constructor list 51# 52_start: 53 mov %esp, %eax 54 # before push arguments, align the stack to a 16 byte boundary 55 andl $~15, %esp 56 mov $1f, %edx 57 pushl %edx 58 mov $0f, %edx 59 pushl %edx 60 mov $0, %edx 61 pushl %edx 62 pushl %eax 63 call __libc_init 64 650: jmp main 66 671: .long __PREINIT_ARRAY__ 68 .long __INIT_ARRAY__ 69 .long __FINI_ARRAY__ 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 .long frame_dummy 81 82 .section .fini_array, "aw" 83 .globl __FINI_ARRAY__ 84__FINI_ARRAY__: 85 .long -1 86 .long __do_global_dtors_aux 87 88 .section .eh_frame,"a",@progbits 89 .align 4 90 .type __EH_FRAME_BEGIN__, @object 91__EH_FRAME_BEGIN__: 92 .text 93 .p2align 4,,15 94 .type __do_global_dtors_aux, @function 95__do_global_dtors_aux: 96 pushl %ebp 97 movl %esp, %ebp 98 subl $24, %esp 99 cmpb $0, completed.4454 100 jne .L4 101 movl $__deregister_frame_info_bases, %eax 102 testl %eax, %eax 103 je .L3 104 movl $__EH_FRAME_BEGIN__, (%esp) 105 call __deregister_frame_info_bases 106.L3: 107 movb $1, completed.4454 108.L4: 109 leave 110 ret 111 .text 112 .p2align 4,,15 113 .type frame_dummy, @function 114frame_dummy: 115 pushl %ebp 116 movl $__register_frame_info_bases, %eax 117 movl %esp, %ebp 118 subl $24, %esp 119 testl %eax, %eax 120 je .L7 121 movl %ebx, 12(%esp) 122 movl $0, 8(%esp) 123 movl $object.4466, 4(%esp) 124 movl $__EH_FRAME_BEGIN__, (%esp) 125 call __register_frame_info_bases 126.L7: 127 leave 128 ret 129 .local completed.4454 130 .comm completed.4454,1,1 131 .local object.4466 132 .comm object.4466,24,4 133 .weak __register_frame_info_bases 134 .weak __deregister_frame_info_bases 135 136#include "__dso_handle.S" 137#include "atexit.S" 138#include "__stack_chk_fail_local.S" 139