mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-30 22:43:12 +03:00
Support static IFUNC calls irrespective of USE_MULTIARCH.
This commit is contained in:
@ -1,6 +1,5 @@
|
||||
/* Startup support for ELF initializers/finalizers in the main executable.
|
||||
Copyright (C) 2002,2003,2004,2005,2009,2011
|
||||
Free Software Foundation, Inc.
|
||||
Copyright (C) 2002-2012 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
@ -36,20 +35,6 @@
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
#if defined USE_MULTIARCH && !defined LIBC_NONSHARED
|
||||
# include <link.h>
|
||||
# include <dl-irel.h>
|
||||
|
||||
# ifdef ELF_MACHINE_IRELA
|
||||
extern const ElfW(Rela) __rela_iplt_start [];
|
||||
extern const ElfW(Rela) __rela_iplt_end [];
|
||||
# endif
|
||||
|
||||
# ifdef ELF_MACHINE_IREL
|
||||
extern const ElfW(Rel) __rel_iplt_start [];
|
||||
extern const ElfW(Rel) __rel_iplt_end [];
|
||||
# endif
|
||||
#endif /* LIBC_NONSHARED */
|
||||
|
||||
/* These magic symbols are provided by the linker. */
|
||||
extern void (*__preinit_array_start []) (int, char **, char **)
|
||||
@ -72,33 +57,7 @@ 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 and performs
|
||||
explicit IREL{,A} relocations. */
|
||||
|
||||
|
||||
#ifndef LIBC_NONSHARED
|
||||
void
|
||||
__libc_csu_irel (void)
|
||||
{
|
||||
# ifdef USE_MULTIARCH
|
||||
# ifdef ELF_MACHINE_IRELA
|
||||
{
|
||||
const size_t size = __rela_iplt_end - __rela_iplt_start;
|
||||
for (size_t i = 0; i < size; i++)
|
||||
elf_irela (&__rela_iplt_start [i]);
|
||||
}
|
||||
# endif
|
||||
|
||||
# ifdef ELF_MACHINE_IREL
|
||||
{
|
||||
const size_t size = __rel_iplt_end - __rel_iplt_start;
|
||||
for (size_t i = 0; i < size; i++)
|
||||
elf_irel (&__rel_iplt_start [i]);
|
||||
}
|
||||
# endif
|
||||
# endif
|
||||
}
|
||||
#endif
|
||||
the libc.a module in that it doesn't call the preinit array. */
|
||||
|
||||
|
||||
void
|
||||
|
Reference in New Issue
Block a user