# This file is generated from configure.ac by Autoconf.  DO NOT EDIT!
 # Local configure fragment for sysdeps/i386.

{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for .cfi_personality and .cfi_lsda pseudo-ops" >&5
$as_echo_n "checking for .cfi_personality and .cfi_lsda pseudo-ops... " >&6; }
if ${libc_cv_asm_cfi_personality+:} false; then :
  $as_echo_n "(cached) " >&6
else
    cat > conftest.s <<EOF
${libc_cv_dot_text}
foo:
	.cfi_startproc
	.cfi_personality 0, foo
	.cfi_lsda 0, foo
	.cfi_endproc
EOF
  if { ac_try='${CC-cc} $ASFLAGS -c conftest.s 1>&5'
  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
  (eval $ac_try) 2>&5
  ac_status=$?
  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
  test $ac_status = 0; }; }; then
    libc_cv_asm_cfi_personality=yes
  else
    libc_cv_asm_cfi_personality=no
  fi
  rm -f conftest*

fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_asm_cfi_personality" >&5
$as_echo "$libc_cv_asm_cfi_personality" >&6; }
if test x"$libc_cv_asm_cfi_personality" != xyes; then
  as_fn_error $? "assembler too old, .cfi_personality support missing" "$LINENO" 5
fi
