]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
objtool: Rework header include paths
authorVasily Gorbik <gor@linux.ibm.com>
Thu, 12 Nov 2020 23:03:32 +0000 (00:03 +0100)
committerJosh Poimboeuf <jpoimboe@redhat.com>
Thu, 14 Jan 2021 00:13:14 +0000 (18:13 -0600)
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: Vasily Gorbik <gor@linux.ibm.com>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Acked-by: Masami Hiramatsu <mhiramat@kernel.org>
Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com>
26 files changed:
tools/objtool/.gitignore
tools/objtool/Makefile
tools/objtool/arch/x86/decode.c
tools/objtool/arch/x86/include/arch/cfi_regs.h [moved from tools/objtool/arch/x86/include/cfi_regs.h with 100% similarity]
tools/objtool/arch/x86/include/arch/elf.h [moved from tools/objtool/arch/x86/include/arch_elf.h with 100% similarity]
tools/objtool/arch/x86/include/arch/endianness.h [moved from tools/objtool/arch/x86/include/arch_endianness.h with 100% similarity]
tools/objtool/arch/x86/include/arch/special.h [moved from tools/objtool/arch/x86/include/arch_special.h with 100% similarity]
tools/objtool/arch/x86/special.c
tools/objtool/builtin-check.c
tools/objtool/builtin-orc.c
tools/objtool/check.c
tools/objtool/elf.c
tools/objtool/include/objtool/arch.h [moved from tools/objtool/arch.h with 96% similarity]
tools/objtool/include/objtool/builtin.h [moved from tools/objtool/builtin.h with 100% similarity]
tools/objtool/include/objtool/cfi.h [moved from tools/objtool/cfi.h with 96% similarity]
tools/objtool/include/objtool/check.h [moved from tools/objtool/check.h with 96% similarity]
tools/objtool/include/objtool/elf.h [moved from tools/objtool/elf.h with 100% similarity]
tools/objtool/include/objtool/endianness.h [moved from tools/objtool/endianness.h with 97% similarity]
tools/objtool/include/objtool/objtool.h [moved from tools/objtool/objtool.h with 96% similarity]
tools/objtool/include/objtool/special.h [moved from tools/objtool/special.h with 94% similarity]
tools/objtool/include/objtool/warn.h [moved from tools/objtool/warn.h with 98% similarity]
tools/objtool/objtool.c
tools/objtool/orc_dump.c
tools/objtool/orc_gen.c
tools/objtool/special.c
tools/objtool/weak.c

index 45cefda24c7b10afb874010349e877d304fe3c61..14236db3677f6355eef18e2662bfd19d6b9c5ec0 100644 (file)
@@ -1,4 +1,4 @@
 # SPDX-License-Identifier: GPL-2.0-only
 arch/x86/lib/inat-tables.c
-objtool
+/objtool
 fixdep
index 5cdb19036d7f71a1128a3e2333a483074c68e2eb..d179299980b9857fab6a60ef639f60ef03cda2fc 100644 (file)
@@ -27,6 +27,7 @@ all: $(OBJTOOL)
 INCLUDES := -I$(srctree)/tools/include \
            -I$(srctree)/tools/arch/$(HOSTARCH)/include/uapi \
            -I$(srctree)/tools/arch/$(SRCARCH)/include  \
+           -I$(srctree)/tools/objtool/include \
            -I$(srctree)/tools/objtool/arch/$(SRCARCH)/include
 WARNINGS := $(EXTRA_WARNINGS) -Wno-switch-default -Wno-switch-enum -Wno-packed -Wno-nested-externs
 CFLAGS   := -Werror $(WARNINGS) $(KBUILD_HOSTCFLAGS) -g $(INCLUDES) $(LIBELF_FLAGS)
index cde9c36e40ae0ccff941a22b07f8cc7d1313ac54..6baa22732ca691f0e30da3213ba4b07061a0a179 100644 (file)
 #include "../../../arch/x86/lib/inat.c"
 #include "../../../arch/x86/lib/insn.c"
 
-#include "../../check.h"
-#include "../../elf.h"
-#include "../../arch.h"
-#include "../../warn.h"
 #include <asm/orc_types.h>
