Annotation of dietlibc/dyn_start.c, revision 1.15

1.2       olaf        1: #include "dietfeatures.h"
                      2: 
                      3: #ifdef WANT_DYNAMIC
1.11      leitner     4: #include <sys/cdefs.h>
1.1       olaf        5: #include <stdlib.h>
                      6: 
1.11      leitner     7: struct object {
                      8:   void *detail[7]; /* see gcc sources unwind-dw2-fde.h */
                      9: };
                     10: 
                     11: extern void __register_frame_info (const void *, struct object *) __attribute__((weak));
                     12: extern void __deregister_frame_info (const void *) __attribute__((weak));
                     13: 
                     14: 
1.1       olaf       15: typedef void(*structor)(void);
                     16: 
                     17: __attribute__((section(".ctors")))
1.14      leitner    18: __attribute__((aligned(sizeof(structor))))
1.11      leitner    19: __attribute_used
1.1       olaf       20: static structor __CTOR_LIST__[1]={((structor)-1)};
                     21: 
                     22: __attribute__((section(".dtors")))
1.14      leitner    23: __attribute__((aligned(sizeof(structor))))
1.11      leitner    24: __attribute_used
1.1       olaf       25: static structor __DTOR_LIST__[1]={((structor)-1)};
                     26: 
1.13      leitner    27: /* see gcc-3.4/gcc/crtstuff.c */
                     28: #if !defined(EH_FRAME_SECTION_CONST)
                     29: #if defined(__s390__) || defined(__x86_64__)
                     30: # define EH_FRAME_SECTION_CONST const
                     31: #endif
                     32: #endif
                     33: #if !defined(EH_FRAME_SECTION_CONST)
                     34: # define EH_FRAME_SECTION_CONST
                     35: #endif
                     36: 
1.12      sanjiyan   37: __attribute__((section(".eh_frame")))
1.14      leitner    38: __attribute__((aligned(sizeof(structor))))
1.11      leitner    39: __attribute_used
1.13      leitner    40: EH_FRAME_SECTION_CONST char __EH_FRAME_BEGIN__[] = { };
1.11      leitner    41: 
                     42: 
1.1       olaf       43: static void __do_global_dtors_aux(void)
                     44: {
                     45:   structor *df=__CTOR_LIST__;  /* ugly trick to prevent warning */
                     46:   for (df=((__DTOR_LIST__)+1);(*df) != (structor)0; df++) (*df)();
                     47: }
                     48: 
1.7       olaf       49: void _fini(void) __attribute__((section(".fini")));
1.1       olaf       50: __attribute__((section(".fini"))) void _fini(void)
                     51: {
                     52:   __do_global_dtors_aux();
1.11      leitner    53:   if (__deregister_frame_info)
                     54:     __deregister_frame_info(__EH_FRAME_BEGIN__);
1.1       olaf       55: }
                     56: 
1.9       leitner    57: #ifdef WANT_STACKGAP
                     58: int stackgap(int argc,char* argv[],char* envp[]);
                     59: #endif
                     60: 
1.6       olaf       61: #ifndef __DYN_LIB_SHARED
1.3       olaf       62: /* pre main, post _start */
1.11      leitner    63: extern __attribute__((section(".init"))) void _init(void);
1.10      leitner    64: 
1.5       olaf       65: int _dyn_start(int argc, char **argv, char **envp, structor dl_init);
1.3       olaf       66: int _dyn_start(int argc, char **argv, char **envp, structor dl_init)
1.1       olaf       67: {
                     68:   int main(int argc, char **argv, char **envp);
                     69: 
1.15    ! sanjiyan   70: #ifndef __arm__
        !            71:   /* GT: segfaults on arm, don't know why (for now) */
1.11      leitner    72:   void _dl_aux_init_from_envp(char **envp);
                     73:   _dl_aux_init_from_envp(envp);
1.15    ! sanjiyan   74: #endif
1.11      leitner    75: 
1.1       olaf       76:   if (dl_init) atexit(dl_init);
                     77:   _init();
                     78:   atexit(_fini);
1.11      leitner    79: 
                     80:   if (__register_frame_info) {
                     81:     static struct object ob;
                     82:     __register_frame_info(__EH_FRAME_BEGIN__, &ob);
                     83:   }
                     84: 
1.8       sanjiyan   85: #ifdef WANT_STACKGAP
                     86:   return stackgap(argc, argv, envp);
                     87: #else
1.1       olaf       88:   return main(argc, argv, envp);
1.8       sanjiyan   89: #endif
1.1       olaf       90: }
1.6       olaf       91: #endif
1.2       olaf       92: #endif

LinuxTV legacy CVS <linuxtv.org/cvs>