# This file is generated from configure.in by Autoconf.  DO NOT EDIT!
 # Local configure fragment for sysdeps/ia64/elf.

if test "$usetls" != no; then
# Check for support of thread-local storage handling in assembler and
# linker.
{ $as_echo "$as_me:$LINENO: checking for ia64 TLS support" >&5
$as_echo_n "checking for ia64 TLS support... " >&6; }
if test "${libc_cv_ia64_tls+set}" = set; then
  $as_echo_n "(cached) " >&6
else
  cat > conftest.s <<\EOF
        .section ".tdata","awT",@progbits
foo:    data8   25
        .text
        addl    r16 = @ltoff(@dtpmod(foo#)), gp
        addl    r17 = @ltoff(@dtprel(foo#)), gp
        addl    r18 = @ltoff(@tprel(foo#)), gp
        addl    r19 = @dtprel(foo#), gp
        adds    r21 = @dtprel(foo#), r13
        movl    r23 = @dtprel(foo#)
        addl    r20 = @tprel(foo#), gp
        adds    r22 = @tprel(foo#), r13
        movl    r24 = @tprel(foo#)
EOF
if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'
  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  (eval $ac_try) 2>&5
  ac_status=$?
  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
  (exit $ac_status); }; }; then
  libc_cv_ia64_tls=yes
else
  libc_cv_ia64_tls=no
fi
rm -f conftest*
fi
{ $as_echo "$as_me:$LINENO: result: $libc_cv_ia64_tls" >&5
$as_echo "$libc_cv_ia64_tls" >&6; }
if test $libc_cv_ia64_tls = yes; then
  cat >>confdefs.h <<\_ACEOF
#define HAVE_TLS_SUPPORT 1
_ACEOF

fi
fi

cat >>confdefs.h <<\_ACEOF
#define PI_STATIC_AND_HIDDEN 1
_ACEOF

