Commit-ID:  6a77cff819ae3e31992bde6432c9b5720748a89b
Gitweb:     https://git.kernel.org/tip/6a77cff819ae3e31992bde6432c9b5720748a89b
Author:     Josh Poimboeuf <jpoim...@redhat.com>
AuthorDate: Mon, 6 Nov 2017 07:21:50 -0600
Committer:  Ingo Molnar <mi...@kernel.org>
CommitDate: Tue, 7 Nov 2017 10:48:23 +0100

objtool: Move synced files to their original relative locations

This will enable more straightforward comparisons, and it also makes the
files 100% identical.

Suggested-by: Ingo Molnar <mi...@kernel.org>
Signed-off-by: Josh Poimboeuf <jpoim...@redhat.com>
Cc: Linus Torvalds <torva...@linux-foundation.org>
Cc: Peter Zijlstra <pet...@infradead.org>
Cc: Thomas Gleixner <t...@linutronix.de>
Link: 
http://lkml.kernel.org/r/407b2aaa317741f48fcf821592c0e96ab3be1890.1509974346.git.jpoim...@redhat.com
Signed-off-by: Ingo Molnar <mi...@kernel.org>
---
 tools/objtool/.gitignore                           |   2 +-
 tools/objtool/Makefile                             |  22 +-
 tools/objtool/arch/x86/Build                       |  10 +-
 tools/objtool/arch/x86/decode.c                    |   6 +-
 .../objtool/arch}/x86/include/asm/inat.h           |   0
 .../arch/x86/{insn => include/asm}/inat_types.h    |   0
 .../objtool/arch}/x86/include/asm/insn.h           |   0
 .../objtool/{ => arch/x86/include/asm}/orc_types.h |   0
 tools/objtool/arch/x86/insn/inat.c                 |  97 ----
 tools/objtool/arch/x86/insn/inat.h                 | 234 --------
 tools/objtool/arch/x86/insn/insn.c                 | 606 ---------------------
 tools/objtool/arch/x86/insn/insn.h                 | 211 -------
 {arch => tools/objtool/arch}/x86/lib/inat.c        |   0
 {arch => tools/objtool/arch}/x86/lib/insn.c        |   0
 .../arch/x86/{insn => lib}/x86-opcode-map.txt      |   0
 .../arch/x86/{insn => tools}/gen-insn-attr-x86.awk |   0
 tools/objtool/orc.h                                |   2 +-
 17 files changed, 22 insertions(+), 1168 deletions(-)

diff --git a/tools/objtool/.gitignore b/tools/objtool/.gitignore
index d3102c8..914cff1 100644
--- a/tools/objtool/.gitignore
+++ b/tools/objtool/.gitignore
@@ -1,3 +1,3 @@
-arch/x86/insn/inat-tables.c
+arch/x86/lib/inat-tables.c
 objtool
 fixdep
diff --git a/tools/objtool/Makefile b/tools/objtool/Makefile
index 424b196..c6a19d9 100644
--- a/tools/objtool/Makefile
+++ b/tools/objtool/Makefile
@@ -25,7 +25,9 @@ OBJTOOL_IN := $(OBJTOOL)-in.o
 
 all: $(OBJTOOL)
 
-INCLUDES := -I$(srctree)/tools/include 
-I$(srctree)/tools/arch/$(HOSTARCH)/include/uapi
+INCLUDES := -I$(srctree)/tools/include \
+           -I$(srctree)/tools/arch/$(HOSTARCH)/include/uapi \
+           -I$(srctree)/tools/objtool/arch/$(HOSTARCH)/include
 WARNINGS := $(EXTRA_WARNINGS) -Wno-switch-default -Wno-switch-enum -Wno-packed
 CFLAGS   += -Wall -Werror $(WARNINGS) -fomit-frame-pointer -O2 -g $(INCLUDES)
 LDFLAGS  += -lelf $(LIBSUBCMD)
@@ -46,16 +48,16 @@ $(OBJTOOL_IN): fixdep FORCE
 $(OBJTOOL): $(LIBSUBCMD) $(OBJTOOL_IN)
        @(diff -I 2>&1 | grep -q 'option requires an argument' && \
        test -d ../../kernel -a -d ../../tools -a -d ../objtool && (( \
-       diff -I'^#include' arch/x86/insn/insn.c ../../arch/x86/lib/insn.c 
>/dev/null && \
-       diff -I'^#include' arch/x86/insn/inat.c ../../arch/x86/lib/inat.c 
>/dev/null && \
-       diff arch/x86/insn/x86-opcode-map.txt 
../../arch/x86/lib/x86-opcode-map.txt >/dev/null && \
-       diff arch/x86/insn/gen-insn-attr-x86.awk 
../../arch/x86/tools/gen-insn-attr-x86.awk >/dev/null && \
-       diff -I'^#include' arch/x86/insn/insn.h 
../../arch/x86/include/asm/insn.h >/dev/null && \
-       diff -I'^#include' arch/x86/insn/inat.h 
../../arch/x86/include/asm/inat.h >/dev/null && \
-       diff -I'^#include' arch/x86/insn/inat_types.h 
../../arch/x86/include/asm/inat_types.h >/dev/null) \
+       diff arch/x86/lib/insn.c ../../arch/x86/lib/insn.c >/dev/null && \
+       diff arch/x86/lib/inat.c ../../arch/x86/lib/inat.c >/dev/null && \
+       diff arch/x86/lib/x86-opcode-map.txt 
../../arch/x86/lib/x86-opcode-map.txt >/dev/null && \
+       diff arch/x86/tools/gen-insn-attr-x86.awk 
../../arch/x86/tools/gen-insn-attr-x86.awk >/dev/null && \
+       diff arch/x86/include/asm/insn.h ../../arch/x86/include/asm/insn.h 
>/dev/null && \
+       diff arch/x86/include/asm/inat.h ../../arch/x86/include/asm/inat.h 
>/dev/null && \
+       diff arch/x86/include/asm/inat_types.h 
../../arch/x86/include/asm/inat_types.h >/dev/null) \
        || echo "warning: objtool: x86 instruction decoder differs from kernel" 
>&2 )) || true
        @(test -d ../../kernel -a -d ../../tools -a -d ../objtool && (( \
-       diff ../../arch/x86/include/asm/orc_types.h orc_types.h >/dev/null) \
+       diff ../../arch/x86/include/asm/orc_types.h 
arch/x86/include/asm/orc_types.h >/dev/null) \
        || echo "warning: objtool: orc_types.h differs from kernel" >&2 )) || 
true
        $(QUIET_LINK)$(CC) $(OBJTOOL_IN) $(LDFLAGS) -o $@
 
@@ -66,7 +68,7 @@ $(LIBSUBCMD): fixdep FORCE
 clean:
        $(call QUIET_CLEAN, objtool) $(RM) $(OBJTOOL)
        $(Q)find $(OUTPUT) -name '*.o' -delete -o -name '\.*.cmd' -delete -o 
-name '\.*.d' -delete
-       $(Q)$(RM) $(OUTPUT)arch/x86/insn/inat-tables.c $(OUTPUT)fixdep
+       $(Q)$(RM) $(OUTPUT)arch/x86/lib/inat-tables.c $(OUTPUT)fixdep
 
 FORCE:
 
diff --git a/tools/objtool/arch/x86/Build b/tools/objtool/arch/x86/Build
index debbdb0..b998412 100644
--- a/tools/objtool/arch/x86/Build
+++ b/tools/objtool/arch/x86/Build
@@ -1,12 +1,12 @@
 objtool-y += decode.o
 
-inat_tables_script = arch/x86/insn/gen-insn-attr-x86.awk
-inat_tables_maps = arch/x86/insn/x86-opcode-map.txt
+inat_tables_script = arch/x86/tools/gen-insn-attr-x86.awk
+inat_tables_maps = arch/x86/lib/x86-opcode-map.txt
 
-$(OUTPUT)arch/x86/insn/inat-tables.c: $(inat_tables_script) $(inat_tables_maps)
+$(OUTPUT)arch/x86/lib/inat-tables.c: $(inat_tables_script) $(inat_tables_maps)
        $(call rule_mkdir)
        $(Q)$(call echo-cmd,gen)$(AWK) -f $(inat_tables_script) 
$(inat_tables_maps) > $@
 
-$(OUTPUT)arch/x86/decode.o: $(OUTPUT)arch/x86/insn/inat-tables.c
+$(OUTPUT)arch/x86/decode.o: $(OUTPUT)arch/x86/lib/inat-tables.c
 
-CFLAGS_decode.o += -I$(OUTPUT)arch/x86/insn
+CFLAGS_decode.o += -I$(OUTPUT)arch/x86/lib
diff --git a/tools/objtool/arch/x86/decode.c b/tools/objtool/arch/x86/decode.c
index 34a579f..8acfc47 100644
--- a/tools/objtool/arch/x86/decode.c
+++ b/tools/objtool/arch/x86/decode.c
@@ -19,9 +19,9 @@
 #include <stdlib.h>
 
 #define unlikely(cond) (cond)
-#include "insn/insn.h"
-#include "insn/inat.c"
-#include "insn/insn.c"
+#include <asm/insn.h>
+#include "lib/inat.c"
+#include "lib/insn.c"
 
 #include "../../elf.h"
 #include "../../arch.h"
