diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | elf/dl-runtime.c | 8 |
2 files changed, 11 insertions, 3 deletions
@@ -1,5 +1,11 @@ 2009-04-26 Ulrich Drepper <drepper@redhat.com> + [BZ #10087] + * elf/dl-runtime.c (_dl_fixup): Use DL_FIXUP_VALUE_ADDR to access + result of lookup to make call to implement STT_GNU_IFUNC. + (_dl_profile_fixup): Likewise. + Patch by H.J. Lu <hjl.tools@gmail.com>. + * nscd/connections.c (send_ro_fd): Define temporary variable to avoid warning. diff --git a/elf/dl-runtime.c b/elf/dl-runtime.c index 93c8f29..0eb7d4e 100644 --- a/elf/dl-runtime.c +++ b/elf/dl-runtime.c @@ -137,7 +137,7 @@ _dl_fixup ( value = elf_machine_plt_value (l, reloc, value); if (__builtin_expect (ELFW(ST_TYPE) (sym->st_info) == STT_GNU_IFUNC, 0)) - value = ((DL_FIXUP_VALUE_TYPE (*) (void)) value) (); + value = ((DL_FIXUP_VALUE_TYPE (*) (void)) DL_FIXUP_VALUE_ADDR (value)) (); /* Finally, fix up the plt itself. */ if (__builtin_expect (GLRO(dl_bind_not), 0)) @@ -225,7 +225,8 @@ _dl_profile_fixup ( if (__builtin_expect (ELFW(ST_TYPE) (defsym->st_info) == STT_GNU_IFUNC, 0)) - value = ((DL_FIXUP_VALUE_TYPE (*) (void)) value) (); + value = ((DL_FIXUP_VALUE_TYPE (*) (void)) + DL_FIXUP_VALUE_ADDR (value)) (); } else { @@ -235,7 +236,8 @@ _dl_profile_fixup ( if (__builtin_expect (ELFW(ST_TYPE) (refsym->st_info) == STT_GNU_IFUNC, 0)) - value = ((DL_FIXUP_VALUE_TYPE (*) (void)) value) (); + value = ((DL_FIXUP_VALUE_TYPE (*) (void)) + DL_FIXUP_VALUE_ADDR (value)) (); result = l; } |