~alextee/libbacktrace

8602fda64e78f1f46563220f2ee9f7e70819c51d — Ian Lance Taylor 2 years ago 7409767
libbacktrace: check for sys/link.h

QNX uses sys/link.h rather than link.h for dl_iterate_phdr

Fixes #86

	* configure.ac: Check for sys/link.h.  Use either link.h or
	sys/link.h when checking for dl_iterate_phdr.
	* elf.c: Include sys/link.h if available.
	* configure, config.h.in: Regenerate.
4 files changed, 27 insertions(+), 10 deletions(-)

M config.h.in
M configure
M configure.ac
M elf.c
M config.h.in => config.h.in +3 -0
@@ 85,6 85,9 @@
/* Define to 1 if you have the <sys/ldr.h> header file. */
#undef HAVE_SYS_LDR_H

/* Define to 1 if you have the <sys/link.h> header file. */
#undef HAVE_SYS_LINK_H

/* Define to 1 if you have the <sys/mman.h> header file. */
#undef HAVE_SYS_MMAN_H


M configure => configure +11 -6
@@ 12316,26 12316,31 @@ fi


# Check for dl_iterate_phdr.
for ac_header in link.h
for ac_header in link.h sys/link.h
do :
  ac_fn_c_check_header_mongrel "$LINENO" "link.h" "ac_cv_header_link_h" "$ac_includes_default"
if test "x$ac_cv_header_link_h" = xyes; then :
  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
  cat >>confdefs.h <<_ACEOF
#define HAVE_LINK_H 1
#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
_ACEOF

fi

done

if test "$ac_cv_header_link_h" = "no"; then
if test "$ac_cv_header_link_h" = "no" -a "$ac_cv_header_sys_link_h" = "no"; then
  have_dl_iterate_phdr=no
else
  if test -n "${with_target_subdir}"; then
    link_h=link.h
    if test "$ac_cv_header_link_h" = "no"; then
       link_h=sys/link.h
    fi
    # When built as a GCC target library, we can't do a link test.
    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h.  */
#include <link.h>
#include <$link_h>

_ACEOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |

M configure.ac => configure.ac +7 -3
@@ 325,13 325,17 @@ fi
AC_SUBST(BACKTRACE_USES_MALLOC)

# Check for dl_iterate_phdr.
AC_CHECK_HEADERS(link.h)
if test "$ac_cv_header_link_h" = "no"; then
AC_CHECK_HEADERS(link.h sys/link.h)
if test "$ac_cv_header_link_h" = "no" -a "$ac_cv_header_sys_link_h" = "no"; then
  have_dl_iterate_phdr=no
else
  if test -n "${with_target_subdir}"; then
    link_h=link.h
    if test "$ac_cv_header_link_h" = "no"; then
       link_h=sys/link.h
    fi
    # When built as a GCC target library, we can't do a link test.
    AC_EGREP_HEADER([dl_iterate_phdr], [link.h], [have_dl_iterate_phdr=yes],
    AC_EGREP_HEADER([dl_iterate_phdr], [$link_h], [have_dl_iterate_phdr=yes],
		    [have_dl_iterate_phdr=no])
    case "${host}" in
    *-*-solaris2.10*)

M elf.c => elf.c +6 -1
@@ 40,7 40,12 @@ POSSIBILITY OF SUCH DAMAGE.  */
#include <unistd.h>

#ifdef HAVE_DL_ITERATE_PHDR
#include <link.h>
 #ifdef HAVE_LINK_H
  #include <link.h>
 #endif
 #ifdef HAVE_SYS_LINK_H
  #include <sys/link.h>
 #endif
#endif

#include "backtrace.h"