-FORCELIBGCCSPEC=
-dnl Work around libgcc design flaw.
-if test "$ac_cv_prog_gnu_ld" = yes; then
- FORCELIBGCCSPEC="-u __rethrow -lgcc"
-fi
-
-AC_MSG_CHECKING([for data_start])
-LIBDATASTARTSPEC=
-NEEDS_DATA_START=
-AC_TRY_LINK([extern int data_start;], [return ((int) &data_start);],
- [AC_MSG_RESULT(found it)],
- [LIBDATASTARTSPEC="-lgcjdata"
- NEEDS_DATA_START=yes
- AC_MSG_RESULT(missing)])
-AC_SUBST(LIBDATASTARTSPEC)
+AC_MSG_CHECKING([for exception model to use])
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+AC_ARG_ENABLE(sjlj-exceptions,
+[ --enable-sjlj-exceptions force use of builtin_setjmp for exceptions],
+[:],
+[dnl Botheration. Now we've got to detect the exception model.
+dnl Link tests against libgcc.a are problematic since -- at least
+dnl as of this writing -- we've not been given proper -L bits for
+dnl single-tree newlib and libgloss.
+dnl
+dnl This is what AC_TRY_COMPILE would do if it didn't delete the
+dnl conftest files before we got a change to grep them first.
+cat > conftest.$ac_ext << EOF
+[#]line __oline__ "configure"
+struct S { ~S(); };
+void bar();
+void foo()
+{
+ S s;
+ bar();
+}
+EOF
+old_CXXFLAGS="$CXXFLAGS"
+CXXFLAGS=-S
+if AC_TRY_EVAL(ac_compile); then
+ if grep _Unwind_SjLj_Resume conftest.s >/dev/null 2>&1 ; then
+ enable_sjlj_exceptions=yes
+ elif grep _Unwind_Resume conftest.s >/dev/null 2>&1 ; then
+ enable_sjlj_exceptions=no
+ fi
+fi
+CXXFLAGS="$old_CXXFLAGS"
+rm -f conftest*])
+if test x$enable_sjlj_exceptions = xyes; then
+ AC_DEFINE(SJLJ_EXCEPTIONS, 1,
+ [Define if the compiler is configured for setjmp/longjmp exceptions.])
+ ac_exception_model_name=sjlj
+elif test x$enable_sjlj_exceptions = xno; then
+ ac_exception_model_name="call frame"
+else
+ AC_MSG_ERROR([unable to detect exception model])
+fi
+AC_LANG_RESTORE
+AC_MSG_RESULT($ac_exception_model_name)
+
+# If we are non using SJLJ exceptions, and this host does not have support
+# for unwinding from a signal handler, enable checked dereferences and divides.
+if test $can_unwind_signal = no && test $enable_sjlj_exceptions = no; then
+ CHECKREFSPEC=-fcheck-references
+ DIVIDESPEC=-fuse-divide-subroutine
+ EXCEPTIONSPEC=
+fi