mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-13 06:40:09 +00:00
Fix remaining return type of ifunc resolver declaration
Since Martin Sebor's commit commitee4e992ebe
Author: Martin Sebor <msebor@redhat.com> Date: Tue Aug 22 09:35:23 2017 -0600 Declare ifunc resolver to return a pointer to the same type as the target function to help GCC detect incompatibilities between the two when it's enhanced to do so. builds for powerpc64le fail in the declaration of some ifunc resolvers, because the ifunc is declared with unmatching return types. One of the declarations comes from the __ifunc_resolver macro, which was patched by the aforementioned commit: /* Helper / base macros for indirect function symbols. */ #define __ifunc_resolver(type_name, name, expr, arg, init, classifier) \ classifier inhibit_stack_protector \ __typeof (type_name) *name##_ifunc (arg) \ whereas the other comes from the unpatched __ifunc macro when HAVE_GCC_IFUNC is not defined: # define __ifunc(type_name, name, expr, arg, init) \ extern __typeof (type_name) name; \ void *name##_ifunc (arg) __asm__ (#name); \ This patch changes the return type of the ifunc resolver in the __ifunc macro, so that it matches the return type of the target function, similarly to what the aforementioned commit does. Tested for powerpc64le and s390x with unpatched GCC. * include/libc-symbols.h: [!defined HAVE_GCC_IFUNC] (__ifunc): Change the return type of the ifunc resolver to match the return type of the target function. (cherry picked from commitb513da7e80
)
This commit is contained in:
parent
ac6113cb01
commit
37d4262a7a
@ -1,3 +1,9 @@
|
||||
2017-08-22 Gabriel F. T. Gomes <gftg@linux.vnet.ibm.com>
|
||||
|
||||
* include/libc-symbols.h: [!defined HAVE_GCC_IFUNC] (__ifunc):
|
||||
Change the return type of the ifunc resolver to match the return
|
||||
type of the target function.
|
||||
|
||||
2017-08-22 Martin Sebor <msebor@redhat.com>
|
||||
|
||||
* include/libc-symbols.h (__ifunc_resolver): Declare resolver
|
||||
|
@ -810,7 +810,7 @@ for linking")
|
||||
|
||||
# define __ifunc(type_name, name, expr, arg, init) \
|
||||
extern __typeof (type_name) name; \
|
||||
void *name##_ifunc (arg) __asm__ (#name); \
|
||||
__typeof (type_name) *name##_ifunc (arg) __asm__ (#name); \
|
||||
__ifunc_resolver (type_name, name, expr, arg, init,) \
|
||||
__asm__ (".type " #name ", %gnu_indirect_function");
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user