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
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 SeedHi,
Quoted 6 lines · Adrian Bunk
An example:
config FOO
tristate
default m
Quoted 8 lines
config BAR
tristate
default y if !FOO
default nAccording 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
Quoted 16 lines · Roman Zippel
Hi,
Quoted 12 lines · Adrian Bunk
An example:
config FOO
tristate
default mconfig 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 && !MODconfig TEST9
tristate
default m && !mWith 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 setCONFIG_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 SeedHi,
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" ofDocumentation/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
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" ofDocumentation/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