diff options
Diffstat (limited to 'libc/bionic/libc_init_dynamic.c')
-rw-r--r-- | libc/bionic/libc_init_dynamic.c | 40 |
1 files changed, 8 insertions, 32 deletions
diff --git a/libc/bionic/libc_init_dynamic.c b/libc/bionic/libc_init_dynamic.c index e1ff13d..8cf24b4 100644 --- a/libc/bionic/libc_init_dynamic.c +++ b/libc/bionic/libc_init_dynamic.c @@ -25,29 +25,18 @@ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ - /* * libc_init_static.c * - * This function is called for dynamic executables after the dynamic - * linker has loaded and initialized all dependent shared libraries. - * - * It takes the raw data block set up by the ELF loader - * in the kernel and parses it. + * This function takes the raw data block set up by the ELF loader + * in the kernel and parses it. It is invoked by crt0.S which makes + * any necessary adjustments and passes calls this function using + * the standard C calling convention. * * The arguments are: - * elfdata -- The ELF loader data block; usually from the stack. - * Basically a pointer to argc. - * - * onexit -- Function to call on exit, can be NULL. - * - * slingshot -- Address of the program's main function - * - * structors -- Table of constructor functions arrays that must - * be called before the slingshot. - * - * It is called from the assembly fragment found in - * arch-$ARCH/bionic/crtbegin_dynamic.S + * uintptr_t *elfdata -- The ELF loader data block; usually from the stack. + * Basically a pointer to argc. + * void (*onexit)(void) -- Function to install into onexit */ /* @@ -73,18 +62,5 @@ __noreturn void __libc_init(uintptr_t *elfdata, int (*slingshot)(int, char**, char**), structors_array_t const * const structors) { - /* NOTE: At this point, the dynamic linker has *already* called - * all initializers properly, so we ignore 'structors' to - * avoid calling them twice. - */ - - /* NOTE2: Is it worthwhile to use malloc_debug_init() in the case of - * of the non-debug shared C library ? - * - * The implementation in bionic/malloc_leak.c contains a lot - * of code which will turn to be unused, and we add a dispatch - * overhead to malloc() et al. that proved to be significant - * in the past (e.g. making boot sequence 5% slower) - */ - __libc_init_common(elfdata, onexit, slingshot, NULL, malloc_debug_init); + __libc_init_common(elfdata, onexit, slingshot, structors, malloc_debug_init); } |