aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoland McGrath <roland@gnu.org>2005-02-10 09:25:49 +0000
committerRoland McGrath <roland@gnu.org>2005-02-10 09:25:49 +0000
commit1a53c052c34ec4e934ba177b4f5bcf0b51be2ceb (patch)
treedc5220b044cd42bcfd925042424f4c11323cc95d
parent[BZ #632] (diff)
downloadglibc-1a53c052c34ec4e934ba177b4f5bcf0b51be2ceb.tar.gz
glibc-1a53c052c34ec4e934ba177b4f5bcf0b51be2ceb.tar.bz2
glibc-1a53c052c34ec4e934ba177b4f5bcf0b51be2ceb.zip
* dlfcn/dlfcn.c (init): Put it in .init_array section.
-rw-r--r--ChangeLog4
-rw-r--r--dlfcn/dlfcn.c12
2 files changed, 13 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 7a15f2f4ac..f9486d64ad 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2005-01-25 H.J. Lu <hongjiu.lu@intel.com>
+
+ * dlfcn/dlfcn.c (init): Put it in .init_array section.
+
2005-02-10 Roland McGrath <roland@redhat.com>
[BZ #632]
diff --git a/dlfcn/dlfcn.c b/dlfcn/dlfcn.c
index 9c0a84afb8..8047150763 100644
--- a/dlfcn/dlfcn.c
+++ b/dlfcn/dlfcn.c
@@ -23,11 +23,17 @@
int __dlfcn_argc attribute_hidden;
char **__dlfcn_argv attribute_hidden;
-
-void
-__attribute__ ((constructor))
+#ifdef HAVE_INITFINI_ARRAY
+static void
init (int argc, char *argv[])
{
__dlfcn_argc = argc;
__dlfcn_argv = argv;
}
+
+static void (*const init_array []) (int argc, char *argv[])
+ __attribute__ ((section (".init_array"), aligned (sizeof (void *))))
+ __attribute_used__ = { init };
+#else
+# error "Need linker with .init_array support."
+#endif