xref: /netbsd-src/external/gpl3/gcc/dist/config/weakref.m4 (revision 48fb7bfab72acd4281a53bbee5ccf3f809019e75)
1*48fb7bfaSmrg
2*48fb7bfaSmrgdnl Check if the target supports weak.
3*48fb7bfaSmrgAC_DEFUN([GCC_CHECK_ATTRIBUTE_WEAK], [
4*48fb7bfaSmrg  AC_CACHE_CHECK([whether the target supports weak],
5*48fb7bfaSmrg		 ac_cv_have_attribute_weak, [
6*48fb7bfaSmrg  weakref_m4_saved_CFLAGS="$CFLAGS"
7*48fb7bfaSmrg  CFLAGS="$CFLAGS -Werror"
8*48fb7bfaSmrg  AC_TRY_COMPILE([void __attribute__((weak)) foo(void) { }],
9*48fb7bfaSmrg		 [], ac_cv_have_attribute_weak=yes,
10*48fb7bfaSmrg		 ac_cv_have_attribute_weak=no)
11*48fb7bfaSmrg  CFLAGS="$weakref_m4_saved_CFLAGS"])
12*48fb7bfaSmrg  if test x"$ac_cv_have_attribute_weak" = xyes; then
13*48fb7bfaSmrg    AC_DEFINE(HAVE_ATTRIBUTE_WEAK, 1,
14*48fb7bfaSmrg      [Define to 1 if the target supports __attribute__((weak)).])
15*48fb7bfaSmrg  fi])
16*48fb7bfaSmrg
17*48fb7bfaSmrgdnl Check whether weak refs work like the ELF ones.
18*48fb7bfaSmrgdnl This means that the weak reference works without having to satify
19*48fb7bfaSmrgdnl linkage for the item.
20*48fb7bfaSmrgdnl There are targets (at least Darwin) where we have fully functional
21*48fb7bfaSmrgdnl weakrefs at runtime, but must supply the referenced item at link time.
22*48fb7bfaSmrgAC_DEFUN([GCC_CHECK_ELF_STYLE_WEAKREF], [
23*48fb7bfaSmrg  AC_CACHE_CHECK([whether weak refs work like ELF],
24*48fb7bfaSmrg                  ac_cv_have_elf_style_weakref, [
25*48fb7bfaSmrg  weakref_m4_saved_CFLAGS="$CFLAGS"
26*48fb7bfaSmrg  case "${host}" in
27*48fb7bfaSmrg    *-apple-darwin*) CFLAGS="$CFLAGS -Wl,-undefined,dynamic_lookup" ;;
28*48fb7bfaSmrg    *) ;;
29*48fb7bfaSmrg  esac
30*48fb7bfaSmrg  AC_RUN_IFELSE([AC_LANG_SOURCE([[
31*48fb7bfaSmrgextern void fNotToBeFound(void) __attribute__((weak));
32*48fb7bfaSmrgint main ()
33*48fb7bfaSmrg{
34*48fb7bfaSmrg  if (fNotToBeFound)
35*48fb7bfaSmrg    return 1;
36*48fb7bfaSmrg  else
37*48fb7bfaSmrg    return 0;
38*48fb7bfaSmrg}
39*48fb7bfaSmrg]])], ac_cv_have_elf_style_weakref=yes, ac_cv_have_elf_style_weakref=no, [
40*48fb7bfaSmrgcase "${host}" in
41*48fb7bfaSmrg  *-apple-darwin[[89]]*) ac_cv_have_elf_style_weakref=no ;;
42*48fb7bfaSmrg  *) ac_cv_have_elf_style_weakref=yes;;
43*48fb7bfaSmrgesac])CFLAGS="$weakref_m4_saved_CFLAGS"])
44*48fb7bfaSmrgif test x"$ac_cv_have_elf_style_weakref" = xyes; then
45*48fb7bfaSmrg  AC_DEFINE(HAVE_ELF_STYLE_WEAKREF, 1, [Define to 1 if target has a weakref that works like the ELF one.])
46*48fb7bfaSmrgfi])
47*48fb7bfaSmrg
48