olddefconfig silently drops symbols whose dependencies are unmet
scope: generic · severity: trap · confidence: proven · subsystem: kernel
You add a symbol to the defconfig. olddefconfig runs clean. The feature is
simply missing at runtime, with no error anywhere.
olddefconfig resolves unmet dependencies by dropping the symbol. It does not
tell you. The file is what you asked for; .output/.config is what you
got, and they are different documents.
# after any config change -- diff what you asked for against what you gotgrep -E '^CONFIG_(A|B|C)=' .output/.configKeep an explicit list of the symbols that must survive and grep for all of them after every config regeneration. On taimen this is a 13-symbol sanity grep in the build runbook, and it exists because a missing symbol cost a whole boot hunt.
Every config edit must exist in all of its copies, in the same commit. A defconfig in the tree and a config in the aport that drift apart produce a build that matches neither.
Related: shipped-configuration-is-not-running-configuration, a-null-from-an-unexecuted-path-is-not-a-refutation.
