Home | History | Annotate | Line # | Download | only in common
crtbegin.c revision 1.8.2.1
      1      1.1    matt /*-
      2      1.1    matt  * Copyright (c) 2013 The NetBSD Foundation, Inc.
      3      1.1    matt  * All rights reserved.
      4      1.1    matt  *
      5      1.1    matt  * This code is derived from software contributed to The NetBSD Foundation
      6      1.1    matt  * by Matt Thomas of 3am Software Foundry.
      7      1.1    matt  *
      8      1.1    matt  * Redistribution and use in source and binary forms, with or without
      9      1.1    matt  * modification, are permitted provided that the following conditions
     10      1.1    matt  * are met:
     11      1.1    matt  * 1. Redistributions of source code must retain the above copyright
     12      1.1    matt  *    notice, this list of conditions and the following disclaimer.
     13      1.1    matt  * 2. Redistributions in binary form must reproduce the above copyright
     14      1.1    matt  *    notice, this list of conditions and the following disclaimer in the
     15      1.1    matt  *    documentation and/or other materials provided with the distribution.
     16      1.1    matt  *
     17      1.1    matt  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     18      1.1    matt  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     19      1.1    matt  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     20      1.1    matt  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     21      1.1    matt  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     22      1.1    matt  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     23      1.1    matt  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     24      1.1    matt  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     25      1.1    matt  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     26      1.1    matt  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     27      1.1    matt  * POSSIBILITY OF SUCH DAMAGE.
     28      1.1    matt  */
     29      1.1    matt #include <sys/cdefs.h>
     30  1.8.2.1     tls __RCSID("$NetBSD: crtbegin.c,v 1.8.2.1 2014/08/10 06:51:42 tls Exp $");
     31      1.6   joerg 
     32      1.6   joerg #include "crtbegin.h"
     33      1.1    matt 
     34      1.1    matt typedef void (*fptr_t)(void);
     35      1.1    matt 
     36      1.1    matt __dso_hidden const fptr_t __JCR_LIST__[0] __section(".jcr");
     37      1.3    matt 
     38      1.3    matt __weakref_visible void Jv_RegisterClasses(const fptr_t *)
     39      1.3    matt 	__weak_reference(_Jv_RegisterClasses);
     40      1.3    matt 
     41      1.3    matt #if !defined(HAVE_INITFINI_ARRAY)
     42      1.7    matt __dso_hidden const fptr_t __aligned(sizeof(void *)) __CTOR_LIST__[] __section(".ctors") = {
     43      1.1    matt 	(fptr_t) -1,
     44      1.1    matt };
     45      1.1    matt __dso_hidden extern const fptr_t __CTOR_LIST_END__[];
     46      1.3    matt #endif
     47      1.1    matt 
     48      1.1    matt #ifdef SHARED
     49      1.1    matt __dso_hidden void *__dso_handle = &__dso_handle;
     50      1.3    matt 
     51      1.3    matt __weakref_visible void cxa_finalize(void *)
     52      1.3    matt 	__weak_reference(__cxa_finalize);
     53      1.1    matt #else
     54      1.1    matt __dso_hidden void *__dso_handle;
     55      1.1    matt #endif
     56      1.1    matt 
     57  1.8.2.1     tls #if !defined(__ARM_EABI__) || defined(__ARM_DWARF_EH__)
     58      1.5    matt __dso_hidden
     59      1.5    matt #if !defined(__mips__)
     60      1.5    matt 	const
     61      1.5    matt #endif
     62      1.5    matt 	long __EH_FRAME_LIST__[0] __section(".eh_frame");
     63      1.3    matt 
     64      1.1    matt __weakref_visible void register_frame_info(const void *, const void *)
     65      1.1    matt 	__weak_reference(__register_frame_info);
     66      1.1    matt __weakref_visible void deregister_frame_info(const void *)
     67      1.1    matt 	__weak_reference(__deregister_frame_info);
     68      1.1    matt 
     69      1.2    matt static long dwarf_eh_object[8];
     70      1.3    matt #endif
     71      1.1    matt 
     72      1.1    matt static void __do_global_ctors_aux(void) __used;
     73      1.1    matt 
     74      1.4    matt static void __section(".text.startup")
     75      1.1    matt __do_global_ctors_aux(void)
     76      1.1    matt {
     77      1.3    matt 	static unsigned char __initialized;
     78      1.3    matt 
     79      1.1    matt 	if (__initialized)
     80      1.1    matt 		return;
     81      1.1    matt 
     82      1.1    matt 	__initialized = 1;
     83      1.1    matt 
     84  1.8.2.1     tls #if !defined(__ARM_EABI__) || defined(__ARM_DWARF_EH__)
     85      1.1    matt 	if (register_frame_info)
     86      1.1    matt 		register_frame_info(__EH_FRAME_LIST__, &dwarf_eh_object);
     87      1.3    matt #endif
     88      1.1    matt 
     89      1.1    matt 	if (Jv_RegisterClasses && __JCR_LIST__[0] != 0)
     90      1.1    matt 		Jv_RegisterClasses(__JCR_LIST__);
     91      1.1    matt 
     92      1.3    matt #if !defined(HAVE_INITFINI_ARRAY)
     93      1.1    matt 	for (const fptr_t *p = __CTOR_LIST_END__; p > __CTOR_LIST__ + 1; ) {
     94      1.1    matt 		(*(*--p))();
     95      1.1    matt 	}
     96      1.3    matt #endif
     97      1.1    matt }
     98      1.1    matt 
     99  1.8.2.1     tls #if !defined(__ARM_EABI__) || defined(SHARED) || defined(__ARM_DWARF_EH__)
    100      1.3    matt #if !defined(HAVE_INITFINI_ARRAY)
    101      1.8  bouyer __dso_hidden const fptr_t __aligned(sizeof(void *)) __DTOR_LIST__[] __section(".dtors") = {
    102      1.3    matt 	(fptr_t) -1,
    103      1.3    matt };
    104      1.3    matt __dso_hidden extern const fptr_t __DTOR_LIST_END__[];
    105      1.3    matt #endif
    106      1.3    matt 
    107      1.3    matt static void __do_global_dtors_aux(void) __used;
    108      1.3    matt 
    109      1.4    matt static void __section(".text.exit")
    110      1.1    matt __do_global_dtors_aux(void)
    111      1.1    matt {
    112      1.3    matt 	static unsigned char __finished;
    113      1.3    matt 
    114      1.1    matt 	if (__finished)
    115      1.1    matt 		return;
    116      1.1    matt 
    117      1.1    matt 	__finished = 1;
    118      1.1    matt 
    119      1.3    matt #ifdef SHARED
    120      1.1    matt 	if (cxa_finalize)
    121      1.3    matt 		(*cxa_finalize)(__dso_handle);
    122      1.3    matt #endif
    123      1.3    matt 
    124      1.3    matt #if !defined(HAVE_INITFINI_ARRAY)
    125      1.1    matt 	for (const fptr_t *p = __DTOR_LIST__ + 1; p < __DTOR_LIST_END__; ) {
    126      1.1    matt 		(*(*p++))();
    127      1.1    matt 	}
    128      1.3    matt #endif
    129      1.1    matt 
    130  1.8.2.1     tls #if !defined(__ARM_EABI__) || defined(__ARM_DWARF_EH__)
    131      1.1    matt 	if (deregister_frame_info)
    132      1.1    matt 		deregister_frame_info(__EH_FRAME_LIST__);
    133      1.3    matt #endif
    134      1.1    matt }
    135  1.8.2.1     tls #endif /* !__ARM_EABI__ || SHARED || __ARM_DWARF_EH__ */
    136