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
This commit is contained in:
11
Makefile
11
Makefile
@@ -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
|
|||||||
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
|
|||||||
$(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
|
|||||||
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)
|
|||||||
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);
|
|
||||||
if (prop)
|
|
||||||
newval.tri = expr_calc_value(prop->expr);
|
|
||||||
}
|
|
||||||
newval.tri = EXPR_OR(EXPR_AND(newval.tri, sym->visible), sym->rev_dep.tri);
|
|
||||||
} 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_has_value(sym)) {
|
||||||
|
newval.tri = EXPR_AND(sym->def[S_DEF_USER].tri,
|
||||||
|
sym->visible);
|
||||||
|
goto calc_newval;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
if (sym->rev_dep.tri != no)
|
||||||
|
sym->flags |= SYMBOL_WRITE;
|
||||||
|
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;
|
||||||
|
Reference in New Issue
Block a user