2003-08-08 14:51:19

by Adrian Bunk

[permalink] [raw]
Subject: 2.6 bug: kconfig implementation doesn't match the spec

Hi Roman,

the implementation of the !-operator doesn't match the spec in
Documentation/kbuild/kconfig-language.txt

kconfig-language.txt says:

<-- snip -->

...
'!' <expr> (5)
...
(5) Returns the result of (2-/expr/).
...
An expression can have a value of 'n', 'm' or 'y' (or 0, 1, 2
respectively for calculations). A menu entry becomes visible when it's
expression evaluates to 'm' or 'y'.
...

<-- snip -->

The current implementation evaluates !m to 0 instead of 1.

An example:

config FOO
tristate
default m

config BAR
tristate
default y if !FOO
default n


According to the kconfig spec BAR should be y, but the implementation in
2.6.0-mm5 sets BAR to n.

BTW:
The semantics of the implemention seems to be a bit less surprising
than the semantics of the spec.

cu
Adrian

--

"Is there not promise of rain?" Ling Tan asked suddenly out
of the darkness. There had been need of rain for many days.
"Only a promise," Lao Er said.
Pearl S. Buck - Dragon Seed


2003-08-08 15:16:34

by Roman Zippel

[permalink] [raw]
Subject: Re: 2.6 bug: kconfig implementation doesn't match the spec

Hi,

On Fri, 8 Aug 2003, Adrian Bunk wrote:

> An example:
>
> config FOO
> tristate
> default m
>
> config BAR
> tristate
> default y if !FOO
> default n
>
>
> According to the kconfig spec BAR should be y, but the implementation in
> 2.6.0-mm5 sets BAR to n.

You probably forgot to set MODULES, tristate behaves like bool in this
case and FOO becomes 'y' and '!FOO' is 'n'.

bye, Roman

2003-08-08 17:47:46

by Adrian Bunk

[permalink] [raw]
Subject: Re: 2.6 bug: kconfig implementation doesn't match the spec

On Fri, Aug 08, 2003 at 05:16:09PM +0200, Roman Zippel wrote:
> Hi,
>
> On Fri, 8 Aug 2003, Adrian Bunk wrote:
>
> > An example:
> >
> > config FOO
> > tristate
> > default m
> >
> > config BAR
> > tristate
> > default y if !FOO
> > default n
> >
> >
> > According to the kconfig spec BAR should be y, but the implementation in
> > 2.6.0-mm5 sets BAR to n.
>
> You probably forgot to set MODULES, tristate behaves like bool in this
> case and FOO becomes 'y' and '!FOO' is 'n'.

No, this is with CONFIG_MODULES=y.

Let me give another example where the kconfig implementation is
completely broken (BTW: again with CONFIG_MODULES=y):

According to your language definition,
m && !m
evaluates to "m" (it sounds a bit strange but follows directly from
rules (5) and (7) together with the interpretation of "m" as 1 as
explained in the section "Menu dependencies" of
Documentation/kbuild/kconfig-language.txt).

Let's take the following Kconfig snippet:

config MOD
tristate
default m

config TEST8
tristate
default MOD && !MOD

config TEST9
tristate
default m && !m

With the explations above it's obvious both TEST8 and TEST9 should be
"m", but the current 2.6 kconfig implementation says:

# CONFIG_TEST8 is not set
CONFIG_TEST9=y


That's not only different from the expected result directly derived from
the language definition, it also gives two completely different results
for the same expression!


> bye, Roman

cu
Adrian

--

"Is there not promise of rain?" Ling Tan asked suddenly out
of the darkness. There had been need of rain for many days.
"Only a promise," Lao Er said.
Pearl S. Buck - Dragon Seed

2003-08-08 18:06:26

by Roman Zippel

[permalink] [raw]
Subject: Re: 2.6 bug: kconfig implementation doesn't match the spec

Hi,

On Fri, 8 Aug 2003, Adrian Bunk wrote:

> > You probably forgot to set MODULES, tristate behaves like bool in this
> > case and FOO becomes 'y' and '!FOO' is 'n'.
>
> No, this is with CONFIG_MODULES=y.

How did you set it? I tried your examples and got the expected and correct
result.

> According to your language definition,
> m && !m
> evaluates to "m" (it sounds a bit strange but follows directly from
> rules (5) and (7) together with the interpretation of "m" as 1 as
> explained in the section "Menu dependencies" of
> Documentation/kbuild/kconfig-language.txt).

BTW the reason for (5) !<expr> -> 2-<expr> is that it becomes possible to
do various transformations with the expressions, e.g. !!<expr> == <expr>.

bye, Roman

2003-08-08 18:16:24

by Adrian Bunk

[permalink] [raw]
Subject: Re: 2.6 bug: kconfig implementation doesn't match the spec

On Fri, Aug 08, 2003 at 08:01:20PM +0200, Roman Zippel wrote:

> Hi,

Hi Roman,

> On Fri, 8 Aug 2003, Adrian Bunk wrote:
>
> > > You probably forgot to set MODULES, tristate behaves like bool in this
> > > case and FOO becomes 'y' and '!FOO' is 'n'.
> >
> > No, this is with CONFIG_MODULES=y.
>
> How did you set it? I tried your examples and got the expected and correct
> result.

ups, sorry, you are right. I switched between two trees and these
examples were with CONFIG_MODULES=n. With CONFIG_MODULES=y I observe the
correct results.

> > According to your language definition,
> > m && !m
> > evaluates to "m" (it sounds a bit strange but follows directly from
> > rules (5) and (7) together with the interpretation of "m" as 1 as
> > explained in the section "Menu dependencies" of
> > Documentation/kbuild/kconfig-language.txt).
>
> BTW the reason for (5) !<expr> -> 2-<expr> is that it becomes possible to
> do various transformations with the expressions, e.g. !!<expr> == <expr>.

OTOH, the expression
FOO && !FOO
is not always "n" as you might expect.

> bye, Roman

cu
Adrian

--

"Is there not promise of rain?" Ling Tan asked suddenly out
of the darkness. There had been need of rain for many days.
"Only a promise," Lao Er said.
Pearl S. Buck - Dragon Seed