diff mbox

[09/15] kconfig/conf: fix randconfig setting multiple symbols in a choice

Message ID e6abf12a77bc56dceeb4cba557b726268e71350e.1372097219.git.yann.morin.1998@free.fr (mailing list archive)
State New, archived
Headers show

Commit Message

Yann E. MORIN June 24, 2013, 6:11 p.m. UTC
From: "Yann E. MORIN" <yann.morin.1998@free.fr>

Currently, randconfig may set more than one symbol in a given choice.
Given this config file:
    config A
        bool "A"
    if A
    choice
        bool "B/C/D"
    config B
        bool "B"
    config C
        bool "C"
    config D
        bool "D"
    endchoice
    endif # A

Then randconfig generates such .config files (case where A is not set is not
shown below for brevity), and where only the right-most .config is valid:
  CONFIG_A=y                  CONFIG_A=y                  CONFIG_A=y
  CONFIG_B=y                  CONFIG_B=y                  CONFIG_B=y
  CONFIG_C=y                  # CONFIG_C is not set       # CONFIG_C is not set
  # CONFIG_D is not set       CONFIG_D=y                  # CONFIG_D is not set

That is, in a randomised choice, the first symbol is always selected,
and at most one other symbol may be selected.

This is due to symbol randomised in a choice not being properly flagged
as having a value.

Fix that by flagging those symbols adequately: have a user-defined value,
and be not valid (to force recalculation of the symbol).

Note: if the choice is not conditional, then the randomisation is properly
done.

Reported-by: Matthieu CASTET <matthieu.castet@parrot.com>
Signed-off-by: Matthieu CASTET <matthieu.castet@parrot.com>
[yann.morin.1998@free.fr: independently re-done the same patch as Matthieu,
                          as pointed out by Sedat]
Cc: Arnaud Lacombe <lacombar@gmail.com>
Cc: Sedat Dilek <sedat.dilek@gmail.com>
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
---
 scripts/kconfig/confdata.c | 3 +++
 1 file changed, 3 insertions(+)

Comments

Sedat Dilek June 25, 2013, 7:23 a.m. UTC | #1
On Mon, Jun 24, 2013 at 8:11 PM, Yann E. MORIN <yann.morin.1998@free.fr> wrote:
> From: "Yann E. MORIN" <yann.morin.1998@free.fr>
>
> Currently, randconfig may set more than one symbol in a given choice.
> Given this config file:
>     config A
>         bool "A"
>     if A
>     choice
>         bool "B/C/D"
>     config B
>         bool "B"
>     config C
>         bool "C"
>     config D
>         bool "D"
>     endchoice
>     endif # A
>
> Then randconfig generates such .config files (case where A is not set is not
> shown below for brevity), and where only the right-most .config is valid:
>   CONFIG_A=y                  CONFIG_A=y                  CONFIG_A=y
>   CONFIG_B=y                  CONFIG_B=y                  CONFIG_B=y
>   CONFIG_C=y                  # CONFIG_C is not set       # CONFIG_C is not set
>   # CONFIG_D is not set       CONFIG_D=y                  # CONFIG_D is not set
>
> That is, in a randomised choice, the first symbol is always selected,
> and at most one other symbol may be selected.
>
> This is due to symbol randomised in a choice not being properly flagged
> as having a value.
>
> Fix that by flagging those symbols adequately: have a user-defined value,
> and be not valid (to force recalculation of the symbol).
>
> Note: if the choice is not conditional, then the randomisation is properly
> done.
>
> Reported-by: Matthieu CASTET <matthieu.castet@parrot.com>
> Signed-off-by: Matthieu CASTET <matthieu.castet@parrot.com>
> [yann.morin.1998@free.fr: independently re-done the same patch as Matthieu,
>                           as pointed out by Sedat]
> Cc: Arnaud Lacombe <lacombar@gmail.com>
> Cc: Sedat Dilek <sedat.dilek@gmail.com>
> Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>

[ CC Alexander ]

Can you or Marek (kbuild maintainer) please add also a Reported-by of
Alexander (see [1])?

     Reported-by: Alexander Kriegisch <Alexander@kriegisch.name>

It's a bit a pity that you discovered this issue by yourself independantly.
As said in PM, the Freetz router project has included it when playing
with Kconfig of Linux-v3.1-rc9.

Thanks for taking care.

- Sedat -

[1] http://www.spinics.net/lists/linux-kbuild/msg05702.html
[2] http://freetz.org/browser/trunk/tools/make/patches/340-fix_randconfig_choice.kconfig.patch

> ---
>  scripts/kconfig/confdata.c | 3 +++
>  1 file changed, 3 insertions(+)
>
> diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c
> index 35e0f16..d36bc1f 100644
> --- a/scripts/kconfig/confdata.c
> +++ b/scripts/kconfig/confdata.c
> @@ -1077,6 +1077,9 @@ static void randomize_choice_values(struct symbol *csym)
>                 else {
>                         sym->def[S_DEF_USER].tri = no;
>                 }
> +               sym->flags |= SYMBOL_DEF_USER;
> +               /* clear VALID to get value calculated */
> +               sym->flags &= ~SYMBOL_VALID;
>         }
>         csym->flags |= SYMBOL_DEF_USER;
>         /* clear VALID to get value calculated */
> --
> 1.8.1.2
>
--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c
index 35e0f16..d36bc1f 100644
--- a/scripts/kconfig/confdata.c
+++ b/scripts/kconfig/confdata.c
@@ -1077,6 +1077,9 @@  static void randomize_choice_values(struct symbol *csym)
 		else {
 			sym->def[S_DEF_USER].tri = no;
 		}
+		sym->flags |= SYMBOL_DEF_USER;
+		/* clear VALID to get value calculated */
+		sym->flags &= ~SYMBOL_VALID;
 	}
 	csym->flags |= SYMBOL_DEF_USER;
 	/* clear VALID to get value calculated */