From e49dc847d2059e96949ce9ad0b3338c7337eaec9 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Mon, 27 Apr 2009 03:01:36 +0000 Subject: [PATCH] [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 . --- ChangeLog | 6 ++++++ elf/dl-runtime.c | 8 +++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8419b29..eb561bd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,11 @@ 2009-04-26 Ulrich Drepper + [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 . + * 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; } -- 2.7.4