1. 15 3月, 2022 1 次提交
  2. 09 12月, 2021 1 次提交
  3. 06 3月, 2021 3 次提交
  4. 24 2月, 2021 3 次提交
  5. 14 1月, 2021 1 次提交
    • V
      objtool: Rework header include paths · 7786032e
      Vasily Gorbik 提交于
      Currently objtool headers are being included either by their base name
      or included via ../ from a parent directory. In case of a base name usage:
      
       #include "warn.h"
       #include "arch_elf.h"
      
      it does not make it apparent from which directory the file comes from.
      To make it slightly better, and actually to avoid name clashes some arch
      specific files have "arch_" suffix. And files from an arch folder have
      to revert to including via ../ e.g:
       #include "../../elf.h"
      
      With additional architectures support and the code base growth there is
      a need for clearer headers naming scheme for multiple reasons:
      1. to make it instantly obvious where these files come from (objtool
         itself / objtool arch|generic folders / some other external files),
      2. to avoid name clashes of objtool arch specific headers, potential
         obtool arch generic headers and the system header files (there is
         /usr/include/elf.h already),
      3. to avoid ../ includes and improve code readability.
      4. to give a warm fuzzy feeling to developers who are mostly kernel
         developers and are accustomed to linux kernel headers arranging
         scheme.
      
      Doesn't this make it instantly obvious where are these files come from?
      
       #include <objtool/warn.h>
       #include <arch/elf.h>
      
      And doesn't it look nicer to avoid ugly ../ includes? Which also
      guarantees this is elf.h from the objtool and not /usr/include/elf.h.
      
       #include <objtool/elf.h>
      
      This patch defines and implements new objtool headers arranging
      scheme. Which is:
      - all generic headers go to include/objtool (similar to include/linux)
      - all arch headers go to arch/$(SRCARCH)/include/arch (to get arch
        prefix). This is similar to linux arch specific "asm/*" headers but we
        are not abusing "asm" name and calling it what it is. This also helps
        to prevent name clashes (arch is not used in system headers or kernel
        exports).
      
      To bring objtool to this state the following things are done:
      1. current top level tools/objtool/ headers are moved into
         include/objtool/ subdirectory,
      2. arch specific headers, currently only arch/x86/include/ are moved into
         arch/x86/include/arch/ and were stripped of "arch_" suffix,
      3. new -I$(srctree)/tools/objtool/include include path to make
         includes like <objtool/warn.h> possible,
      4. rewriting file includes,
      5. make git not to ignore include/objtool/ subdirectory.
      Signed-off-by: NVasily Gorbik <gor@linux.ibm.com>
      Acked-by: NPeter Zijlstra (Intel) <peterz@infradead.org>
      Acked-by: NMasami Hiramatsu <mhiramat@kernel.org>
      Signed-off-by: NJosh Poimboeuf <jpoimboe@redhat.com>
      7786032e
  6. 02 9月, 2020 2 次提交
  7. 20 5月, 2020 1 次提交
    • M
      objtool: Enable compilation of objtool for all architectures · 0decf1f8
      Matt Helsley 提交于
      Objtool currently only compiles for x86 architectures. This is
      fine as it presently does not support tooling for other
      architectures. However, we would like to be able to convert other
      kernel tools to run as objtool sub commands because they too
      process ELF object files. This will allow us to convert tools
      such as recordmcount to use objtool's ELF code.
      
      Since much of recordmcount's ELF code is copy-paste code to/from
      a variety of other kernel tools (look at modpost for example) this
      means that if we can convert recordmcount we can convert more.
      
      We define weak definitions for subcommand entry functions and other weak
      definitions for shared functions critical to building existing
      subcommands. These return 127 when the command is missing which signify
      tools that do not exist on all architectures.  In this case the "check"
      and "orc" tools do not exist on all architectures so we only add them
      for x86. Future changes adding support for "check", to arm64 for
      example, can then modify the SUBCMD_CHECK variable when building for
      arm64.
      
      Objtool is not currently wired in to KConfig to be built for other
      architectures because it's not needed for those architectures and
      there are no commands it supports other than those for x86. As more
      command support is enabled on various architectures the necessary
      KConfig changes can be made (e.g. adding "STACK_VALIDATION") to
      trigger building objtool.
      
      [ jpoimboe: remove aliases, add __weak macro, add error messages ]
      
      Cc: Julien Thierry <jthierry@redhat.com>
      Signed-off-by: NMatt Helsley <mhelsley@vmware.com>
      Signed-off-by: NJosh Poimboeuf <jpoimboe@redhat.com>
      0decf1f8
  8. 22 4月, 2020 1 次提交
  9. 26 3月, 2020 1 次提交
  10. 21 5月, 2019 1 次提交
    • T
      treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 13 · 1ccea77e
      Thomas Gleixner 提交于
      Based on 2 normalized pattern(s):
      
        this program is free software you can redistribute it and or modify
        it under the terms of the gnu general public license as published by
        the free software foundation either version 2 of the license or at
        your option any later version this program is distributed in the
        hope that it will be useful but without any warranty without even
        the implied warranty of merchantability or fitness for a particular
        purpose see the gnu general public license for more details you
        should have received a copy of the gnu general public license along
        with this program if not see http www gnu org licenses
      
        this program is free software you can redistribute it and or modify
        it under the terms of the gnu general public license as published by
        the free software foundation either version 2 of the license or at
        your option any later version this program is distributed in the
        hope that it will be useful but without any warranty without even
        the implied warranty of merchantability or fitness for a particular
        purpose see the gnu general public license for more details [based]
        [from] [clk] [highbank] [c] you should have received a copy of the
        gnu general public license along with this program if not see http
        www gnu org licenses
      
      extracted by the scancode license scanner the SPDX license identifier
      
        GPL-2.0-or-later
      
      has been chosen to replace the boilerplate/reference in 355 file(s).
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      Reviewed-by: NKate Stewart <kstewart@linuxfoundation.org>
      Reviewed-by: NJilayne Lovejoy <opensource@jilayne.com>
      Reviewed-by: NSteve Winslow <swinslow@gmail.com>
      Reviewed-by: NAllison Randal <allison@lohutok.net>
      Cc: linux-spdx@vger.kernel.org
      Link: https://lkml.kernel.org/r/20190519154041.837383322@linutronix.deSigned-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      1ccea77e
  11. 03 4月, 2019 2 次提交
    • P
      objtool: Add UACCESS validation · ea24213d
      Peter Zijlstra 提交于
      It is important that UACCESS regions are as small as possible;
      furthermore the UACCESS state is not scheduled, so doing anything that
      might directly call into the scheduler will cause random code to be
      ran with UACCESS enabled.
      
      Teach objtool too track UACCESS state and warn about any CALL made
      while UACCESS is enabled. This very much includes the __fentry__()
      and __preempt_schedule() calls.
      
      Note that exceptions _do_ save/restore the UACCESS state, and therefore
      they can drive preemption. This also means that all exception handlers
      must have an otherwise redundant UACCESS disable instruction;
      therefore ignore this warning for !STT_FUNC code (exception handlers
      are not normal functions).
      Signed-off-by: NPeter Zijlstra (Intel) <peterz@infradead.org>
      Acked-by: NJosh Poimboeuf <jpoimboe@redhat.com>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Signed-off-by: NIngo Molnar <mingo@kernel.org>
      ea24213d
    • P
      objtool: Add --backtrace support · 7697eee3
      Peter Zijlstra 提交于
      For when you want to know the path that reached your fail state:
      
        $ ./objtool check --no-fp --backtrace arch/x86/lib/usercopy_64.o
        arch/x86/lib/usercopy_64.o: warning: objtool: .altinstr_replacement+0x3: UACCESS disable without MEMOPs: __clear_user()
        arch/x86/lib/usercopy_64.o: warning: objtool:   __clear_user()+0x3a: (alt)
        arch/x86/lib/usercopy_64.o: warning: objtool:   __clear_user()+0x2e: (branch)
        arch/x86/lib/usercopy_64.o: warning: objtool:   __clear_user()+0x18: (branch)
        arch/x86/lib/usercopy_64.o: warning: objtool:   .altinstr_replacement+0xffffffffffffffff: (branch)
        arch/x86/lib/usercopy_64.o: warning: objtool:   __clear_user()+0x5: (alt)
        arch/x86/lib/usercopy_64.o: warning: objtool:   __clear_user()+0x0: <=== (func)
      
        0000000000000000 <__clear_user>:
          0:   e8 00 00 00 00          callq  5 <__clear_user+0x5>
                       1: R_X86_64_PLT32       __fentry__-0x4
          5:   90                      nop
          6:   90                      nop
          7:   90                      nop
          8:   48 89 f0                mov    %rsi,%rax
          b:   48 c1 ee 03             shr    $0x3,%rsi
          f:   83 e0 07                and    $0x7,%eax
         12:   48 89 f1                mov    %rsi,%rcx
         15:   48 85 c9                test   %rcx,%rcx
         18:   74 0f                   je     29 <__clear_user+0x29>
         1a:   48 c7 07 00 00 00 00    movq   $0x0,(%rdi)
         21:   48 83 c7 08             add    $0x8,%rdi
         25:   ff c9                   dec    %ecx
         27:   75 f1                   jne    1a <__clear_user+0x1a>
         29:   48 89 c1                mov    %rax,%rcx
         2c:   85 c9                   test   %ecx,%ecx
         2e:   74 0a                   je     3a <__clear_user+0x3a>
         30:   c6 07 00                movb   $0x0,(%rdi)
         33:   48 ff c7                inc    %rdi
         36:   ff c9                   dec    %ecx
         38:   75 f6                   jne    30 <__clear_user+0x30>
         3a:   90                      nop
         3b:   90                      nop
         3c:   90                      nop
         3d:   48 89 c8                mov    %rcx,%rax
         40:   c3                      retq
      Signed-off-by: NPeter Zijlstra (Intel) <peterz@infradead.org>
      Acked-by: NJosh Poimboeuf <jpoimboe@redhat.com>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Signed-off-by: NIngo Molnar <mingo@kernel.org>
      7697eee3
  12. 21 2月, 2018 3 次提交
  13. 25 7月, 2017 1 次提交
  14. 18 7月, 2017 1 次提交
    • J
      objtool: Add ORC unwind table generation · 627fce14
      Josh Poimboeuf 提交于
      Now that objtool knows the states of all registers on the stack for each
      instruction, it's straightforward to generate debuginfo for an unwinder
      to use.
      
      Instead of generating DWARF, generate a new format called ORC, which is
      more suitable for an in-kernel unwinder.  See
      Documentation/x86/orc-unwinder.txt for a more detailed description of
      this new debuginfo format and why it's preferable to DWARF.
      Signed-off-by: NJosh Poimboeuf <jpoimboe@redhat.com>
      Cc: Andy Lutomirski <luto@kernel.org>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: Brian Gerst <brgerst@gmail.com>
      Cc: Denys Vlasenko <dvlasenk@redhat.com>
      Cc: H. Peter Anvin <hpa@zytor.com>
      Cc: Jiri Slaby <jslaby@suse.cz>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: live-patching@vger.kernel.org
      Link: http://lkml.kernel.org/r/c9b9f01ba6c5ed2bdc9bb0957b78167fdbf9632e.1499786555.git.jpoimboe@redhat.comSigned-off-by: NIngo Molnar <mingo@kernel.org>
      627fce14
  15. 30 6月, 2017 1 次提交
  16. 16 6月, 2017 1 次提交
  17. 20 4月, 2017 1 次提交
  18. 07 3月, 2017 1 次提交
    • J
      objtool: Fix another GCC jump table detection issue · 5c51f4ae
      Josh Poimboeuf 提交于
      Arnd Bergmann reported a (false positive) objtool warning:
      
        drivers/infiniband/sw/rxe/rxe_resp.o: warning: objtool: rxe_responder()+0xfe: sibling call from callable instruction with changed frame pointer
      
      The issue is in find_switch_table().  It tries to find a switch
      statement's jump table by walking backwards from an indirect jump
      instruction, looking for a relocation to the .rodata section.  In this
      case it stopped walking prematurely: the first .rodata relocation it
      encountered was for a variable (resp_state_name) instead of a jump
      table, so it just assumed there wasn't a jump table.
      
      The fix is to ignore any .rodata relocation which refers to an ELF
      object symbol.  This works because the jump tables are anonymous and
      have no symbols associated with them.
      Reported-by: NArnd Bergmann <arnd@arndb.de>
      Tested-by: NArnd Bergmann <arnd@arndb.de>
      Signed-off-by: NJosh Poimboeuf <jpoimboe@redhat.com>
      Cc: Denys Vlasenko <dvlasenk@redhat.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Fixes: 3732710f ("objtool: Improve rare switch jump table pattern detection")
      Link: http://lkml.kernel.org/r/20170302225723.3ndbsnl4hkqbne7a@trebleSigned-off-by: NIngo Molnar <mingo@kernel.org>
      5c51f4ae
  19. 02 3月, 2017 1 次提交
  20. 24 2月, 2017 1 次提交
    • J
      objtool: Improve detection of BUG() and other dead ends · d1091c7f
      Josh Poimboeuf 提交于
      The BUG() macro's use of __builtin_unreachable() via the unreachable()
      macro tells gcc that the instruction is a dead end, and that it's safe
      to assume the current code path will not execute past the previous
      instruction.
      
      On x86, the BUG() macro is implemented with the 'ud2' instruction.  When
      objtool's branch analysis sees that instruction, it knows the current
      code path has come to a dead end.
      
      Peter Zijlstra has been working on a patch to change the WARN macros to
      use 'ud2'.  That patch will break objtool's assumption that 'ud2' is
      always a dead end.
      
      Generally it's best for objtool to avoid making those kinds of
      assumptions anyway.  The more ignorant it is of kernel code internals,
      the better.
      
      So create a more generic way for objtool to detect dead ends by adding
      an annotation to the unreachable() macro.  The annotation stores a
      pointer to the end of the unreachable code path in an '__unreachable'
      section.  Objtool can read that section to find the dead ends.
      Tested-by: NPeter Zijlstra (Intel) <peterz@infradead.org>
      Signed-off-by: NJosh Poimboeuf <jpoimboe@redhat.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Link: http://lkml.kernel.org/r/41a6d33971462ebd944a1c60ad4bf5be86c17b77.1487712920.git.jpoimboe@redhat.comSigned-off-by: NIngo Molnar <mingo@kernel.org>
      d1091c7f
  21. 27 10月, 2016 1 次提交
  22. 16 10月, 2016 2 次提交
    • J
      objtool: Skip all "unreachable instruction" warnings for gcov kernels · 9cfffb11
      Josh Poimboeuf 提交于
      Recently objtool has started reporting a few "unreachable instruction"
      warnings when CONFIG_GCOV is enabled for newer versions of GCC.  Usually
      this warning means there's some new control flow that objtool doesn't
      understand.  But in this case, objtool is correct and the instructions
      really are inaccessible.  It's an annoying quirk of gcov, but it's
      harmless, so it's ok to just silence the warnings.
      
      With older versions of GCC, it was relatively easy to detect
      gcov-specific instructions and to skip any unreachable warnings produced
      by them.  But GCC 6 has gotten craftier.
      
      Instead of continuing to play whack-a-mole with gcov, just use a bigger,
      more permanent hammer and disable unreachable warnings for the whole
      file when gcov is enabled.  This is fine to do because a) unreachable
      warnings are usually of questionable value; and b) gcov isn't used for
      production kernels and we can relax the checks a bit there.
      Reported-by: Nkbuild test robot <fengguang.wu@intel.com>
      Signed-off-by: NJosh Poimboeuf <jpoimboe@redhat.com>
      Cc: Andy Lutomirski <luto@kernel.org>
      Cc: Arnd Bergmann <arnd@arndb.de>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: Brian Gerst <brgerst@gmail.com>
      Cc: Denys Vlasenko <dvlasenk@redhat.com>
      Cc: H. Peter Anvin <hpa@zytor.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Link: http://lkml.kernel.org/r/38d5c87d61d9cd46486dd2c86f46603dff0df86f.1476393584.git.jpoimboe@redhat.comSigned-off-by: NIngo Molnar <mingo@kernel.org>
      9cfffb11
    • J
      objtool: Improve rare switch jump table pattern detection · 3732710f
      Josh Poimboeuf 提交于
      GCC 6 added a new switch statement jump table optimization which makes
      objtool's life harder.  It looks like:
      
        mov [rodata addr],%reg1
        ... some instructions ...
        jmpq *(%reg1,%reg2,8)
      
      The optimization is quite rare, but objtool still needs to be able to
      identify the pattern so that it can follow all possible control flow
      paths related to the switch statement.
      
      In order to detect the pattern, objtool starts from the indirect jump
      and scans backwards through the function until it finds the first
      instruction in the pattern.  If it encounters an unconditional jump
      along the way, it stops and considers the pattern to be not found.
      
      As it turns out, unconditional jumps can happen, as long as they are
      small forward jumps within the range being scanned.
      
      This fixes the following warnings:
      
        drivers/infiniband/sw/rxe/rxe_comp.o: warning: objtool: rxe_completer()+0x2f4: sibling call from callable instruction with changed frame pointer
        drivers/infiniband/sw/rxe/rxe_resp.o: warning: objtool: rxe_responder()+0x10f: sibling call from callable instruction with changed frame pointer
      Reported-by: NArnd Bergmann <arnd@arndb.de>
      Signed-off-by: NJosh Poimboeuf <jpoimboe@redhat.com>
      Cc: Andy Lutomirski <luto@kernel.org>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: Brian Gerst <brgerst@gmail.com>
      Cc: Denys Vlasenko <dvlasenk@redhat.com>
      Cc: H. Peter Anvin <hpa@zytor.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Link: http://lkml.kernel.org/r/8a9ed68ae1780e8d3963e4ee13f2f257fe3a3c33.1476393584.git.jpoimboe@redhat.comSigned-off-by: NIngo Molnar <mingo@kernel.org>
      3732710f
  23. 23 9月, 2016 1 次提交
  24. 29 7月, 2016 1 次提交
    • J
      objtool: Support new GCC 6 switch jump table pattern · 6d01f28b
      Josh Poimboeuf 提交于
      This fixes some false positive objtool warnings seen with gcc 6.1.1:
      
        kernel/trace/ring_buffer.o: warning: objtool: ring_buffer_read_page()+0x36c: sibling call from callable instruction with changed frame pointer
        arch/x86/kernel/reboot.o: warning: objtool: native_machine_emergency_restart()+0x139: sibling call from callable instruction with changed frame pointer
        lib/xz/xz_dec_stream.o: warning: objtool: xz_dec_run()+0xc2: sibling call from callable instruction with changed frame pointer
      
      With GCC 6, a new code pattern is sometimes used to access a switch
      statement jump table in .rodata, which objtool doesn't yet recognize:
      
        mov [rodata addr],%reg1
        ... some instructions ...
        jmpq *(%reg1,%reg2,8)
      
      Add support for detecting that pattern.  The detection code is rather
      crude, but it's still effective at weeding out false positives and
      catching real warnings.  It can be refined later once objtool starts
      reading DWARF CFI.
      Reported-by: NLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: NJosh Poimboeuf <jpoimboe@redhat.com>
      Cc: Andy Lutomirski <luto@kernel.org>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: Brian Gerst <brgerst@gmail.com>
      Cc: Denys Vlasenko <dvlasenk@redhat.com>
      Cc: H. Peter Anvin <hpa@zytor.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Link: http://lkml.kernel.org/r/b8c9503b4ad8c8a827cc5400db4c1b40a3ea07bc.1469751119.git.jpoimboe@redhat.comSigned-off-by: NIngo Molnar <mingo@kernel.org>
      6d01f28b
  25. 16 7月, 2016 1 次提交
    • A
      objtool: Initialize variable to silence old compiler · b49364f3
      Arnaldo Carvalho de Melo 提交于
      gcc version 4.1.2 20080704 (Red Hat 4.1.2-55) barfs with:
      
          CC       /tmp/build/objtool/builtin-check.o
        cc1: warnings being treated as errors
        builtin-check.c: In function 'cmd_check':
        builtin-check.c:667: warning: 'prev_rela' may be used uninitialized in this function
        mv: cannot stat `/tmp/build/objtool/.builtin-check.o.tmp': No such file or directory
        make[1]: *** [/tmp/build/objtool/builtin-check.o] Error 1
      
      Init it to NULL to silence it.
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Josh Poimboeuf <jpoimboe@redhat.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Wang Nan <wangnan0@huawei.com>
      Link: http://lkml.kernel.org/n/tip-qolo31rl2ojlwj1lj9dhemyz@git.kernel.orgSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      b49364f3
  26. 13 7月, 2016 1 次提交
  27. 10 7月, 2016 1 次提交
  28. 16 4月, 2016 1 次提交
    • J
      objtool: Detect falling through to the next function · b1547d31
      Josh Poimboeuf 提交于
      There are several cases in compiled C code where a function may not
      return at the end, and may instead fall through to the next function.
      
      That may indicate a bug in the code, or a gcc bug, or even an objtool
      bug.  But in each case, objtool reports an unhelpful warning, something
      like:
      
        drivers/scsi/qla2xxx/qla_attr.o: warning: objtool: qla2x00_get_fc_host_stats()+0x0: duplicate frame pointer save
        drivers/scsi/qla2xxx/qla_attr.o: warning: objtool: qla2x00_get_fc_host_stats()+0x0: frame pointer state mismatch
      
      Detect this situation and print a more useful error message:
      
        drivers/scsi/qla2xxx/qla_attr.o: warning: objtool: qla2x00_get_host_fabric_name() falls through to next function qla2x00_get_starget_node_name()
      
      Also add some information about this warning and its potential causes to
      the documentation.
      Reported-by: Nkbuild test robot <fengguang.wu@intel.com>
      Signed-off-by: NJosh Poimboeuf <jpoimboe@redhat.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andy Lutomirski <luto@amacapital.net>
      Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: Brian Gerst <brgerst@gmail.com>
      Cc: Denys Vlasenko <dvlasenk@redhat.com>
      Cc: H. Peter Anvin <hpa@zytor.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Link: http://lkml.kernel.org/r/caa4ec6c687931db805e692d4e4bf06cd87d33e6.1460729697.git.jpoimboe@redhat.comSigned-off-by: NIngo Molnar <mingo@kernel.org>
      b1547d31
  29. 15 4月, 2016 1 次提交
  30. 09 3月, 2016 2 次提交
    • J
      objtool: Only print one warning per function · 1bcb58a0
      Josh Poimboeuf 提交于
      When objtool discovers an issue, it's very common for it to flood the
      terminal with a lot of duplicate warnings.  For example:
      
        warning: objtool: rtlwifi_rate_mapping()+0x2e7: frame pointer state mismatch
        warning: objtool: rtlwifi_rate_mapping()+0x2f3: frame pointer state mismatch
        warning: objtool: rtlwifi_rate_mapping()+0x2ff: frame pointer state mismatch
        warning: objtool: rtlwifi_rate_mapping()+0x30b: frame pointer state mismatch
        ...
      
      The first warning is usually all you need.  Change it to only warn once
      per function.
      Suggested-by: NIngo Molnar <mingo@kernel.org>
      Signed-off-by: NJosh Poimboeuf <jpoimboe@redhat.com>
      Cc: Andrew Morton <akpm@linux-foundation.org>
      Cc: Andy Lutomirski <luto@kernel.org>
      Cc: Arnaldo Carvalho de Melo <acme@infradead.org>
      Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
      Cc: Bernd Petrovitsch <bernd@petrovitsch.priv.at>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: Chris J Arges <chris.j.arges@canonical.com>
      Cc: Jiri Slaby <jslaby@suse.cz>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Michal Marek <mmarek@suse.cz>
      Cc: Namhyung Kim <namhyung@gmail.com>
      Cc: Pedro Alves <palves@redhat.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: live-patching@vger.kernel.org
      Link: http://lkml.kernel.org/r/c47f3ca38aa01e2a9b6601f9e38efd414c3f3c18.1457502970.git.jpoimboe@redhat.comSigned-off-by: NIngo Molnar <mingo@kernel.org>
      1bcb58a0
    • J
      objtool: Add several performance improvements · 042ba73f
      Josh Poimboeuf 提交于
      Use hash tables for instruction and rela lookups (and keep the linked
      lists around for sequential access).
      
      Also cache the section struct for the "__func_stack_frame_non_standard"
      section.
      
      With this change, "objtool check net/wireless/nl80211.o" goes from:
      
        real	0m1.168s
        user	0m1.163s
        sys	0m0.005s
      
      to:
      
        real	0m0.059s
        user	0m0.042s
        sys	0m0.017s
      
      for a 20x speedup.
      
      With the same object, it should be noted that the memory heap usage grew
      from 8MB to 62MB.  Reducing the memory usage is on the TODO list.
      Reported-by: NIngo Molnar <mingo@kernel.org>
      Signed-off-by: NJosh Poimboeuf <jpoimboe@redhat.com>
      Cc: Andrew Morton <akpm@linux-foundation.org>
      Cc: Andy Lutomirski <luto@kernel.org>
      Cc: Arnaldo Carvalho de Melo <acme@infradead.org>
      Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
      Cc: Bernd Petrovitsch <bernd@petrovitsch.priv.at>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: Chris J Arges <chris.j.arges@canonical.com>
      Cc: Jiri Slaby <jslaby@suse.cz>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Michal Marek <mmarek@suse.cz>
      Cc: Namhyung Kim <namhyung@gmail.com>
      Cc: Pedro Alves <palves@redhat.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: live-patching@vger.kernel.org
      Link: http://lkml.kernel.org/r/dd0d8e1449506cfa7701b4e7ba73577077c44253.1457502970.git.jpoimboe@redhat.comSigned-off-by: NIngo Molnar <mingo@kernel.org>
      042ba73f