lkml.org 
[lkml]   [2018]   [Jan]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 81/96] objtool, modules: Discard objtool annotation sections for modules
    Date
    4.9-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Josh Poimboeuf <jpoimboe@redhat.com>

    commit e390f9a9689a42f477a6073e2e7df530a4c1b740 upstream.

    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.

    Suggested-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com>
    Cc: Jessica Yu <jeyu@redhat.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Fixes: d1091c7fa3d5 ("objtool: Improve detection of BUG() and other dead ends")
    Link: http://lkml.kernel.org/r/20170301180444.lhd53c5tibc4ns77@treble
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    [dwmw2: Remove the unreachable part in backporting since it's not here yet]
    Signed-off-by: David Woodhouse <dwmw@amazon.co.ku>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    include/linux/frame.h | 2 +-
    scripts/mod/modpost.c | 1 +
    scripts/module-common.lds | 5 ++++-
    tools/objtool/builtin-check.c | 2 +-
    4 files changed, 7 insertions(+), 3 deletions(-)

    --- a/include/linux/frame.h
    +++ b/include/linux/frame.h
    @@ -11,7 +11,7 @@
    * For more information, see tools/objtool/Documentation/stack-validation.txt.
    */
    #define STACK_FRAME_NON_STANDARD(func) \
    - static void __used __section(__func_stack_frame_non_standard) \
    + static void __used __section(.discard.func_stack_frame_non_standard) \
    *__func_stack_frame_non_standard_##func = func

    #else /* !CONFIG_STACK_VALIDATION */
    --- a/scripts/mod/modpost.c
    +++ b/scripts/mod/modpost.c
    @@ -838,6 +838,7 @@ static const char *const section_white_l
    ".cmem*", /* EZchip */
    ".fmt_slot*", /* EZchip */
    ".gnu.lto*",
    + ".discard.*",
    NULL
    };

    --- a/scripts/module-common.lds
    +++ b/scripts/module-common.lds
    @@ -4,7 +4,10 @@
    * combine them automatically.
    */
    SECTIONS {
    - /DISCARD/ : { *(.discard) }
    + /DISCARD/ : {
    + *(.discard)
    + *(.discard.*)
    + }

    __ksymtab 0 : { *(SORT(___ksymtab+*)) }
    __ksymtab_gpl 0 : { *(SORT(___ksymtab_gpl+*)) }
    --- a/tools/objtool/builtin-check.c
    +++ b/tools/objtool/builtin-check.c
    @@ -1229,7 +1229,7 @@ int cmd_check(int argc, const char **arg

    INIT_LIST_HEAD(&file.insn_list);
    hash_init(file.insn_hash);
    - file.whitelist = find_section_by_name(file.elf, "__func_stack_frame_non_standard");
    + file.whitelist = find_section_by_name(file.elf, ".discard.func_stack_frame_non_standard");
    file.rodata = find_section_by_name(file.elf, ".rodata");
    file.ignore_unreachables = false;
    file.c_file = find_section_by_name(file.elf, ".comment");

    \
     
     \ /
      Last update: 2018-01-15 14:35    [W:4.079 / U:0.160 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site