glibc/sysdeps/mach/include/mach/mig_support.h
Samuel Thibault 56010b73e8 hurd: break relocation loop between libc.so and lib{mach,hurd}user.so
See
https://sourceware.org/pipermail/libc-alpha/2020-November/119575.html

lib{mach,hurd}user.so gets relocated before libc.so, but its references
to strpcpy and memcpy would need an ifunc decision, which e.g. on
x86 relies on cpu_features, but libc.so's _rtld_global_ro is not
relocated yet.

We can however just make lib{mach,hurd}user.so only call non-ifunc
functions, which can be relocated before libc.so is relocated.
2020-11-14 00:52:52 +01:00

21 lines
547 B
C

#ifndef _MACH_MIG_SUPPORT_H
#include_next <mach/mig_support.h>
#ifndef _ISOMAC
libc_hidden_proto (__mig_get_reply_port)
libc_hidden_proto (__mig_dealloc_reply_port)
libc_hidden_proto (__mig_init)
#ifdef _LIBC
# include <libc-symbols.h>
# if defined USE_MULTIARCH && (IS_IN (libmachuser) || IS_IN (libhurduser))
/* Avoid directly calling ifunc-enabled memcpy or strpcpy,
because they would introduce a relocation loop between lib*user and
libc.so. */
# define memcpy(dest, src, n) __mig_memcpy(dest, src, n)
# endif
#endif
#endif
#endif