Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 230b548c authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* 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
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -507,6 +507,10 @@ else
KBUILD_CFLAGS	+= -O2
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

ifdef CONFIG_FRAME_POINTER
@@ -525,9 +529,6 @@ ifdef CONFIG_DEBUG_SECTION_MISMATCH
KBUILD_CFLAGS += $(call cc-option, -fno-inline-functions-called-once)
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
NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
CHECKFLAGS     += $(NOSTDINC_FLAGS)
@@ -810,7 +811,9 @@ endif
	$(Q)rm -f .old_version

# 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
	$(call if_changed_rule,vmlinux-modpost)

+3 −0
Original line number Diff line number Diff line
@@ -82,6 +82,9 @@ config HEADERS_CHECK
config DEBUG_SECTION_MISMATCH
	bool "Enable full Section mismatch analysis"
	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
	  The section mismatch analysis checks if there are illegal
	  references from one section to another section.
+21 −13
Original line number Diff line number Diff line
@@ -298,22 +298,30 @@ void sym_calc_value(struct symbol *sym)
		if (sym_is_choice_value(sym) && sym->visible == yes) {
			prop = sym_get_choice_prop(sym);
			newval.tri = (prop_get_symbol(prop)->curr.val == sym) ? yes : no;
		} else if (EXPR_OR(sym->visible, sym->rev_dep.tri) != no) {
		} else {
			if (sym->visible != no) {
				/* if the symbol is visible use the user value
				 * if available, otherwise try the default value
				 */
				sym->flags |= SYMBOL_WRITE;
			if (sym_has_value(sym))
				newval.tri = sym->def[S_DEF_USER].tri;
			else if (!sym_is_choice(sym)) {
				prop = sym_get_default_prop(sym);
				if (prop)
					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;
				}
			}
			newval.tri = EXPR_OR(EXPR_AND(newval.tri, sym->visible), sym->rev_dep.tri);
		} else if (!sym_is_choice(sym)) {
			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_calc_value(prop->expr);
					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)
			newval.tri = yes;