123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- #include <features.h>
- #undef GMON_SUPPORT
- #define SECTION(x) asm (".section " x );
- #ifdef __HAVE_DOT_HIDDEN__
- # define HIDDEN(func) asm (".hidden " #func );
- #else
- # define HIDDEN(func)
- #endif
- #if defined(__sh__)
-
- #define GLB_STUFF(func) asm ("\n/*@_SH_GLB_BEGINS*/"); \
- asm ("\n\tbra\t1f\n\tnop\n\tALIGN\n/*@" #func"_SH_GLB_LABEL*/\n1:"); \
- asm ("\n/*@_SH_GLB_ENDS*/");
- #else
- #define GLB_STUFF(func)
- #endif
- asm ("\n/*@HEADER_ENDS*/");
- extern void dummy (void (*foo) (void));
- void
- dummy (void (*foo) (void))
- {
- if (foo)
- (*foo) ();
- }
- asm ("\n/*@_init_PROLOG_BEGINS*/");
- #ifdef GMON_SUPPORT
- static void
- call_gmon_start(void)
- {
- extern void __gmon_start__ (void) __attribute__ ((weak));
- void (*gmon_start) (void) = __gmon_start__;
- if (gmon_start)
- gmon_start ();
- }
- #endif
- SECTION (".init")
- HIDDEN(_init)
- extern void i_am_not_a_leaf (void);
- extern void _init (void);
- void _init (void)
- {
- #ifdef GMON_SUPPORT
-
- call_gmon_start ();
- #else
- asm ("\n/*@_init_PROLOG_PAUSES*/");
- {
-
- i_am_not_a_leaf ();
- }
- asm ("\n/*@_init_PROLOG_UNPAUSES*/");
- #endif
- GLB_STUFF(_init)
- asm ("ALIGN");
- asm("END_INIT");
-
- asm ("\n/*@_init_PROLOG_ENDS*/");
- asm ("\n/*@_init_EPILOG_BEGINS*/");
- }
- asm ("\n/*@_init_EPILOG_ENDS*/");
- asm ("\n/*@_fini_PROLOG_BEGINS*/");
- SECTION (".fini")
- HIDDEN(_fini)
- extern void i_am_not_a_leaf2 (void);
- extern void _fini (void);
- void _fini (void)
- {
-
- GLB_STUFF(_fini)
- asm ("ALIGN");
- asm ("END_FINI");
- asm ("\n/*@_fini_PROLOG_ENDS*/");
- {
-
- i_am_not_a_leaf2 ();
- }
-
- asm ("\n/*@_fini_EPILOG_BEGINS*/");
- }
- asm ("\n/*@_fini_EPILOG_ENDS*/");
- asm ("\n/*@TRAILER_BEGINS*/");
|