diff options
Diffstat (limited to 'libc/arch-arm/bionic/crtbegin_static.S')
-rw-r--r-- | libc/arch-arm/bionic/crtbegin_static.S | 33 |
1 files changed, 12 insertions, 21 deletions
diff --git a/libc/arch-arm/bionic/crtbegin_static.S b/libc/arch-arm/bionic/crtbegin_static.S index 69d8df6..e265923 100644 --- a/libc/arch-arm/bionic/crtbegin_static.S +++ b/libc/arch-arm/bionic/crtbegin_static.S @@ -30,27 +30,25 @@ .type _start,#function .globl _start -# This is the small startup code that is first run when -# any static executable runs. A static executable is one -# that is started directly by the Linux kernel, not from -# the dynamic linker, it thus cannot depend on any shared -# library. +# this is the small startup code that is first run when +# any executable that is statically-linked with Bionic +# runs. # -# It's purpose is to call __libc_init as defined in -# bionic/libc_init_static.c with appropriate +# it's purpose is to call __libc_init with appropriate # arguments, which are: # # - the address of the raw data block setup by the Linux # kernel ELF loader # -# - address of an "onexit" function (not used on any -# platform supported by Bionic). +# - address of an "onexit" function, not used on any +# platform supported by Bionic # -# - address of the "main" function of the program. +# - address of the "main" function of the program. We +# can't hard-code it in the adr pseudo instruction +# so we use a tiny trampoline that will get relocated +# by the dynamic linker before this code runs # -# - address of the constructors table, i.e. a table -# that points to various initialization and -# finalization sections for the program. +# - address of the constructor list # _start: mov r0, sp @@ -61,18 +59,11 @@ _start: 0: b main -# The "C++ ABI for ARM" document that static C++ constructors -# shall only be called from the .init_array section. -# -# Do we really need a .ctors section on ARM platforms ? -# It looks like it will always be empty. -# - 1: .long __PREINIT_ARRAY__ .long __INIT_ARRAY__ .long __FINI_ARRAY__ .long __CTOR_LIST__ - + # the .ctors section contains a list of pointers to "constructor" # functions that need to be called in order during C library initialization, # just before the program is being run. This is a C++ requirement |