diff --git a/arch/x86/include/asm/inat.h 
b/tools/objtool/arch/x86/include/asm/inat.h
similarity index 100%
copy from arch/x86/include/asm/inat.h
copy to tools/objtool/arch/x86/include/asm/inat.h
diff --git a/tools/objtool/arch/x86/insn/inat_types.h 
b/tools/objtool/arch/x86/include/asm/inat_types.h
similarity index 100%
rename from tools/objtool/arch/x86/insn/inat_types.h
rename to tools/objtool/arch/x86/include/asm/inat_types.h
diff --git a/arch/x86/include/asm/insn.h 
b/tools/objtool/arch/x86/include/asm/insn.h
similarity index 100%
copy from arch/x86/include/asm/insn.h
copy to tools/objtool/arch/x86/include/asm/insn.h
diff --git a/tools/objtool/orc_types.h 
b/tools/objtool/arch/x86/include/asm/orc_types.h
similarity index 100%
rename from tools/objtool/orc_types.h
rename to tools/objtool/arch/x86/include/asm/orc_types.h
diff --git a/tools/objtool/arch/x86/insn/inat.c 
b/tools/objtool/arch/x86/insn/inat.c
deleted file mode 100644
index e4bf28e..0000000
--- a/tools/objtool/arch/x86/insn/inat.c
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * x86 instruction attribute tables
- *
- * Written by Masami Hiramatsu <mhira...@redhat.com>
- *
- * 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, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- */
-#include "insn.h"
-
-/* Attribute tables are generated from opcode map */
-#include "inat-tables.c"
-
-/* Attribute search APIs */
-insn_attr_t inat_get_opcode_attribute(insn_byte_t opcode)
-{
-       return inat_primary_table[opcode];
-}
-
-int inat_get_last_prefix_id(insn_byte_t last_pfx)
-{
-       insn_attr_t lpfx_attr;
-
-       lpfx_attr = inat_get_opcode_attribute(last_pfx);
-       return inat_last_prefix_id(lpfx_attr);
-}
-
-insn_attr_t inat_get_escape_attribute(insn_byte_t opcode, int lpfx_id,
-                                     insn_attr_t esc_attr)
-{
-       const insn_attr_t *table;
-       int n;
-
-       n = inat_escape_id(esc_attr);
-
-       table = inat_escape_tables[n][0];
-       if (!table)
-               return 0;
-       if (inat_has_variant(table[opcode]) && lpfx_id) {
-               table = inat_escape_tables[n][lpfx_id];
-               if (!table)
-                       return 0;
-       }
-       return table[opcode];
-}
-
-insn_attr_t inat_get_group_attribute(insn_byte_t modrm, int lpfx_id,
-                                    insn_attr_t grp_attr)
-{
-       const insn_attr_t *table;
-       int n;
-
-       n = inat_group_id(grp_attr);
-
-       table = inat_group_tables[n][0];
-       if (!table)
-               return inat_group_common_attribute(grp_attr);
-       if (inat_has_variant(table[X86_MODRM_REG(modrm)]) && lpfx_id) {
-               table = inat_group_tables[n][lpfx_id];
-               if (!table)
-                       return inat_group_common_attribute(grp_attr);
-       }
-       return table[X86_MODRM_REG(modrm)] |
-              inat_group_common_attribute(grp_attr);
-}
-
-insn_attr_t inat_get_avx_attribute(insn_byte_t opcode, insn_byte_t vex_m,
-                                  insn_byte_t vex_p)
-{
-       const insn_attr_t *table;
-       if (vex_m > X86_VEX_M_MAX || vex_p > INAT_LSTPFX_MAX)
-               return 0;
-       /* At first, this checks the master table */
-       table = inat_avx_tables[vex_m][0];
-       if (!table)
-               return 0;
-       if (!inat_is_group(table[opcode]) && vex_p) {
-               /* If this is not a group, get attribute directly */
-               table = inat_avx_tables[vex_m][vex_p];
-               if (!table)
-                       return 0;
-       }
-       return table[opcode];
-}
-
diff --git a/tools/objtool/arch/x86/insn/inat.h 
b/tools/objtool/arch/x86/insn/inat.h
deleted file mode 100644
index 125ecd2..0000000
--- a/tools/objtool/arch/x86/insn/inat.h
+++ /dev/null
@@ -1,234 +0,0 @@
-#ifndef _ASM_X86_INAT_H
-#define _ASM_X86_INAT_H
-/*
- * x86 instruction attributes
- *
- * Written by Masami Hiramatsu <mhira...@redhat.com>
- *
- * 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, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- */
-#include "inat_types.h"
-
-/*
- * Internal bits. Don't use bitmasks directly, because these bits are
- * unstable. You should use checking functions.
- */
-
-#define INAT_OPCODE_TABLE_SIZE 256
-#define INAT_GROUP_TABLE_SIZE 8
-
-/* Legacy last prefixes */
-#define INAT_PFX_OPNDSZ        1       /* 0x66 */ /* LPFX1 */
-#define INAT_PFX_REPE  2       /* 0xF3 */ /* LPFX2 */
-#define INAT_PFX_REPNE 3       /* 0xF2 */ /* LPFX3 */
-/* Other Legacy prefixes */
-#define INAT_PFX_LOCK  4       /* 0xF0 */
-#define INAT_PFX_CS    5       /* 0x2E */
-#define INAT_PFX_DS    6       /* 0x3E */
-#define INAT_PFX_ES    7       /* 0x26 */
-#define INAT_PFX_FS    8       /* 0x64 */
-#define INAT_PFX_GS    9       /* 0x65 */
-#define INAT_PFX_SS    10      /* 0x36 */
-#define INAT_PFX_ADDRSZ        11      /* 0x67 */
-/* x86-64 REX prefix */
-#define INAT_PFX_REX   12      /* 0x4X */
-/* AVX VEX prefixes */
-#define INAT_PFX_VEX2  13      /* 2-bytes VEX prefix */
-#define INAT_PFX_VEX3  14      /* 3-bytes VEX prefix */
-#define INAT_PFX_EVEX  15      /* EVEX prefix */
-
-#define INAT_LSTPFX_MAX        3
-#define INAT_LGCPFX_MAX        11
-
-/* Immediate size */
-#define INAT_IMM_BYTE          1
-#define INAT_IMM_WORD          2
-#define INAT_IMM_DWORD         3
-#define INAT_IMM_QWORD         4
-#define INAT_IMM_PTR           5
-#define INAT_IMM_VWORD32       6
-#define INAT_IMM_VWORD         7
-
-/* Legacy prefix */
-#define INAT_PFX_OFFS  0
-#define INAT_PFX_BITS  4
-#define INAT_PFX_MAX    ((1 << INAT_PFX_BITS) - 1)
-#define INAT_PFX_MASK  (INAT_PFX_MAX << INAT_PFX_OFFS)
-/* Escape opcodes */
-#define INAT_ESC_OFFS  (INAT_PFX_OFFS + INAT_PFX_BITS)
-#define INAT_ESC_BITS  2
-#define INAT_ESC_MAX   ((1 << INAT_ESC_BITS) - 1)
-#define INAT_ESC_MASK  (INAT_ESC_MAX << INAT_ESC_OFFS)
-/* Group opcodes (1-16) */
-#define INAT_GRP_OFFS  (INAT_ESC_OFFS + INAT_ESC_BITS)
-#define INAT_GRP_BITS  5
-#define INAT_GRP_MAX   ((1 << INAT_GRP_BITS) - 1)
-#define INAT_GRP_MASK  (INAT_GRP_MAX << INAT_GRP_OFFS)
-/* Immediates */
-#define INAT_IMM_OFFS  (INAT_GRP_OFFS + INAT_GRP_BITS)
-#define INAT_IMM_BITS  3
-#define INAT_IMM_MASK  (((1 << INAT_IMM_BITS) - 1) << INAT_IMM_OFFS)
-/* Flags */
-#define INAT_FLAG_OFFS (INAT_IMM_OFFS + INAT_IMM_BITS)
-#define INAT_MODRM     (1 << (INAT_FLAG_OFFS))
-#define INAT_FORCE64   (1 << (INAT_FLAG_OFFS + 1))
-#define INAT_SCNDIMM   (1 << (INAT_FLAG_OFFS + 2))
-#define INAT_MOFFSET   (1 << (INAT_FLAG_OFFS + 3))
-#define INAT_VARIANT   (1 << (INAT_FLAG_OFFS + 4))
-#define INAT_VEXOK     (1 << (INAT_FLAG_OFFS + 5))
-#define INAT_VEXONLY   (1 << (INAT_FLAG_OFFS + 6))
-#define INAT_EVEXONLY  (1 << (INAT_FLAG_OFFS + 7))
-/* Attribute making macros for attribute tables */
-#define INAT_MAKE_PREFIX(pfx)  (pfx << INAT_PFX_OFFS)
-#define INAT_MAKE_ESCAPE(esc)  (esc << INAT_ESC_OFFS)
-#define INAT_MAKE_GROUP(grp)   ((grp << INAT_GRP_OFFS) | INAT_MODRM)
-#define INAT_MAKE_IMM(imm)     (imm << INAT_IMM_OFFS)
-
-/* Attribute search APIs */
-extern insn_attr_t inat_get_opcode_attribute(insn_byte_t opcode);
-extern int inat_get_last_prefix_id(insn_byte_t last_pfx);
-extern insn_attr_t inat_get_escape_attribute(insn_byte_t opcode,
-                                            int lpfx_id,
-                                            insn_attr_t esc_attr);
-extern insn_attr_t inat_get_group_attribute(insn_byte_t modrm,
-                                           int lpfx_id,
-                                           insn_attr_t esc_attr);
-extern insn_attr_t inat_get_avx_attribute(insn_byte_t opcode,
-                                         insn_byte_t vex_m,
-                                         insn_byte_t vex_pp);
-
-/* Attribute checking functions */
-static inline int inat_is_legacy_prefix(insn_attr_t attr)
-{
-       attr &= INAT_PFX_MASK;
-       return attr && attr <= INAT_LGCPFX_MAX;
-}
-
-static inline int inat_is_address_size_prefix(insn_attr_t attr)
-{
-       return (attr & INAT_PFX_MASK) == INAT_PFX_ADDRSZ;
-}
-
-static inline int inat_is_operand_size_prefix(insn_attr_t attr)
-{
-       return (attr & INAT_PFX_MASK) == INAT_PFX_OPNDSZ;
-}
-
-static inline int inat_is_rex_prefix(insn_attr_t attr)
-{
-       return (attr & INAT_PFX_MASK) == INAT_PFX_REX;
-}
-
-static inline int inat_last_prefix_id(insn_attr_t attr)
-{
-       if ((attr & INAT_PFX_MASK) > INAT_LSTPFX_MAX)
-               return 0;
-       else
-               return attr & INAT_PFX_MASK;
-}
-
-static inline int inat_is_vex_prefix(insn_attr_t attr)
-{
-       attr &= INAT_PFX_MASK;
-       return attr == INAT_PFX_VEX2 || attr == INAT_PFX_VEX3 ||
-              attr == INAT_PFX_EVEX;
-}
-
-static inline int inat_is_evex_prefix(insn_attr_t attr)
-{
-       return (attr & INAT_PFX_MASK) == INAT_PFX_EVEX;
-}
-
-static inline int inat_is_vex3_prefix(insn_attr_t attr)
-{
-       return (attr & INAT_PFX_MASK) == INAT_PFX_VEX3;
-}
-
-static inline int inat_is_escape(insn_attr_t attr)
-{
-       return attr & INAT_ESC_MASK;
-}
-
-static inline int inat_escape_id(insn_attr_t attr)
-{
-       return (attr & INAT_ESC_MASK) >> INAT_ESC_OFFS;
-}
-
-static inline int inat_is_group(insn_attr_t attr)
-{
-       return attr & INAT_GRP_MASK;
-}
-
-static inline int inat_group_id(insn_attr_t attr)
-{
-       return (attr & INAT_GRP_MASK) >> INAT_GRP_OFFS;
-}
-
-static inline int inat_group_common_attribute(insn_attr_t attr)
-{
-       return attr & ~INAT_GRP_MASK;
-}
-
-static inline int inat_has_immediate(insn_attr_t attr)
-{
-       return attr & INAT_IMM_MASK;
-}
-
-static inline int inat_immediate_size(insn_attr_t attr)
-{
-       return (attr & INAT_IMM_MASK) >> INAT_IMM_OFFS;
-}
-
-static inline int inat_has_modrm(insn_attr_t attr)
-{
-       return attr & INAT_MODRM;
-}
-
-static inline int inat_is_force64(insn_attr_t attr)
-{
-       return attr & INAT_FORCE64;
-}
-
-static inline int inat_has_second_immediate(insn_attr_t attr)
-{
-       return attr & INAT_SCNDIMM;
-}
-
-static inline int inat_has_moffset(insn_attr_t attr)
-{
-       return attr & INAT_MOFFSET;
-}
-
-static inline int inat_has_variant(insn_attr_t attr)
-{
-       return attr & INAT_VARIANT;
-}
-
-static inline int inat_accept_vex(insn_attr_t attr)
-{
-       return attr & INAT_VEXOK;
-}
-
-static inline int inat_must_vex(insn_attr_t attr)
-{
-       return attr & (INAT_VEXONLY | INAT_EVEXONLY);
-}
-
-static inline int inat_must_evex(insn_attr_t attr)
-{
-       return attr & INAT_EVEXONLY;
-}
-#endif
diff --git a/tools/objtool/arch/x86/insn/insn.c 
b/tools/objtool/arch/x86/insn/insn.c
deleted file mode 100644
index ca983e2..0000000
--- a/tools/objtool/arch/x86/insn/insn.c
+++ /dev/null
@@ -1,606 +0,0 @@
-/*
- * x86 instruction analysis
- *
- * 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, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (C) IBM Corporation, 2002, 2004, 2009
- */
-
-#ifdef __KERNEL__
-#include <linux/string.h>
-#else
-#include <string.h>
-#endif
-#include "inat.h"
-#include "insn.h"
-
-/* Verify next sizeof(t) bytes can be on the same instruction */
-#define validate_next(t, insn, n)      \
-       ((insn)->next_byte + sizeof(t) + n <= (insn)->end_kaddr)
-
-#define __get_next(t, insn)    \
-       ({ t r = *(t*)insn->next_byte; insn->next_byte += sizeof(t); r; })
-
-#define __peek_nbyte_next(t, insn, n)  \
-       ({ t r = *(t*)((insn)->next_byte + n); r; })
-
-#define get_next(t, insn)      \
-       ({ if (unlikely(!validate_next(t, insn, 0))) goto err_out; 
__get_next(t, insn); })
-
-#define peek_nbyte_next(t, insn, n)    \
-       ({ if (unlikely(!validate_next(t, insn, n))) goto err_out; 
__peek_nbyte_next(t, insn, n); })
-
-#define peek_next(t, insn)     peek_nbyte_next(t, insn, 0)
-
-/**
- * insn_init() - initialize struct insn
- * @insn:      &struct insn to be initialized
- * @kaddr:     address (in kernel memory) of instruction (or copy thereof)
- * @x86_64:    !0 for 64-bit kernel or 64-bit app
- */
-void insn_init(struct insn *insn, const void *kaddr, int buf_len, int x86_64)
-{
-       /*
-        * Instructions longer than MAX_INSN_SIZE (15 bytes) are invalid
-        * even if the input buffer is long enough to hold them.
-        */
-       if (buf_len > MAX_INSN_SIZE)
-               buf_len = MAX_INSN_SIZE;
-
-       memset(insn, 0, sizeof(*insn));
-       insn->kaddr = kaddr;
-       insn->end_kaddr = kaddr + buf_len;
-       insn->next_byte = kaddr;
-       insn->x86_64 = x86_64 ? 1 : 0;
-       insn->opnd_bytes = 4;
-       if (x86_64)
-               insn->addr_bytes = 8;
-       else
-               insn->addr_bytes = 4;
-}
-
-/**
- * insn_get_prefixes - scan x86 instruction prefix bytes
- * @insn:      &struct insn containing instruction
- *
- * Populates the @insn->prefixes bitmap, and updates @insn->next_byte
- * to point to the (first) opcode.  No effect if @insn->prefixes.got
- * is already set.
- */
-void insn_get_prefixes(struct insn *insn)
-{
-       struct insn_field *prefixes = &insn->prefixes;
-       insn_attr_t attr;
-       insn_byte_t b, lb;
-       int i, nb;
-
-       if (prefixes->got)
-               return;
-
-       nb = 0;
-       lb = 0;
-       b = peek_next(insn_byte_t, insn);
-       attr = inat_get_opcode_attribute(b);
-       while (inat_is_legacy_prefix(attr)) {
-               /* Skip if same prefix */
-               for (i = 0; i < nb; i++)
-                       if (prefixes->bytes[i] == b)
-                               goto found;
-               if (nb == 4)
-                       /* Invalid instruction */
-                       break;
-               prefixes->bytes[nb++] = b;
-               if (inat_is_address_size_prefix(attr)) {
-                       /* address size switches 2/4 or 4/8 */
-                       if (insn->x86_64)
-                               insn->addr_bytes ^= 12;
-                       else
-                               insn->addr_bytes ^= 6;
-               } else if (inat_is_operand_size_prefix(attr)) {
-                       /* oprand size switches 2/4 */
-                       insn->opnd_bytes ^= 6;
-               }
-found:
-               prefixes->nbytes++;
-               insn->next_byte++;
-               lb = b;
-               b = peek_next(insn_byte_t, insn);
-               attr = inat_get_opcode_attribute(b);
-       }
-       /* Set the last prefix */
-       if (lb && lb != insn->prefixes.bytes[3]) {
-               if (unlikely(insn->prefixes.bytes[3])) {
-                       /* Swap the last prefix */
-                       b = insn->prefixes.bytes[3];
-                       for (i = 0; i < nb; i++)
-                               if (prefixes->bytes[i] == lb)
-                                       prefixes->bytes[i] = b;
-               }
-               insn->prefixes.bytes[3] = lb;
-       }
-
-       /* Decode REX prefix */
-       if (insn->x86_64) {
-               b = peek_next(insn_byte_t, insn);
-               attr = inat_get_opcode_attribute(b);
-               if (inat_is_rex_prefix(attr)) {
-                       insn->rex_prefix.value = b;
-                       insn->rex_prefix.nbytes = 1;
-                       insn->next_byte++;
-                       if (X86_REX_W(b))
-                               /* REX.W overrides opnd_size */
-                               insn->opnd_bytes = 8;
-               }
-       }
-       insn->rex_prefix.got = 1;
-
-       /* Decode VEX prefix */
-       b = peek_next(insn_byte_t, insn);
-       attr = inat_get_opcode_attribute(b);
-       if (inat_is_vex_prefix(attr)) {
-               insn_byte_t b2 = peek_nbyte_next(insn_byte_t, insn, 1);
-               if (!insn->x86_64) {
-                       /*
-                        * In 32-bits mode, if the [7:6] bits (mod bits of
-                        * ModRM) on the second byte are not 11b, it is
-                        * LDS or LES or BOUND.
-                        */
-                       if (X86_MODRM_MOD(b2) != 3)
-                               goto vex_end;
-               }
-               insn->vex_prefix.bytes[0] = b;
-               insn->vex_prefix.bytes[1] = b2;
-               if (inat_is_evex_prefix(attr)) {
-                       b2 = peek_nbyte_next(insn_byte_t, insn, 2);
-                       insn->vex_prefix.bytes[2] = b2;
-                       b2 = peek_nbyte_next(insn_byte_t, insn, 3);
-                       insn->vex_prefix.bytes[3] = b2;
-                       insn->vex_prefix.nbytes = 4;
-                       insn->next_byte += 4;
-                       if (insn->x86_64 && X86_VEX_W(b2))
-                               /* VEX.W overrides opnd_size */
-                               insn->opnd_bytes = 8;
-               } else if (inat_is_vex3_prefix(attr)) {
-                       b2 = peek_nbyte_next(insn_byte_t, insn, 2);
-                       insn->vex_prefix.bytes[2] = b2;
-                       insn->vex_prefix.nbytes = 3;
-                       insn->next_byte += 3;
-                       if (insn->x86_64 && X86_VEX_W(b2))
-                               /* VEX.W overrides opnd_size */
-                               insn->opnd_bytes = 8;
-               } else {
-                       /*
-                        * For VEX2, fake VEX3-like byte#2.
-                        * Makes it easier to decode vex.W, vex.vvvv,
-                        * vex.L and vex.pp. Masking with 0x7f sets vex.W == 0.
-                        */
-                       insn->vex_prefix.bytes[2] = b2 & 0x7f;
-                       insn->vex_prefix.nbytes = 2;
-                       insn->next_byte += 2;
-               }
-       }
-vex_end:
-       insn->vex_prefix.got = 1;
-
-       prefixes->got = 1;
-
-err_out:
-       return;
-}
-
-/**
- * insn_get_opcode - collect opcode(s)
- * @insn:      &struct insn containing instruction
- *
- * Populates @insn->opcode, updates @insn->next_byte to point past the
- * opcode byte(s), and set @insn->attr (except for groups).
- * If necessary, first collects any preceding (prefix) bytes.
- * Sets @insn->opcode.value = opcode1.  No effect if @insn->opcode.got
- * is already 1.
- */
-void insn_get_opcode(struct insn *insn)
-{
-       struct insn_field *opcode = &insn->opcode;
-       insn_byte_t op;
-       int pfx_id;
-       if (opcode->got)
-               return;
-       if (!insn->prefixes.got)
-               insn_get_prefixes(insn);
-
-       /* Get first opcode */
-       op = get_next(insn_byte_t, insn);
-       opcode->bytes[0] = op;
-       opcode->nbytes = 1;
-
-       /* Check if there is VEX prefix or not */
-       if (insn_is_avx(insn)) {
-               insn_byte_t m, p;
-               m = insn_vex_m_bits(insn);
-               p = insn_vex_p_bits(insn);
-               insn->attr = inat_get_avx_attribute(op, m, p);
-               if ((inat_must_evex(insn->attr) && !insn_is_evex(insn)) ||
-                   (!inat_accept_vex(insn->attr) &&
-                    !inat_is_group(insn->attr)))
-                       insn->attr = 0; /* This instruction is bad */
-               goto end;       /* VEX has only 1 byte for opcode */
-       }
-
-       insn->attr = inat_get_opcode_attribute(op);
-       while (inat_is_escape(insn->attr)) {
-               /* Get escaped opcode */
-               op = get_next(insn_byte_t, insn);
-               opcode->bytes[opcode->nbytes++] = op;
-               pfx_id = insn_last_prefix_id(insn);
-               insn->attr = inat_get_escape_attribute(op, pfx_id, insn->attr);
-       }
-       if (inat_must_vex(insn->attr))
-               insn->attr = 0; /* This instruction is bad */
-end:
-       opcode->got = 1;
-
-err_out:
-       return;
-}
-
-/**
- * insn_get_modrm - collect ModRM byte, if any
- * @insn:      &struct insn containing instruction
- *
- * Populates @insn->modrm and updates @insn->next_byte to point past the
- * ModRM byte, if any.  If necessary, first collects the preceding bytes
- * (prefixes and opcode(s)).  No effect if @insn->modrm.got is already 1.
- */
-void insn_get_modrm(struct insn *insn)
-{
-       struct insn_field *modrm = &insn->modrm;
-       insn_byte_t pfx_id, mod;
-       if (modrm->got)
-               return;
-       if (!insn->opcode.got)
-               insn_get_opcode(insn);
-
-       if (inat_has_modrm(insn->attr)) {
-               mod = get_next(insn_byte_t, insn);
-               modrm->value = mod;
-               modrm->nbytes = 1;
-               if (inat_is_group(insn->attr)) {
-                       pfx_id = insn_last_prefix_id(insn);
-                       insn->attr = inat_get_group_attribute(mod, pfx_id,
-                                                             insn->attr);
-                       if (insn_is_avx(insn) && !inat_accept_vex(insn->attr))
-                               insn->attr = 0; /* This is bad */
-               }
-       }
-
-       if (insn->x86_64 && inat_is_force64(insn->attr))
-               insn->opnd_bytes = 8;
-       modrm->got = 1;
-
-err_out:
-       return;
-}
-
-
-/**
- * insn_rip_relative() - Does instruction use RIP-relative addressing mode?
- * @insn:      &struct insn containing instruction
- *
- * If necessary, first collects the instruction up to and including the
- * ModRM byte.  No effect if @insn->x86_64 is 0.
- */
-int insn_rip_relative(struct insn *insn)
-{
-       struct insn_field *modrm = &insn->modrm;
-
-       if (!insn->x86_64)
-               return 0;
-       if (!modrm->got)
-               insn_get_modrm(insn);
-       /*
-        * For rip-relative instructions, the mod field (top 2 bits)
-        * is zero and the r/m field (bottom 3 bits) is 0x5.
-        */
-       return (modrm->nbytes && (modrm->value & 0xc7) == 0x5);
-}
-
-/**
- * insn_get_sib() - Get the SIB byte of instruction
- * @insn:      &struct insn containing instruction
- *
- * If necessary, first collects the instruction up to and including the
- * ModRM byte.
- */
-void insn_get_sib(struct insn *insn)
-{
-       insn_byte_t modrm;
-
-       if (insn->sib.got)
-               return;
-       if (!insn->modrm.got)
-               insn_get_modrm(insn);
-       if (insn->modrm.nbytes) {
-               modrm = (insn_byte_t)insn->modrm.value;
-               if (insn->addr_bytes != 2 &&
-                   X86_MODRM_MOD(modrm) != 3 && X86_MODRM_RM(modrm) == 4) {
-                       insn->sib.value = get_next(insn_byte_t, insn);
-                       insn->sib.nbytes = 1;
-               }
-       }
-       insn->sib.got = 1;
-
-err_out:
-       return;
-}
-
-
-/**
- * insn_get_displacement() - Get the displacement of instruction
- * @insn:      &struct insn containing instruction
- *
- * If necessary, first collects the instruction up to and including the
- * SIB byte.
- * Displacement value is sign-expanded.
- */
-void insn_get_displacement(struct insn *insn)
-{
-       insn_byte_t mod, rm, base;
-
-       if (insn->displacement.got)
-               return;
-       if (!insn->sib.got)
-               insn_get_sib(insn);
-       if (insn->modrm.nbytes) {
-               /*
-                * Interpreting the modrm byte:
-                * mod = 00 - no displacement fields (exceptions below)
-                * mod = 01 - 1-byte displacement field
-                * mod = 10 - displacement field is 4 bytes, or 2 bytes if
-                *      address size = 2 (0x67 prefix in 32-bit mode)
-                * mod = 11 - no memory operand
-                *
-                * If address size = 2...
-                * mod = 00, r/m = 110 - displacement field is 2 bytes
-                *
-                * If address size != 2...
-                * mod != 11, r/m = 100 - SIB byte exists
-                * mod = 00, SIB base = 101 - displacement field is 4 bytes
-                * mod = 00, r/m = 101 - rip-relative addressing, displacement
-                *      field is 4 bytes
-                */
-               mod = X86_MODRM_MOD(insn->modrm.value);
-               rm = X86_MODRM_RM(insn->modrm.value);
-               base = X86_SIB_BASE(insn->sib.value);
-               if (mod == 3)
-                       goto out;
-               if (mod == 1) {
-                       insn->displacement.value = get_next(signed char, insn);
-                       insn->displacement.nbytes = 1;
-               } else if (insn->addr_bytes == 2) {
-                       if ((mod == 0 && rm == 6) || mod == 2) {
-                               insn->displacement.value =
-                                        get_next(short, insn);
-                               insn->displacement.nbytes = 2;
-                       }
-               } else {
-                       if ((mod == 0 && rm == 5) || mod == 2 ||
-                           (mod == 0 && base == 5)) {
-                               insn->displacement.value = get_next(int, insn);
-                               insn->displacement.nbytes = 4;
-                       }
-               }
-       }
-out:
-       insn->displacement.got = 1;
-
-err_out:
-       return;
-}
-
-/* Decode moffset16/32/64. Return 0 if failed */
-static int __get_moffset(struct insn *insn)
-{
-       switch (insn->addr_bytes) {
-       case 2:
-               insn->moffset1.value = get_next(short, insn);
-               insn->moffset1.nbytes = 2;
-               break;
-       case 4:
-               insn->moffset1.value = get_next(int, insn);
-               insn->moffset1.nbytes = 4;
-               break;
-       case 8:
-               insn->moffset1.value = get_next(int, insn);
-               insn->moffset1.nbytes = 4;
-               insn->moffset2.value = get_next(int, insn);
-               insn->moffset2.nbytes = 4;
-               break;
-       default:        /* opnd_bytes must be modified manually */
-               goto err_out;
-       }
-       insn->moffset1.got = insn->moffset2.got = 1;
-
-       return 1;
-
-err_out:
-       return 0;
-}
-
-/* Decode imm v32(Iz). Return 0 if failed */
-static int __get_immv32(struct insn *insn)
-{
-       switch (insn->opnd_bytes) {
-       case 2:
-               insn->immediate.value = get_next(short, insn);
-               insn->immediate.nbytes = 2;
-               break;
-       case 4:
-       case 8:
-               insn->immediate.value = get_next(int, insn);
-               insn->immediate.nbytes = 4;
-               break;
-       default:        /* opnd_bytes must be modified manually */
-               goto err_out;
-       }
-
-       return 1;
-
-err_out:
-       return 0;
-}
-
-/* Decode imm v64(Iv/Ov), Return 0 if failed */
-static int __get_immv(struct insn *insn)
-{
-       switch (insn->opnd_bytes) {
-       case 2:
-               insn->immediate1.value = get_next(short, insn);
-               insn->immediate1.nbytes = 2;
-               break;
-       case 4:
-               insn->immediate1.value = get_next(int, insn);
-               insn->immediate1.nbytes = 4;
-               break;
-       case 8:
-               insn->immediate1.value = get_next(int, insn);
-               insn->immediate1.nbytes = 4;
-               insn->immediate2.value = get_next(int, insn);
-               insn->immediate2.nbytes = 4;
-               break;
-       default:        /* opnd_bytes must be modified manually */
-               goto err_out;
-       }
-       insn->immediate1.got = insn->immediate2.got = 1;
-
-       return 1;
-err_out:
-       return 0;
-}
-
-/* Decode ptr16:16/32(Ap) */
-static int __get_immptr(struct insn *insn)
-{
-       switch (insn->opnd_bytes) {
-       case 2:
-               insn->immediate1.value = get_next(short, insn);
-               insn->immediate1.nbytes = 2;
-               break;
-       case 4:
-               insn->immediate1.value = get_next(int, insn);
-               insn->immediate1.nbytes = 4;
-               break;
-       case 8:
-               /* ptr16:64 is not exist (no segment) */
-               return 0;
-       default:        /* opnd_bytes must be modified manually */
-               goto err_out;
-       }
-       insn->immediate2.value = get_next(unsigned short, insn);
-       insn->immediate2.nbytes = 2;
-       insn->immediate1.got = insn->immediate2.got = 1;
-
-       return 1;
-err_out:
-       return 0;
-}
-
-/**
- * insn_get_immediate() - Get the immediates of instruction
- * @insn:      &struct insn containing instruction
- *
- * If necessary, first collects the instruction up to and including the
- * displacement bytes.
- * Basically, most of immediates are sign-expanded. Unsigned-value can be
- * get by bit masking with ((1 << (nbytes * 8)) - 1)
- */
-void insn_get_immediate(struct insn *insn)
-{
-       if (insn->immediate.got)
-               return;
-       if (!insn->displacement.got)
-               insn_get_displacement(insn);
-
-       if (inat_has_moffset(insn->attr)) {
-               if (!__get_moffset(insn))
-                       goto err_out;
-               goto done;
-       }
-
-       if (!inat_has_immediate(insn->attr))
-               /* no immediates */
-               goto done;
-
-       switch (inat_immediate_size(insn->attr)) {
-       case INAT_IMM_BYTE:
-               insn->immediate.value = get_next(signed char, insn);
-               insn->immediate.nbytes = 1;
-               break;
-       case INAT_IMM_WORD:
-               insn->immediate.value = get_next(short, insn);
-               insn->immediate.nbytes = 2;
-               break;
-       case INAT_IMM_DWORD:
-               insn->immediate.value = get_next(int, insn);
-               insn->immediate.nbytes = 4;
-               break;
-       case INAT_IMM_QWORD:
-               insn->immediate1.value = get_next(int, insn);
-               insn->immediate1.nbytes = 4;
-               insn->immediate2.value = get_next(int, insn);
-               insn->immediate2.nbytes = 4;
-               break;
-       case INAT_IMM_PTR:
-               if (!__get_immptr(insn))
-                       goto err_out;
-               break;
-       case INAT_IMM_VWORD32:
-               if (!__get_immv32(insn))
-                       goto err_out;
-               break;
-       case INAT_IMM_VWORD:
-               if (!__get_immv(insn))
-                       goto err_out;
-               break;
-       default:
-               /* Here, insn must have an immediate, but failed */
-               goto err_out;
-       }
-       if (inat_has_second_immediate(insn->attr)) {
-               insn->immediate2.value = get_next(signed char, insn);
-               insn->immediate2.nbytes = 1;
-       }
-done:
-       insn->immediate.got = 1;
-
-err_out:
-       return;
-}
-
-/**
- * insn_get_length() - Get the length of instruction
- * @insn:      &struct insn containing instruction
- *
- * If necessary, first collects the instruction up to and including the
- * immediates bytes.
- */
-void insn_get_length(struct insn *insn)
-{
-       if (insn->length)
-               return;
-       if (!insn->immediate.got)
-               insn_get_immediate(insn);
-       insn->length = (unsigned char)((unsigned long)insn->next_byte
-                                    - (unsigned long)insn->kaddr);
-}
diff --git a/tools/objtool/arch/x86/insn/insn.h 
b/tools/objtool/arch/x86/insn/insn.h
deleted file mode 100644
index e23578c..0000000
--- a/tools/objtool/arch/x86/insn/insn.h
+++ /dev/null
@@ -1,211 +0,0 @@
-#ifndef _ASM_X86_INSN_H
-#define _ASM_X86_INSN_H
-/*
- * x86 instruction analysis
- *
- * 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, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (C) IBM Corporation, 2009
- */
-
-/* insn_attr_t is defined in inat.h */
-#include "inat.h"
-
-struct insn_field {
-       union {
-               insn_value_t value;
-               insn_byte_t bytes[4];
-       };
-       /* !0 if we've run insn_get_xxx() for this field */
-       unsigned char got;
-       unsigned char nbytes;
-};
-
-struct insn {
-       struct insn_field prefixes;     /*
-                                        * Prefixes
-                                        * prefixes.bytes[3]: last prefix
-                                        */
-       struct insn_field rex_prefix;   /* REX prefix */
-       struct insn_field vex_prefix;   /* VEX prefix */
-       struct insn_field opcode;       /*
-                                        * opcode.bytes[0]: opcode1
-                                        * opcode.bytes[1]: opcode2
-                                        * opcode.bytes[2]: opcode3
-                                        */
-       struct insn_field modrm;
-       struct insn_field sib;
-       struct insn_field displacement;
-       union {
-               struct insn_field immediate;
-               struct insn_field moffset1;     /* for 64bit MOV */
-               struct insn_field immediate1;   /* for 64bit imm or off16/32 */
-       };
-       union {
-               struct insn_field moffset2;     /* for 64bit MOV */
-               struct insn_field immediate2;   /* for 64bit imm or seg16 */
-       };
-
-       insn_attr_t attr;
-       unsigned char opnd_bytes;
-       unsigned char addr_bytes;
-       unsigned char length;
-       unsigned char x86_64;
-
-       const insn_byte_t *kaddr;       /* kernel address of insn to analyze */
-       const insn_byte_t *end_kaddr;   /* kernel address of last insn in 
buffer */
-       const insn_byte_t *next_byte;
-};
-
-#define MAX_INSN_SIZE  15
-
-#define X86_MODRM_MOD(modrm) (((modrm) & 0xc0) >> 6)
-#define X86_MODRM_REG(modrm) (((modrm) & 0x38) >> 3)
-#define X86_MODRM_RM(modrm) ((modrm) & 0x07)
-
-#define X86_SIB_SCALE(sib) (((sib) & 0xc0) >> 6)
-#define X86_SIB_INDEX(sib) (((sib) & 0x38) >> 3)
-#define X86_SIB_BASE(sib) ((sib) & 0x07)
-
-#define X86_REX_W(rex) ((rex) & 8)
-#define X86_REX_R(rex) ((rex) & 4)
-#define X86_REX_X(rex) ((rex) & 2)
-#define X86_REX_B(rex) ((rex) & 1)
-
-/* VEX bit flags  */
-#define X86_VEX_W(vex) ((vex) & 0x80)  /* VEX3 Byte2 */
-#define X86_VEX_R(vex) ((vex) & 0x80)  /* VEX2/3 Byte1 */
-#define X86_VEX_X(vex) ((vex) & 0x40)  /* VEX3 Byte1 */
-#define X86_VEX_B(vex) ((vex) & 0x20)  /* VEX3 Byte1 */
-#define X86_VEX_L(vex) ((vex) & 0x04)  /* VEX3 Byte2, VEX2 Byte1 */
-/* VEX bit fields */
-#define X86_EVEX_M(vex)        ((vex) & 0x03)          /* EVEX Byte1 */
-#define X86_VEX3_M(vex)        ((vex) & 0x1f)          /* VEX3 Byte1 */
-#define X86_VEX2_M     1                       /* VEX2.M always 1 */
-#define X86_VEX_V(vex) (((vex) & 0x78) >> 3)   /* VEX3 Byte2, VEX2 Byte1 */
-#define X86_VEX_P(vex) ((vex) & 0x03)          /* VEX3 Byte2, VEX2 Byte1 */
-#define X86_VEX_M_MAX  0x1f                    /* VEX3.M Maximum value */
-
-extern void insn_init(struct insn *insn, const void *kaddr, int buf_len, int 
x86_64);
-extern void insn_get_prefixes(struct insn *insn);
-extern void insn_get_opcode(struct insn *insn);
-extern void insn_get_modrm(struct insn *insn);
-extern void insn_get_sib(struct insn *insn);
-extern void insn_get_displacement(struct insn *insn);
-extern void insn_get_immediate(struct insn *insn);
-extern void insn_get_length(struct insn *insn);
-
-/* Attribute will be determined after getting ModRM (for opcode groups) */
-static inline void insn_get_attribute(struct insn *insn)
-{
-       insn_get_modrm(insn);
-}
-
-/* Instruction uses RIP-relative addressing */
-extern int insn_rip_relative(struct insn *insn);
-
-/* Init insn for kernel text */
-static inline void kernel_insn_init(struct insn *insn,
-                                   const void *kaddr, int buf_len)
-{
-#ifdef CONFIG_X86_64
-       insn_init(insn, kaddr, buf_len, 1);
-#else /* CONFIG_X86_32 */
-       insn_init(insn, kaddr, buf_len, 0);
-#endif
-}
-
-static inline int insn_is_avx(struct insn *insn)
-{
-       if (!insn->prefixes.got)
-               insn_get_prefixes(insn);
-       return (insn->vex_prefix.value != 0);
-}
-
-static inline int insn_is_evex(struct insn *insn)
-{
-       if (!insn->prefixes.got)
-               insn_get_prefixes(insn);
-       return (insn->vex_prefix.nbytes == 4);
-}
-
-/* Ensure this instruction is decoded completely */
-static inline int insn_complete(struct insn *insn)
-{
-       return insn->opcode.got && insn->modrm.got && insn->sib.got &&
-               insn->displacement.got && insn->immediate.got;
-}
-
-static inline insn_byte_t insn_vex_m_bits(struct insn *insn)
-{
-       if (insn->vex_prefix.nbytes == 2)       /* 2 bytes VEX */
-               return X86_VEX2_M;
-       else if (insn->vex_prefix.nbytes == 3)  /* 3 bytes VEX */
-               return X86_VEX3_M(insn->vex_prefix.bytes[1]);
-       else                                    /* EVEX */
-               return X86_EVEX_M(insn->vex_prefix.bytes[1]);
-}
-
-static inline insn_byte_t insn_vex_p_bits(struct insn *insn)
-{
-       if (insn->vex_prefix.nbytes == 2)       /* 2 bytes VEX */
-               return X86_VEX_P(insn->vex_prefix.bytes[1]);
-       else
-               return X86_VEX_P(insn->vex_prefix.bytes[2]);
-}
-
-/* Get the last prefix id from last prefix or VEX prefix */
-static inline int insn_last_prefix_id(struct insn *insn)
-{
-       if (insn_is_avx(insn))
-               return insn_vex_p_bits(insn);   /* VEX_p is a SIMD prefix id */
-
-       if (insn->prefixes.bytes[3])
-               return inat_get_last_prefix_id(insn->prefixes.bytes[3]);
-
-       return 0;
-}
-
-/* Offset of each field from kaddr */
-static inline int insn_offset_rex_prefix(struct insn *insn)
-{
-       return insn->prefixes.nbytes;
-}
-static inline int insn_offset_vex_prefix(struct insn *insn)
-{
-       return insn_offset_rex_prefix(insn) + insn->rex_prefix.nbytes;
-}
-static inline int insn_offset_opcode(struct insn *insn)
-{
-       return insn_offset_vex_prefix(insn) + insn->vex_prefix.nbytes;
-}
-static inline int insn_offset_modrm(struct insn *insn)
-{
-       return insn_offset_opcode(insn) + insn->opcode.nbytes;
-}
-static inline int insn_offset_sib(struct insn *insn)
-{
-       return insn_offset_modrm(insn) + insn->modrm.nbytes;
-}
-static inline int insn_offset_displacement(struct insn *insn)
-{
-       return insn_offset_sib(insn) + insn->sib.nbytes;
-}
-static inline int insn_offset_immediate(struct insn *insn)
-{
-       return insn_offset_displacement(insn) + insn->displacement.nbytes;
-}
-
-#endif /* _ASM_X86_INSN_H */
diff --git a/arch/x86/lib/inat.c b/tools/objtool/arch/x86/lib/inat.c
similarity index 100%
copy from arch/x86/lib/inat.c
copy to tools/objtool/arch/x86/lib/inat.c
diff --git a/arch/x86/lib/insn.c b/tools/objtool/arch/x86/lib/insn.c
similarity index 100%
copy from arch/x86/lib/insn.c
copy to tools/objtool/arch/x86/lib/insn.c
diff --git a/tools/objtool/arch/x86/insn/x86-opcode-map.txt 
b/tools/objtool/arch/x86/lib/x86-opcode-map.txt
similarity index 100%
rename from tools/objtool/arch/x86/insn/x86-opcode-map.txt
rename to tools/objtool/arch/x86/lib/x86-opcode-map.txt
diff --git a/tools/objtool/arch/x86/insn/gen-insn-attr-x86.awk 
b/tools/objtool/arch/x86/tools/gen-insn-attr-x86.awk
similarity index 100%
rename from tools/objtool/arch/x86/insn/gen-insn-attr-x86.awk
rename to tools/objtool/arch/x86/tools/gen-insn-attr-x86.awk
diff --git a/tools/objtool/orc.h b/tools/objtool/orc.h
index a4139e3..b0e92a6 100644
--- a/tools/objtool/orc.h
+++ b/tools/objtool/orc.h
@@ -18,7 +18,7 @@
 #ifndef _ORC_H
 #define _ORC_H
 
-#include "orc_types.h"
+#include <asm/orc_types.h>
 
 struct objtool_file;
 

Reply via email to