Commit 230b548c authored by Linus Torvalds's avatar Linus Torvalds

Merge git://git.kernel.org/pub/scm/linux/kernel/git/sam/kbuild

* git://git.kernel.org/pub/scm/linux/kernel/git/sam/kbuild:
  kbuild: explain why DEBUG_SECTION_MISMATCH is UNDEFINED
  kbuild: fix building vmlinux.o
  kbuild: allow -fstack-protector to take effect
  kconfig: fix select in combination with default
parents 1309d4e6 fa2144ba
...@@ -507,6 +507,10 @@ else ...@@ -507,6 +507,10 @@ else
KBUILD_CFLAGS += -O2 KBUILD_CFLAGS += -O2
endif endif
# Force gcc to behave correct even for buggy distributions
# Arch Makefiles may override this setting
KBUILD_CFLAGS += $(call cc-option, -fno-stack-protector)
include $(srctree)/arch/$(SRCARCH)/Makefile include $(srctree)/arch/$(SRCARCH)/Makefile
ifdef CONFIG_FRAME_POINTER ifdef CONFIG_FRAME_POINTER
...@@ -525,9 +529,6 @@ ifdef CONFIG_DEBUG_SECTION_MISMATCH ...@@ -525,9 +529,6 @@ ifdef CONFIG_DEBUG_SECTION_MISMATCH
KBUILD_CFLAGS += $(call cc-option, -fno-inline-functions-called-once) KBUILD_CFLAGS += $(call cc-option, -fno-inline-functions-called-once)
endif endif
# Force gcc to behave correct even for buggy distributions
KBUILD_CFLAGS += $(call cc-option, -fno-stack-protector)
# arch Makefile may override CC so keep this after arch Makefile is included # arch Makefile may override CC so keep this after arch Makefile is included
NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include) NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
CHECKFLAGS += $(NOSTDINC_FLAGS) CHECKFLAGS += $(NOSTDINC_FLAGS)
...@@ -810,7 +811,9 @@ endif ...@@ -810,7 +811,9 @@ endif
$(Q)rm -f .old_version $(Q)rm -f .old_version
# build vmlinux.o first to catch section mismatch errors early # build vmlinux.o first to catch section mismatch errors early
$(kallsyms.o): vmlinux.o ifdef CONFIG_KALLSYMS
.tmp_vmlinux1: vmlinux.o
endif
vmlinux.o: $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) FORCE vmlinux.o: $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) FORCE
$(call if_changed_rule,vmlinux-modpost) $(call if_changed_rule,vmlinux-modpost)
......
...@@ -82,6 +82,9 @@ config HEADERS_CHECK ...@@ -82,6 +82,9 @@ config HEADERS_CHECK
config DEBUG_SECTION_MISMATCH config DEBUG_SECTION_MISMATCH
bool "Enable full Section mismatch analysis" bool "Enable full Section mismatch analysis"
depends on UNDEFINED depends on UNDEFINED
# This option is on purpose disabled for now.
# It will be enabled when we are down to a resonable number
# of section mismatch warnings (< 10 for an allyesconfig build)
help help
The section mismatch analysis checks if there are illegal The section mismatch analysis checks if there are illegal
references from one section to another section. references from one section to another section.
......
...@@ -298,22 +298,30 @@ void sym_calc_value(struct symbol *sym) ...@@ -298,22 +298,30 @@ void sym_calc_value(struct symbol *sym)
if (sym_is_choice_value(sym) && sym->visible == yes) { if (sym_is_choice_value(sym) && sym->visible == yes) {
prop = sym_get_choice_prop(sym); prop = sym_get_choice_prop(sym);
newval.tri = (prop_get_symbol(prop)->curr.val == sym) ? yes : no; newval.tri = (prop_get_symbol(prop)->curr.val == sym) ? yes : no;
} else if (EXPR_OR(sym->visible, sym->rev_dep.tri) != no) { } else {
sym->flags |= SYMBOL_WRITE; if (sym->visible != no) {
if (sym_has_value(sym)) /* if the symbol is visible use the user value
newval.tri = sym->def[S_DEF_USER].tri; * if available, otherwise try the default value
else if (!sym_is_choice(sym)) { */
prop = sym_get_default_prop(sym); sym->flags |= SYMBOL_WRITE;
if (prop) if (sym_has_value(sym)) {
newval.tri = expr_calc_value(prop->expr); newval.tri = EXPR_AND(sym->def[S_DEF_USER].tri,
sym->visible);
goto calc_newval;
}
} }
newval.tri = EXPR_OR(EXPR_AND(newval.tri, sym->visible), sym->rev_dep.tri); if (sym->rev_dep.tri != no)
} else if (!sym_is_choice(sym)) {
prop = sym_get_default_prop(sym);
if (prop) {
sym->flags |= SYMBOL_WRITE; sym->flags |= SYMBOL_WRITE;
newval.tri = expr_calc_value(prop->expr); if (!sym_is_choice(sym)) {
prop = sym_get_default_prop(sym);
if (prop) {
sym->flags |= SYMBOL_WRITE;
newval.tri = EXPR_AND(expr_calc_value(prop->expr),
prop->visible.tri);
}
} }
calc_newval:
newval.tri = EXPR_OR(newval.tri, sym->rev_dep.tri);
} }
if (newval.tri == mod && sym_get_type(sym) == S_BOOLEAN) if (newval.tri == mod && sym_get_type(sym) == S_BOOLEAN)
newval.tri = yes; newval.tri = yes;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment