x86: Allow x86-32 instruction decoder selftest on x86-64
authorMasami Hiramatsu <mhiramat@redhat.com>
Fri, 28 Aug 2009 22:13:19 +0000 (18:13 -0400)
committerFrederic Weisbecker <fweisbec@gmail.com>
Fri, 4 Sep 2009 16:14:04 +0000 (18:14 +0200)
Pass $(CONFIG_64BIT) to the x86 insn decoder selftest in case we are
decoding 32bit code on x86-64, which will happen when building kernel
with ARCH=i386 on x86-64.

Signed-off-by: Masami Hiramatsu <mhiramat@redhat.com>
Cc: Jim Keniston <jkenisto@us.ibm.com>
Cc: Ingo Molnar <mingo@elte.hu>
LKML-Reference: <20090828221319.8778.88508.stgit@localhost.localdomain>
Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
arch/x86/tools/Makefile
arch/x86/tools/test_get_len.c

index 95e9cc4..1bd006c 100644 (file)
@@ -1,6 +1,6 @@
 PHONY += posttest
 quiet_cmd_posttest = TEST    $@
-      cmd_posttest = $(OBJDUMP) -d -j .text $(objtree)/vmlinux | awk -f $(srctree)/arch/x86/tools/distill.awk | $(obj)/test_get_len
+      cmd_posttest = $(OBJDUMP) -d -j .text $(objtree)/vmlinux | awk -f $(srctree)/arch/x86/tools/distill.awk | $(obj)/test_get_len $(CONFIG_64BIT)
 
 posttest: $(obj)/test_get_len vmlinux
        $(call cmd,posttest)
index 1e81adb..a3273f4 100644 (file)
@@ -45,7 +45,7 @@ const char *prog;
 static void usage(void)
 {
        fprintf(stderr, "Usage: objdump -d a.out | awk -f distill.awk |"
-               " ./test_get_len\n");
+               " %s [y|n](64bit flag)\n", prog);
        exit(1);
 }
 
@@ -63,11 +63,15 @@ int main(int argc, char **argv)
        unsigned char insn_buf[16];
        struct insn insn;
        int insns = 0;
+       int x86_64 = 0;
 
        prog = argv[0];
-       if (argc > 1)
+       if (argc > 2)
                usage();
 
+       if (argc == 2 && argv[1][0] == 'y')
+               x86_64 = 1;
+
        while (fgets(line, BUFSIZE, stdin)) {
                char copy[BUFSIZE], *s, *tab1, *tab2;
                int nb = 0;
@@ -93,11 +97,7 @@ int main(int argc, char **argv)
                                break;
                }
                /* Decode an instruction */
-#ifdef __x86_64__
-               insn_init(&insn, insn_buf, 1);
-#else
-               insn_init(&insn, insn_buf, 0);
-#endif
+               insn_init(&insn, insn_buf, x86_64);
                insn_get_length(&insn);
                if (insn.length != nb) {
                        fprintf(stderr, "Error: %s", line);