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

Commit e72e58fa authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge branch 'core-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull objtool fixes from Ingo Molnar:
 "A handful of objtool fixes related to unreachable code, plus a build
  fix for out of tree modules"

* 'core-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  objtool: Enclose contents of unreachable() macro in a block
  objtool: Prevent GCC from merging annotate_unreachable()
  objtool: Improve detection of BUG() and other dead ends
  objtool: Fix CONFIG_STACK_VALIDATION=y warning for out-of-tree modules
parents 74e3f63c 4e4636cf
Loading
Loading
Loading
Loading
+12 −12
Original line number Diff line number Diff line
@@ -910,6 +910,18 @@ mod_sign_cmd = true
endif
export mod_sign_cmd

ifdef CONFIG_STACK_VALIDATION
  has_libelf := $(call try-run,\
		echo "int main() {}" | $(HOSTCC) -xc -o /dev/null -lelf -,1,0)
  ifeq ($(has_libelf),1)
    objtool_target := tools/objtool FORCE
  else
    $(warning "Cannot use CONFIG_STACK_VALIDATION, please install libelf-dev, libelf-devel or elfutils-libelf-devel")
    SKIP_STACK_VALIDATION := 1
    export SKIP_STACK_VALIDATION
  endif
endif


ifeq ($(KBUILD_EXTMOD),)
core-y		+= kernel/ certs/ mm/ fs/ ipc/ security/ crypto/ block/
@@ -1037,18 +1049,6 @@ prepare0: archprepare gcc-plugins
# All the preparing..
prepare: prepare0 prepare-objtool

ifdef CONFIG_STACK_VALIDATION
  has_libelf := $(call try-run,\
		echo "int main() {}" | $(HOSTCC) -xc -o /dev/null -lelf -,1,0)
  ifeq ($(has_libelf),1)
    objtool_target := tools/objtool FORCE
  else
    $(warning "Cannot use CONFIG_STACK_VALIDATION, please install libelf-dev, libelf-devel or elfutils-libelf-devel")
    SKIP_STACK_VALIDATION := 1
    export SKIP_STACK_VALIDATION
  endif
endif

PHONY += prepare-objtool
prepare-objtool: $(objtool_target)

+1 −0
Original line number Diff line number Diff line
@@ -346,6 +346,7 @@ SECTIONS
	/DISCARD/ : {
		*(.eh_frame)
		*(__func_stack_frame_non_standard)
		*(__unreachable)
	}
}

+13 −1
Original line number Diff line number Diff line
@@ -197,6 +197,17 @@
#endif
#endif

#ifdef CONFIG_STACK_VALIDATION
#define annotate_unreachable() ({					\
	asm("%c0:\t\n"							\
	    ".pushsection __unreachable, \"a\"\t\n"			\
	    ".long %c0b\t\n"						\
	    ".popsection\t\n" : : "i" (__LINE__));			\
})
#else
#define annotate_unreachable()
#endif

/*
 * Mark a position in code as unreachable.  This can be used to
 * suppress control flow warnings after asm blocks that transfer
@@ -206,7 +217,8 @@
 * this in the preprocessor, but we can live with this because they're
 * unreleased.  Really, we need to have autoconf for the kernel.
 */
#define unreachable() __builtin_unreachable()
#define unreachable() \
	do { annotate_unreachable(); __builtin_unreachable(); } while (0)

/* Mark a function definition as prohibited from being cloned. */
#define __noclone	__attribute__((__noclone__, __optimize__("no-tracer")))
+2 −3
Original line number Diff line number Diff line
@@ -31,9 +31,8 @@
#define INSN_CALL_DYNAMIC	8
#define INSN_RETURN		9
#define INSN_CONTEXT_SWITCH	10
#define INSN_BUG		11
#define INSN_NOP		12
#define INSN_OTHER		13
#define INSN_NOP		11
#define INSN_OTHER		12
#define INSN_LAST		INSN_OTHER

int arch_decode_instruction(struct elf *elf, struct section *sec,
+0 −3
Original line number Diff line number Diff line
@@ -118,9 +118,6 @@ int arch_decode_instruction(struct elf *elf, struct section *sec,
			 op2 == 0x35)
			/* sysenter, sysret */
			*type = INSN_CONTEXT_SWITCH;
		else if (op2 == 0x0b || op2 == 0xb9)
			/* ud2 */
			*type = INSN_BUG;
		else if (op2 == 0x0d || op2 == 0x1f)
			/* nopl/nopw */
			*type = INSN_NOP;
Loading