1. 28 Feb, 2017 1 commit
  2. 25 Feb, 2017 1 commit
    • Josh Poimboeuf's avatar
      objtool: Prevent GCC from merging annotate_unreachable() · 3d1e2360
      Josh Poimboeuf authored
      0-day bot reported some new objtool warnings which were caused by the
      new annotate_unreachable() macro:
      
        fs/afs/flock.o: warning: objtool: afs_do_unlk()+0x0: duplicate frame pointer save
        fs/afs/flock.o: warning: objtool: afs_do_unlk()+0x0: frame pointer state mismatch
        fs/btrfs/delayed-inode.o: warning: objtool: btrfs_delete_delayed_dir_index()+0x0: duplicate frame pointer save
        fs/btrfs/delayed-inode.o: warning: objtool: btrfs_delete_delayed_dir_index()+0x0: frame pointer state mismatch
        fs/dlm/lock.o: warning: objtool: _grant_lock()+0x0: duplicate frame pointer save
        fs/dlm/lock.o: warning: objtool: _grant_lock()+0x0: frame pointer state mismatch
        fs/ocfs2/alloc.o: warning: objtool: ocfs2_mv_path()+0x0: duplicate frame pointer save
        fs/ocfs2/alloc.o: warning: objtool: ocfs2_mv_path()+0x0: frame pointer state mismatch
      
      It turns out that, for older versions of GCC, if a function has multiple
      BUG() incantations, GCC will sometimes merge the corresponding
      annotate_unreachable() inline asm statements into a single block.  That
      has the undesirable effect of removing one of the entries in the
      __unreachable section, confusing objtool greatly.
      
      A workaround for this issue is to ensure that each instance of the
      inline asm statement uses a different label, so that GCC sees the
      statements are unique and leaves them alone.  The inline asm ‘%=’ token
      could be used for that, but unfortunately older versions of GCC don't
      support it.  So I implemented a poor man's version of it with the
      __LINE__ macro.
      Reported-by: default avatarkbuild test robot <fengguang.wu@intel.com>
      Signed-off-by: default avatarJosh Poimboeuf <jpoimboe@redhat.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Fixes: d1091c7f ("objtool: Improve detection of BUG() and other dead ends")
      Link: http://lkml.kernel.org/r/0c14b00baf9f68d1b0221ddb6c88b925181c8be8.1487997036.git.jpoimboe@redhat.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
      3d1e2360
  3. 24 Feb, 2017 1 commit
    • Josh Poimboeuf's avatar
      objtool: Improve detection of BUG() and other dead ends · d1091c7f
      Josh Poimboeuf authored
      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: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
      Signed-off-by: default avatarJosh 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: default avatarIngo Molnar <mingo@kernel.org>
      d1091c7f
  4. 20 Feb, 2017 1 commit
  5. 19 Feb, 2017 11 commits
  6. 18 Feb, 2017 1 commit
  7. 17 Feb, 2017 19 commits
  8. 16 Feb, 2017 5 commits