• Vasily Gorbik's avatar
    objtool: Rework header include paths · 7786032e
    Vasily Gorbik authored
    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: default avatarVasily Gorbik <gor@linux.ibm.com>
    Acked-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Acked-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
    Signed-off-by: default avatarJosh Poimboeuf <jpoimboe@redhat.com>
    7786032e
objtool.c 3.05 KB