Skip to contentSkip to conversation

2.6 bug: kconfig implementation doesn't match the spec

DISCUSSION Adrian Bunk 2 participants 5 messages Aug 8, 2003

lore
Share & tools
lore
#0 lore raw

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

Signature · 4 lines
       "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
#1 lore raw

Hi,

Quoted 6 lines · Adrian Bunk

An example:

config FOO
tristate
default m

Quoted 8 lines

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

#2 lore raw
Quoted 16 lines · Roman Zippel

Hi,

Quoted 12 lines · Adrian Bunk

An example:

config FOO
tristate
default m

config BAR
tristate
default y if !FOO
default n

Quoted 5 lines
Quoted 2 lines

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!

Quoted 1 line

bye, Roman

cu
Adrian

Signature · 4 lines
       "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
#3 lore raw

Hi,

Quoted 4 lines · Adrian Bunk
Quoted 2 lines

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.

Quoted 6 lines

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

#4 lore raw
Quoted 1 line · Roman Zippel

Hi,

Hi Roman,

Quoted 9 lines · Adrian Bunk
Quoted 5 lines
Quoted 3 lines

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.

Quoted 9 lines
Quoted 6 lines

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.

Quoted 1 line

bye, Roman

cu
Adrian

Signature · 4 lines
       "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