diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c
index 4f83fbf..cfe6a83 100644
--- a/scripts/kconfig/confdata.c
+++ b/scripts/kconfig/confdata.c
@@ -84,6 +84,51 @@ char *conf_get_default_confname(void)
 	return name;
 }
 
+int conf_read_support_mask(const char *name)
+{
+	FILE *in;
+	char line[1024];
+	struct symbol *sym;
+	char *p, *p2;
+
+	in = zconf_fopen(name);
+	if (!in)
+		return 1;
+
+	conf_filename = name;
+	conf_lineno = 0;
+	conf_warnings = 0;
+	conf_unsaved = 0;
+
+	while (fgets(line, sizeof(line), in)) {
+		sym = NULL;
+		if (*line != 'C') {
+			if (*line != '\n' && *line != '#')
+				conf_warning("unexpected data");
+			continue;
+		}
+		if (memcmp(line, "CONFIG_", 7)) {
+			conf_warning("unexpected data");
+			continue;
+		}
+		p = strchr(line + 7, '=');
+		if (!p)
+			continue;
+		*p++ = 0;
+		p2 = strchr(p, '\n');
+		if (p2)
+			*p2 = 0;
+		sym = sym_find(line + 7);
+		if (!sym) {
+			conf_warning("trying to assign nonexistent symbol %s", line + 7);
+			break;
+		}
+		sym->flags |= SYMBOL_SUPPORTED;
+	}
+	fclose(in);
+	return 0;
+}
+
 int conf_read_simple(const char *name)
 {
 	FILE *in = NULL;
diff --git a/scripts/kconfig/expr.h b/scripts/kconfig/expr.h
index 1b36ef1..7ed7999 100644
--- a/scripts/kconfig/expr.h
+++ b/scripts/kconfig/expr.h
@@ -94,6 +94,7 @@ struct symbol {
 #define SYMBOL_AUTO		0x1000
 #define SYMBOL_CHECKED		0x2000
 #define SYMBOL_WARNED		0x8000
+#define SYMBOL_SUPPORTED       0x10000
 
 #define SYMBOL_MAXLENGTH	256
 #define SYMBOL_HASHSIZE		257
diff --git a/scripts/kconfig/lkc_proto.h b/scripts/kconfig/lkc_proto.h
index b6a389c..68441d8 100644
--- a/scripts/kconfig/lkc_proto.h
+++ b/scripts/kconfig/lkc_proto.h
@@ -2,6 +2,7 @@
 /* confdata.c */
 P(conf_parse,void,(const char *name));
 P(conf_read,int,(const char *name));
+P(conf_read_support_mask,int,(const char *name));
 P(conf_read_simple,int,(const char *name));
 P(conf_write,int,(const char *name));
 
diff --git a/scripts/kconfig/mconf.c b/scripts/kconfig/mconf.c
index 0c548bf..cc6f05e 100644
--- a/scripts/kconfig/mconf.c
+++ b/scripts/kconfig/mconf.c
@@ -267,6 +267,7 @@ static struct menu *current_menu;
 static int child_count;
 static int do_resize;
 static int single_menu_mode;
+static char *support_mask;
 
 static void conf(struct menu *menu);
 static void conf_choice(struct menu *menu);
@@ -556,6 +557,13 @@ again:
 	str_free(&res);
 }
 
+static const char *sym_extra_info(struct symbol *sym)
+{
+	if (support_mask && !(sym->flags & SYMBOL_SUPPORTED))
+		return " (BROKEN)";
+	return (sym_has_value(sym) || !sym_is_changable(sym)) ? "" : " (NEW)";
+}
+
 static void build_conf(struct menu *menu)
 {
 	struct symbol *sym;
@@ -688,15 +696,13 @@ static void build_conf(struct menu *menu)
 				if (tmp < 0)
 					tmp = 0;
 				cprint1("%*c%s%s", tmp, ' ', menu_get_prompt(menu),
-					(sym_has_value(sym) || !sym_is_changable(sym)) ?
-					"" : " (NEW)");
+					sym_extra_info(sym));
 				cprint_done();
 				goto conf_childs;
 			}
 		}
 		cprint1("%*c%s%s", indent + 1, ' ', menu_get_prompt(menu),
-			(sym_has_value(sym) || !sym_is_changable(sym)) ?
-			"" : " (NEW)");
+			sym_extra_info(sym));
 		if (menu->prompt->type == P_MENU) {
 			cprint1("  --->");
 			cprint_done();
@@ -1062,6 +1068,11 @@ int main(int ac, char **av)
 			single_menu_mode = 1;
 	}
 
+	support_mask = getenv("KCONFIG_SUPPORT");
+	if (support_mask && *support_mask)
+		if (conf_read_support_mask(support_mask))
+			support_mask = NULL;
+
 	tcgetattr(1, &ios_org);
 	atexit(conf_cleanup);
 	init_wsize();
