On Mon, Jun 24, 2013 at 8:11 PM, Yann E. MORIN <yann.morin.1998@xxxxxxx> wrote: > From: "Yann E. MORIN" <yann.morin.1998@xxxxxxx> > > 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@xxxxxxxxxx> > Signed-off-by: Matthieu CASTET <matthieu.castet@xxxxxxxxxx> > [yann.morin.1998@xxxxxxx: independently re-done the same patch as Matthieu, > as pointed out by Sedat] > Cc: Arnaud Lacombe <lacombar@xxxxxxxxx> > Cc: Sedat Dilek <sedat.dilek@xxxxxxxxx> > Signed-off-by: "Yann E. MORIN" <yann.morin.1998@xxxxxxx> [ CC Alexander ] Can you or Marek (kbuild maintainer) please add also a Reported-by of Alexander (see [1])? Reported-by: Alexander Kriegisch <Alexander@xxxxxxxxxxxxxx> 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@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html