+#include <objtool/check.h>
+#include <objtool/elf.h>
+#include <objtool/arch.h>
+#include <objtool/warn.h>
 
 static unsigned char op_to_cfi_reg[][2] = {
        {CFI_AX, CFI_R8},
index fd4af88c0ea52556186b70f86d1cd8ff06f030f8..b4bd3505fc9466e1749fd93cb26d7fd880081517 100644 (file)
@@ -1,8 +1,8 @@
 // SPDX-License-Identifier: GPL-2.0-or-later
 #include <string.h>
 
-#include "../../special.h"
-#include "../../builtin.h"
+#include <objtool/special.h>
+#include <objtool/builtin.h>
 
 #define X86_FEATURE_POPCNT (4 * 32 + 23)
 #define X86_FEATURE_SMAP   (9 * 32 + 20)
index c6d199bfd0ae2a725826d7f2950aec98ca3dda83..f47951e19c9d38f37454521de225e96f5d3022a3 100644 (file)
@@ -15,8 +15,8 @@
 
 #include <subcmd/parse-options.h>
 #include <string.h>
-#include "builtin.h"
-#include "objtool.h"
+#include <objtool/builtin.h>
+#include <objtool/objtool.h>
 
 bool no_fp, no_unreachable, retpoline, module, backtrace, uaccess, stats, validate_dup, vmlinux;
 
index 7b31121fa60b270a2ed41ce2436fc704b8431358..6745f3328a0ecb5e64d56182add60c307b2a3623 100644 (file)
@@ -13,8 +13,8 @@
  */
 
 #include <string.h>
-#include "builtin.h"
-#include "objtool.h"
+#include <objtool/builtin.h>
+#include <objtool/objtool.h>
 
 static const char *orc_usage[] = {
        "objtool orc generate [<options>] file.o",
index 8cda0ef0652219dea7edfdf0d270a96a8faeba1e..8976047cb6487ec281595eb731f940728f6eba6a 100644 (file)
@@ -6,14 +6,14 @@
 #include <string.h>
 #include <stdlib.h>
 
-#include "builtin.h"
-#include "cfi.h"
-#include "arch.h"
-#include "check.h"
-#include "special.h"
-#include "warn.h"
-#include "arch_elf.h"
-#include "endianness.h"
+#include <arch/elf.h>
+#include <objtool/builtin.h>
+#include <objtool/cfi.h>
+#include <objtool/arch.h>
+#include <objtool/check.h>
+#include <objtool/special.h>
+#include <objtool/warn.h>
+#include <objtool/endianness.h>
 
 #include <linux/objtool.h>
 #include <linux/hashtable.h>
index c784122b7ecba8e556e6e0ef8e3cc616f05bd7b5..43714ecd09f738c6a16ad89502c69e47b211646e 100644 (file)
 #include <string.h>
 #include <unistd.h>
 #include <errno.h>
-#include "builtin.h"
+#include <objtool/builtin.h>
 
-#include "elf.h"
-#include "warn.h"
+#include <objtool/elf.h>
+#include <objtool/warn.h>
 
 #define MAX_NAME_LEN 128
 
similarity index 96%
rename from tools/objtool/arch.h
rename to tools/objtool/include/objtool/arch.h
index 4a84c3081b8e131572b32c9e02a7dfbcf8c40068..dc4f503a3ae46efa1e6f7a0c0a8a0171181321cf 100644 (file)
@@ -8,8 +8,8 @@
 
 #include <stdbool.h>
 #include <linux/list.h>
-#include "objtool.h"
-#include "cfi.h"
+#include <objtool/objtool.h>
+#include <objtool/cfi.h>
 
 #ifdef INSN_USE_ORC
 #include <asm/orc_types.h>
similarity index 96%
rename from tools/objtool/cfi.h
rename to tools/objtool/include/objtool/cfi.h
index c7c59c6a44eeacaeff9f0338bf6af83d5476e9f0..fd5cb0bed9bf026c4c64fefdf391aa02fa4574dc 100644 (file)
@@ -6,7 +6,7 @@
 #ifndef _OBJTOOL_CFI_H
 #define _OBJTOOL_CFI_H
 
-#include "cfi_regs.h"
+#include <arch/cfi_regs.h>
 
 #define CFI_UNDEFINED          -1
 #define CFI_CFA                        -2
similarity index 96%
rename from tools/objtool/check.h
rename to tools/objtool/include/objtool/check.h
index 5ec00a4b891b6a355fbdf7859dfe55de26363694..bba10968eac01b7168ae9062d740a80203014a84 100644 (file)
@@ -7,8 +7,8 @@
 #define _CHECK_H
 
 #include <stdbool.h>
-#include "cfi.h"
-#include "arch.h"
+#include <objtool/cfi.h>
+#include <objtool/arch.h>
 
 struct insn_state {
        struct cfi_state cfi;
similarity index 97%
rename from tools/objtool/endianness.h
rename to tools/objtool/include/objtool/endianness.h
index ebece3191b5811f4107f4972eaeb71e068ed7253..10241341eff356b5cb4c41234362fe22804fc441 100644 (file)
@@ -2,9 +2,9 @@
 #ifndef _OBJTOOL_ENDIANNESS_H
 #define _OBJTOOL_ENDIANNESS_H
 
+#include <arch/endianness.h>
 #include <linux/kernel.h>
 #include <endian.h>
-#include "arch_endianness.h"
 
 #ifndef __TARGET_BYTE_ORDER
 #error undefined arch __TARGET_BYTE_ORDER
similarity index 96%
rename from tools/objtool/objtool.h
rename to tools/objtool/include/objtool/objtool.h
index 4125d4578b23ba092bc03a6f2de5bee16b3fcf27..32f4cd1da9fae3ab8e51006532d540e20a7a5923 100644 (file)
@@ -10,7 +10,7 @@
 #include <linux/list.h>
 #include <linux/hashtable.h>
 
-#include "elf.h"
+#include <objtool/elf.h>
 
 #define __weak __attribute__((weak))
 
similarity index 94%
rename from tools/objtool/special.h
rename to tools/objtool/include/objtool/special.h
index abddf38ef334694f0cbc5ffd8f3c32aef135abfb..8a09f4e9d480e5cc6a03eddffb938cf54675d066 100644 (file)
@@ -7,8 +7,8 @@
 #define _SPECIAL_H
 
 #include <stdbool.h>
-#include "check.h"
-#include "elf.h"
+#include <objtool/check.h>
+#include <objtool/elf.h>
 
 #define C_JUMP_TABLE_SECTION ".rodata..c_jump_table"
 
similarity index 98%
rename from tools/objtool/warn.h
rename to tools/objtool/include/objtool/warn.h
index 7799f60de80af65049c076c6558c154854ba61ed..d99c4675e4a5f7411e01cd840bee02351df4d339 100644 (file)
@@ -11,7 +11,7 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
-#include "elf.h"
+#include <objtool/elf.h>
 
 extern const char *objname;
 
index 9df0cd86d310d501035720a24837e3abc7581bfd..e848feb0a5fc67e9db3d3e79588a76a33f6f547e 100644 (file)
@@ -21,9 +21,9 @@
 #include <subcmd/pager.h>
 #include <linux/kernel.h>
 
-#include "builtin.h"
-#include "objtool.h"
-#include "warn.h"
+#include <objtool/builtin.h>
+#include <objtool/objtool.h>
+#include <objtool/warn.h>
 
 struct cmd_struct {
        const char *name;
index 4e818a22e44b90a8bb96715ed331534f2dbc6f8a..c53fae9dbe93b261c865cb2232a55ba95b494554 100644 (file)
@@ -6,9 +6,9 @@
 #include <unistd.h>
 #include <linux/objtool.h>
 #include <asm/orc_types.h>
-#include "objtool.h"
-#include "warn.h"
-#include "endianness.h"
+#include <objtool/objtool.h>
+#include <objtool/warn.h>
+#include <objtool/endianness.h>
 
 static const char *reg_name(unsigned int reg)
 {
index 1be7e16b25950fab17971dbfde8116f345ce659e..2e5fb787a382c164f833bfaacbebd4083916750a 100644 (file)
@@ -9,9 +9,9 @@
 #include <linux/objtool.h>
 #include <asm/orc_types.h>
 
-#include "check.h"
-#include "warn.h"
-#include "endianness.h"
+#include <objtool/check.h>
+#include <objtool/warn.h>
+#include <objtool/endianness.h>
 
 int create_orc(struct objtool_file *file)
 {
index ab7cb1e13411f6e4f8db73d28c2afaa9bf5c1abb..2c7fbda7b05573e41807dc635c087dcec28dc37b 100644 (file)
 #include <stdlib.h>
 #include <string.h>
 
-#include "builtin.h"
-#include "special.h"
-#include "warn.h"
-#include "arch_special.h"
-#include "endianness.h"
+#include <arch/special.h>
+#include <objtool/builtin.h>
+#include <objtool/special.h>
+#include <objtool/warn.h>
+#include <objtool/endianness.h>
 
 struct special_entry {
        const char *sec;
index 7843e9a7a72f4885285c4d6b4bb0a7d98fae19f9..f2716827cc305cb33420385ecc96f07f43401191 100644 (file)
@@ -7,7 +7,7 @@
 
 #include <stdbool.h>
 #include <errno.h>
-#include "objtool.h"
+#include <objtool/objtool.h>
 
 #define UNSUPPORTED(name)                                              \
 ({                                                                     \