summaryrefslogtreecommitdiff
path: root/elf/soinit.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2007-07-12 18:26:36 +0000
committerJakub Jelinek <jakub@redhat.com>2007-07-12 18:26:36 +0000
commit0ecb606cb6cf65de1d9fc8a919bceb4be476c602 (patch)
tree2ea1f8305970753e4a657acb2ccc15ca3eec8e2c /elf/soinit.c
parent7d58530341304d403a6626d7f7a1913165fe2f32 (diff)
2.5-18.1
Diffstat (limited to 'elf/soinit.c')
-rw-r--r--elf/soinit.c69
1 files changed, 4 insertions, 65 deletions
diff --git a/elf/soinit.c b/elf/soinit.c
index 2015ea2d66..c0a881ef5d 100644
--- a/elf/soinit.c
+++ b/elf/soinit.c
@@ -6,10 +6,6 @@
#include <libc-internal.h>
#include <stdlib.h>
-#ifdef HAVE_DWARF2_UNWIND_INFO_STATIC
-# include <gccframe.h>
-#endif
-
static void (*const __CTOR_LIST__[1]) (void)
__attribute__ ((section (".ctors")))
= { (void (*) (void)) -1 };
@@ -24,21 +20,9 @@ run_hooks (void (*const list[]) (void))
(**list) ();
}
-#ifdef HAVE_DWARF2_UNWIND_INFO
-static char __EH_FRAME_BEGIN__[]
- __attribute__ ((section (".eh_frame")))
- = { };
-# ifdef HAVE_DWARF2_UNWIND_INFO_STATIC
-extern void __register_frame_info (const void *, struct object *);
-extern void __register_frame_info_bases (const void *, struct object *,
- void *, void *);
-extern void __deregister_frame_info (const void *);
-extern void __deregister_frame_info_bases (const void *);
-# else
-extern void __register_frame (const void *);
-extern void __deregister_frame (const void *);
-# endif
-#endif
+static const char __EH_FRAME_BEGIN__[]
+ __attribute__ ((used, section (".eh_frame")))
+ = { };
/* This function will be called from _init in init-first.c. */
void
@@ -46,62 +30,17 @@ __libc_global_ctors (void)
{
/* Call constructor functions. */
run_hooks (__CTOR_LIST__);
-
-#ifdef HAVE_DWARF2_UNWIND_INFO
-# ifdef HAVE_DWARF2_UNWIND_INFO_STATIC
- {
- static struct object ob;
-# if defined CRT_GET_RFIB_TEXT || defined CRT_GET_RFIB_DATA
- void *tbase, *dbase;
-
-# ifdef CRT_GET_RFIB_TEXT
- CRT_GET_RFIB_TEXT (tbase);
-# else
- tbase = NULL;
-# endif
-# ifdef CRT_GET_RFIB_DATA
- CRT_GET_RFIB_DATA (dbase);
-# else
- dbase = NULL;
-# endif
- __register_frame_info_bases (__EH_FRAME_BEGIN__, &ob, tbase, dbase);
-# else
- __register_frame_info (__EH_FRAME_BEGIN__, &ob);
-# endif
- }
-# else
- __register_frame (__EH_FRAME_BEGIN__);
-# endif
-#endif
}
/* This function becomes the DT_FINI termination function
for the C library. */
-#ifndef HAVE_INITFINI_ARRAY
-void _fini (void) __attribute__ ((section (".fini"))); /* Just for kicks. */
-void
-_fini (void)
-#else
void
__libc_fini (void)
-#endif
{
/* Call destructor functions. */
run_hooks (__DTOR_LIST__);
-#ifdef HAVE_DWARF2_UNWIND_INFO
-# ifdef HAVE_DWARF2_UNWIND_INFO_STATIC
-# if defined CRT_GET_RFIB_TEXT || defined CRT_GET_RFIB_DATA
- __deregister_frame_info_bases (__EH_FRAME_BEGIN__);
-# else
- __deregister_frame_info (__EH_FRAME_BEGIN__);
-# endif
-# else
- __deregister_frame (__EH_FRAME_BEGIN__);
-# endif
-#endif
}
-#ifdef HAVE_INITFINI_ARRAY
+
void (*_fini_ptr) (void) __attribute__ ((section (".fini_array")))
= &__libc_fini;
-#endif