summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYann E. MORIN" <yann.morin.1998@anciens.enib.fr>2010-07-28 21:53:09 (GMT)
committerYann E. MORIN" <yann.morin.1998@anciens.enib.fr>2010-07-28 21:53:09 (GMT)
commit61ebaa97cae48a4f37d4272426c9c85c3cd462cb (patch)
treec54cfe652786776e012c28e855a4bae45d521e27
parente5f3082b3db90894ab03c3055d50cd4d0fa74707 (diff)
cc/gcc: make sjlj config option a tristate
A tristate fits better here than a choice.
-rw-r--r--config/cc/gcc.in.248
-rw-r--r--scripts/build/cc/gcc.sh7
2 files changed, 21 insertions, 34 deletions
diff --git a/config/cc/gcc.in.2 b/config/cc/gcc.in.2
index db52883..33cbbc5 100644
--- a/config/cc/gcc.in.2
+++ b/config/cc/gcc.in.2
@@ -30,40 +30,24 @@ config CC_GCC_DISABLE_PCH
need to be disabled. Please see:
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40974
-choice
- bool
+config CC_GCC_SJLJ_EXCEPTIONS
+ tristate
prompt "Use sjlj for exceptions"
- default CC_SJLJ_EXCEPTIONS_CONFIGURE
- depends on ! BARE_METAL
-
-# This config option is used nowhere in the code on purpose.
-# It only serves as a choice entry to force neither using nor not using sjlj
-config CC_SJLJ_EXCEPTIONS_CONFIGURE
- bool
- prompt "Let configure decide"
+ default m
help
- Let configure decide if setjmp/longjmp should be used to handle
- exceptions.
+ 'sjlj' is short for setjmp/longjmp.
- Choose that if you trust configure to detect the correct settings.
- This is the default choice.
-
-config CC_SJLJ_EXCEPTIONS_USE
- bool
- prompt "Force using sjlj"
- help
- Do use setjmp/longjmp for exceptions.
- This is gcc's --enable-sjlj-exceptions configure switch.
+ On some architectures, stack unwinding during exception handling
+ works perfectly well without using sjlj, while on some others,
+ use of sjlj is required for proper stack unwinding.
- Choose that if you want to use setjmp/longjmp to handle exceptions.
-
-config CC_SJLJ_EXCEPTIONS_DONT_USE
- bool
- prompt "Force not using sjlj"
- help
- Do not use setjmp/longjmp for exceptions.
- This is gcc's --disable-sjlj-exceptions configure switch.
+ Option | sjlj use | Associated ./configure switch
+ ---------+--------------------+--------------------------------
+ Y | forcibly used | --enable-sjlj-exceptions
+ M | auto | (none, ./configure decides)
+ N | forcibly not used | --disable-sjlj-exceptions
- Choose that if you want to not use setjmp/longjmp to handle exceptions.
-
-endchoice
+ It should be safe to say 'M' or 'N'.
+
+ It can happen that ./configure is wrong in some cases. Known
+ case is for ARM big endian, where you should say 'N'.
diff --git a/scripts/build/cc/gcc.sh b/scripts/build/cc/gcc.sh
index b26a26a..af21e96 100644
--- a/scripts/build/cc/gcc.sh
+++ b/scripts/build/cc/gcc.sh
@@ -327,8 +327,11 @@ do_cc() {
[ "${CT_SHARED_LIBS}" = "y" ] || extra_config+=("--disable-shared")
[ -n "${CT_CC_PKGVERSION}" ] && extra_config+=("--with-pkgversion=${CT_CC_PKGVERSION}")
[ -n "${CT_CC_BUGURL}" ] && extra_config+=("--with-bugurl=${CT_CC_BUGURL}")
- [ "${CT_CC_SJLJ_EXCEPTIONS_USE}" = "y" ] && extra_config+=("--enable-sjlj-exceptions")
- [ "${CT_CC_SJLJ_EXCEPTIONS_DONT_USE}" = "y" ] && extra_config+=("--disable-sjlj-exceptions")
+ case "${CT_CC_GCC_SJLJ_EXCEPTIONS}" in
+ y) extra_config+=("--enable-sjlj-exceptions");;
+ m) ;;
+ "") extra_config+=("--disable-sjlj-exceptions");;
+ esac
if [ "${CT_CC_CXA_ATEXIT}" = "y" ]; then
extra_config+=("--enable-__cxa_atexit")
else