diff options
author | Ulrich Drepper <drepper@redhat.com> | 2009-04-27 03:01:36 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2009-04-27 03:01:36 +0000 |
commit | e49dc847d2059e96949ce9ad0b3338c7337eaec9 (patch) | |
tree | 9406258ec086951d90a2b14098e2eab7e005ac60 | |
parent | 1ac03a1e44079a28f9dd55bfc80b6496618c5147 (diff) | |
download | glibc-e49dc847d2059e96949ce9ad0b3338c7337eaec9.zip glibc-e49dc847d2059e96949ce9ad0b3338c7337eaec9.tar.gz glibc-e49dc847d2059e96949ce9ad0b3338c7337eaec9.tar.bz2 |
[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>.
-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; } |