diff --git a/newlib/README b/newlib/README index a8aba99..9b2d5b0 100644 --- a/newlib/README +++ b/newlib/README @@ -288,6 +288,12 @@ One feature can be enabled by specifying `--enable-FEATURE=yes' or Disable dynamic allocation of atexit entries. Most hosts and targets have it enabled in configure.host. +`--disable-reenterable-atexit' + Disable reenterablility of atexit by declare related data structures + as global variables. By doing these data structures can be discarded + if atexit is not referenced. + Enabled by default. + `--enable-newlib-reent-small' Enable small reentrant struct support. Disabled by default. diff --git a/newlib/configure b/newlib/configure index e05a2d3..e4f38a8 100755 --- a/newlib/configure +++ b/newlib/configure @@ -788,6 +788,7 @@ enable_newlib_iconv_from_encodings enable_newlib_iconv_to_encodings enable_newlib_iconv_external_ccs enable_newlib_atexit_dynamic_alloc +enable_reenterable_atexit enable_newlib_reent_small enable_newlib_fvwrite_in_streamio enable_newlib_fseek_optimization @@ -1457,6 +1458,7 @@ Optional Features: --enable-newlib-iconv-to-encodings enable specific comma-separated list of \"to\" iconv encodings to be built-in --enable-newlib-iconv-external-ccs enable capabilities to load external CCS files for iconv --disable-newlib-atexit-dynamic-alloc disable dynamic allocation of atexit entries + --disable-reenterable-atexit disable reenterable atexit --enable-newlib-reent-small enable small reentrant struct support --disable-newlib-fvwrite-in-streamio disable iov in streamio --disable-newlib-fseek-optimization disable fseek optimization @@ -2352,6 +2354,19 @@ else newlib_atexit_dynamic_alloc=${newlib_atexit_dynamic_alloc} fi +# Check whether --enable-reenterable-atexit was given. +if test "${enable_reenterable_atexit+set}" = set; then : + enableval=$enable_reenterable_atexit; if test "${reent_atexit+set}" != set; then + case "${enableval}" in + yes) reent_atexit=yes ;; + no) reent_atexit=no ;; + *) as_fn_error $? "bad value ${enableval} for reenterable-atexit option" "$LINENO" 5 ;; + esac + fi +else + reent_atexit=yes +fi + # Check whether --enable-newlib-reent-small was given. if test "${enable_newlib_reent_small+set}" = set; then : enableval=$enable_newlib_reent_small; case "${enableval}" in @@ -12321,6 +12342,13 @@ _ACEOF fi +if test "${reent_atexit}" = "no"; then +cat >>confdefs.h <<_ACEOF +#define _REENT_GLOBAL_ATEXIT 1 +_ACEOF + +fi + if test "${newlib_fvwrite_in_streamio}" = "yes"; then cat >>confdefs.h <<_ACEOF #define _FVWRITE_IN_STREAMIO 1 diff --git a/newlib/configure.in b/newlib/configure.in index 8e742f7..33e8a7e 100644 --- a/newlib/configure.in +++ b/newlib/configure.in @@ -115,6 +115,19 @@ AC_ARG_ENABLE(newlib-atexit-dynamic-alloc, esac fi], [newlib_atexit_dynamic_alloc=${newlib_atexit_dynamic_alloc}])dnl +dnl Support --disable-reenterable-atexit +dnl Disable reenterability of atexit to save memory usage in reent data +dnl structures. +AC_ARG_ENABLE(reenterable-atexit, +[ --disable-reenterable-atexit disable reenterable atexit], +[if test "${reent_atexit+set}" != set; then + case "${enableval}" in + yes) reent_atexit=yes ;; + no) reent_atexit=no ;; + *) AC_MSG_ERROR(bad value ${enableval} for reenterable-atexit option) ;; + esac + fi], [reent_atexit=yes])dnl + dnl Support --enable-newlib-reent-small AC_ARG_ENABLE(newlib-reent-small, [ --enable-newlib-reent-small enable small reentrant struct support], @@ -383,6 +396,10 @@ if test "${newlib_atexit_dynamic_alloc}" = "yes"; then AC_DEFINE_UNQUOTED(_ATEXIT_DYNAMIC_ALLOC) fi +if test "${reent_atexit}" = "no"; then +AC_DEFINE_UNQUOTED(_REENT_GLOBAL_ATEXIT) +fi + if test "${newlib_fvwrite_in_streamio}" = "yes"; then AC_DEFINE_UNQUOTED(_FVWRITE_IN_STREAMIO) fi diff --git a/newlib/newlib.hin b/newlib/newlib.hin index e4f6230..0d057e3 100644 --- a/newlib/newlib.hin +++ b/newlib/newlib.hin @@ -73,6 +73,9 @@ /* Define if lite version of exit supported. */ #undef _LITE_EXIT +/* Define if declare atexit data as global. */ +#undef _REENT_GLOBAL_ATEXIT + /* * Iconv encodings enabled ("to" direction) */