Christoph Hellwig <hch@xxxxxx> writes: > On Wed, Jul 18, 2018 at 12:06:26AM -0700, Randy Dunlap wrote: >> All $ARCH look equivalent except for microblaze and nios2. >> For those, the config SWAP in init/Kconfig (line 221) comes before (and >> hence takes precedence) over arch/$(SRCARCH)/Kconfig settings, which is >> def_bool n for both microblaze and nios2. > > Both of those are NOMMU architectures, so the default SWAP > decaration should do the right thing. > > I wish the kconfig tools could warn about duplicate symbols, as they > are basically always bogus or at least very problematic. Your wish is our command ;-) A big but: duplicate symbol definitions are explicitely allowed by the kconfig language, so you find most of those duplicates are actually just varying dependencies or default values. At least, it is interesting to see how "duplicate" symbol definitions are used and perhaps this helps you with your reordering. This is just a prototype, that hopefully helps with your current task, so I did not pay too much attention to make it beautiful. Please let me know if anything is missing. Anyway, apply the patch and then invoke "make symcheckconfig" at the top-level directory. Dirk > I've update the kconfig-cleanup branch in git with the fixes, but > I didn't have time to do anything but a trivial x86 test yet. > -- > 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
diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile index a3ac2c91331c..52a0ee0637e9 100644 --- a/scripts/kconfig/Makefile +++ b/scripts/kconfig/Makefile @@ -222,3 +222,8 @@ $(obj)/.%conf-cfg: $(src)/%conf-cfg.sh FORCE $(call filechk,conf_cfg) clean-files += .*conf-cfg + +PHONY += symcheckconfig + +symcheckconfig: $(obj)/conf + $< $(silent) --$@ $(Kconfig) diff --git a/scripts/kconfig/conf.c b/scripts/kconfig/conf.c index 671ff5364497..1083ddcdd05e 100644 --- a/scripts/kconfig/conf.c +++ b/scripts/kconfig/conf.c @@ -33,6 +33,7 @@ enum input_mode { savedefconfig, listnewconfig, olddefconfig, + symcheckconfig, }; static enum input_mode input_mode = oldaskconfig; @@ -466,6 +467,7 @@ static struct option long_opts[] = { * value but not 'n') with the counter-intuitive name. */ {"oldnoconfig", no_argument, NULL, olddefconfig}, + {"symcheckconfig", no_argument, NULL, symcheckconfig}, {NULL, 0, NULL, 0} }; @@ -490,6 +492,31 @@ static void conf_usage(const char *progname) printf(" --randconfig New config with random answer to all options\n"); } +static void find_sym_dups(void) +{ + struct symbol *sym; + struct property *prop; + int i; + int cnt = 0; + char *file; + int lineno; + + for_all_symbols(i, sym) { + for_all_properties(sym, prop, P_SYMBOL) { + if (cnt == 1) { + printf("Duplicate symbol %s\n\t(%s:%d):\n", sym->name, file, lineno); + } + if (cnt) + printf("\t(%s:%d)\n", prop->file->name, prop->lineno); + + cnt += 1; + file = (char *)prop->file->name; + lineno = prop->lineno; + } + cnt = 0; + } +} + int main(int ac, char **av) { const char *progname = av[0]; @@ -560,6 +587,12 @@ int main(int ac, char **av) } name = av[optind]; conf_parse(name); + + if (input_mode == symcheckconfig) { + find_sym_dups(); + exit(0); + } + //zconfdump(stdout); if (sync_kconfig) { name = conf_get_configname();