summaryrefslogtreecommitdiff
path: root/csu/elf-init.c
diff options
context:
space:
mode:
authorAndreas Schwab <schwab@redhat.com>2009-11-30 14:53:29 +0100
committerAndreas Schwab <schwab@redhat.com>2009-11-30 14:54:41 +0100
commit488fb43a499982e99915c78bb70f04357ac37463 (patch)
treee356d0f1d327ed3de4a9d5abec1edf346070aa32 /csu/elf-init.c
parenteab709096f23a4511adfc547450a83008eae5fb2 (diff)
parent20af204581e1ba42738c1bfb69cc2f5350f4ffa4 (diff)
Merge branch 'release/2.11/master' into fedora/2.11/master
Diffstat (limited to 'csu/elf-init.c')
-rw-r--r--csu/elf-init.c21
1 files changed, 15 insertions, 6 deletions
diff --git a/csu/elf-init.c b/csu/elf-init.c
index 7481e69aa6..f828faa601 100644
--- a/csu/elf-init.c
+++ b/csu/elf-init.c
@@ -89,15 +89,14 @@ extern void _fini (void);
/* These functions are passed to __libc_start_main by the startup code.
These get statically linked into each program. For dynamically linked
programs, this module will come from libc_nonshared.a and differs from
- the libc.a module in that it doesn't call the preinit array. */
+ the libc.a module in that it doesn't call the preinit array and performs
+ explicit IREL{,A} relocations. */
-void
-__libc_csu_init (int argc, char **argv, char **envp)
-{
- /* For dynamically linked executables the preinit array is executed by
- the dynamic linker (before initializing any shared object. */
#ifndef LIBC_NONSHARED
+void
+__libc_csu_irel (void)
+{
# ifdef USE_MULTIARCH
# ifdef ELF_MACHINE_IRELA
{
@@ -115,7 +114,17 @@ __libc_csu_init (int argc, char **argv, char **envp)
}
# endif
# endif
+}
+#endif
+
+void
+__libc_csu_init (int argc, char **argv, char **envp)
+{
+ /* For dynamically linked executables the preinit array is executed by
+ the dynamic linker (before initializing any shared object. */
+
+#ifndef LIBC_NONSHARED
/* For static executables, preinit happens right before init. */
{
const size_t size = __preinit_array_end - __preinit_array_start;