Fix libc-start change for IRELless machines.

This commit is contained in:
Roland McGrath 2012-08-22 12:53:38 -07:00
parent 6aa2f685b2
commit 35a5b08bd4
2 changed files with 13 additions and 7 deletions

View File

@ -1,3 +1,8 @@
2012-08-22 Roland McGrath <roland@hack.frob.com>
* csu/libc-start.c (apply_irel): Move extern declarations inside here.
Conditionalize whole body on [IREL].
2012-08-22 Jeff Law <law@redhat.com> 2012-08-22 Jeff Law <law@redhat.com>
[BZ #14505] [BZ #14505]

View File

@ -62,18 +62,19 @@ uintptr_t __stack_chk_guard attribute_relro;
# define IREL elf_irel # define IREL elf_irel
# endif # endif
/* We use weak references for these so that we'll still work with a linker
that doesn't define them. Such a linker doesn't support IFUNC at all
and so uses won't work, but a statically-linked program that doesn't
use any IFUNC symbols won't have a problem. */
extern const IREL_T IPLT_START[] __attribute__ ((weak));
extern const IREL_T IPLT_END[] __attribute__ ((weak));
static void static void
apply_irel (void) apply_irel (void)
{ {
# ifdef IREL
/* We use weak references for these so that we'll still work with a linker
that doesn't define them. Such a linker doesn't support IFUNC at all
and so uses won't work, but a statically-linked program that doesn't
use any IFUNC symbols won't have a problem. */
extern const IREL_T IPLT_START[] __attribute__ ((weak));
extern const IREL_T IPLT_END[] __attribute__ ((weak));
for (const IREL_T *ipltent = IPLT_START; ipltent < IPLT_END; ++ipltent) for (const IREL_T *ipltent = IPLT_START; ipltent < IPLT_END; ++ipltent)
IREL (ipltent); IREL (ipltent);
# endif
} }
#endif #endif