complete e390f9a port for v4.9.106
authorPhilip Müller <philm@manjaro.org>
Sat, 9 Jun 2018 11:42:05 +0000 (13:42 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 13 Jun 2018 14:16:44 +0000 (16:16 +0200)
objtool ports introduced in v4.9.106 were not totally complete. Therefore
they resulted in issues like:

  module: overflow in relocation type 10 val XXXXXXXXXXX
  ‘usbcore’ likely not compiled with -mcmodel=kernel
  module: overflow in relocation type 10 val XXXXXXXXXXX
  ‘scsi_mod’ likely not compiled with -mcmodel=kernel

Missing part was the complete backport of commit e390f9a.

Original notes by Josh Poimboeuf:

The '__unreachable' and '__func_stack_frame_non_standard' sections are
only used at compile time.  They're discarded for vmlinux but they
should also be discarded for modules.

Since this is a recurring pattern, prefix the section names with
".discard.".  It's a nice convention and vmlinux.lds.h already discards
such sections.

Also remove the 'a' (allocatable) flag from the __unreachable section
since it doesn't make sense for a discarded section.

Signed-off-by: Philip Müller <philm@manjaro.org>
Fixes: d1091c7fa3d5 ("objtool: Improve detection of BUG() and other dead ends")
Link: https://gitlab.manjaro.org/packages/core/linux49/issues/2
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
arch/x86/kernel/vmlinux.lds.S
include/linux/compiler-gcc.h

index 4ef267f..e783a5d 100644 (file)
@@ -352,8 +352,6 @@ SECTIONS
        DISCARDS
        /DISCARD/ : {
                *(.eh_frame)
-               *(__func_stack_frame_non_standard)
-               *(__unreachable)
        }
 }
 
index 2214b2f..ad793c6 100644 (file)
 #ifdef CONFIG_STACK_VALIDATION
 #define annotate_unreachable() ({                                      \
        asm("1:\t\n"                                                    \
-           ".pushsection __unreachable, \"a\"\t\n"                     \
+           ".pushsection .discard.unreachable\t\n"                     \
            ".long 1b\t\n"                                              \
            ".popsection\t\n");                                         \
 })