From 61ebaa97cae48a4f37d4272426c9c85c3cd462cb Mon Sep 17 00:00:00 2001 From: "Yann E. MORIN\"" Date: Wed, 28 Jul 2010 23:53:09 +0200 Subject: [PATCH] cc/gcc: make sjlj config option a tristate A tristate fits better here than a choice. --- config/cc/gcc.in.2 | 48 ++++++++++++++--------------------------- scripts/build/cc/gcc.sh | 7 ++++-- 2 files changed, 21 insertions(+), 34 deletions(-) diff --git a/config/cc/gcc.in.2 b/config/cc/gcc.in.2 index db528837..33cbbc54 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 b26a26a5..af21e962 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