x86: insn decoder test checks objdump version
authorMasami Hiramatsu <mhiramat@redhat.com>
Fri, 20 Nov 2009 17:13:14 +0000 (12:13 -0500)
committerH. Peter Anvin <hpa@zytor.com>
Sat, 21 Nov 2009 07:01:04 +0000 (23:01 -0800)
Check objdump version before using it for insn decoder build test,
because some older objdump can't decode AVX code correctly.

Signed-off-by: Masami Hiramatsu <mhiramat@redhat.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Stephen Rothwell <sfr@canb.auug.org.au>
Cc: Randy Dunlap <rdunlap@xenotime.net>
Cc: Jim Keniston <jkenisto@us.ibm.com>
LKML-Reference: <20091120171314.6715.30390.stgit@dhcp-100-2-132.bos.redhat.com>
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
arch/x86/tools/Makefile
arch/x86/tools/chkobjdump.awk [new file with mode: 0644]

index c80b079..f820826 100644 (file)
@@ -12,8 +12,11 @@ else
   posttest_64bit = -n
 endif
 
+distill_awk = $(srctree)/arch/x86/tools/distill.awk
+chkobjdump = $(srctree)/arch/x86/tools/chkobjdump.awk
+
 quiet_cmd_posttest = TEST    $@
-      cmd_posttest = $(OBJDUMP) -d -j .text $(objtree)/vmlinux | $(AWK) -f $(srctree)/arch/x86/tools/distill.awk | $(obj)/test_get_len $(posttest_64bit) $(posttest_verbose)
+      cmd_posttest = ($(OBJDUMP) -v | $(AWK) -f $(chkobjdump)) || $(OBJDUMP) -d -j .text $(objtree)/vmlinux | $(AWK) -f $(distill_awk) | $(obj)/test_get_len $(posttest_64bit) $(posttest_verbose)
 
 posttest: $(obj)/test_get_len vmlinux
        $(call cmd,posttest)
diff --git a/arch/x86/tools/chkobjdump.awk b/arch/x86/tools/chkobjdump.awk
new file mode 100644 (file)
index 0000000..0d13cd9
--- /dev/null
@@ -0,0 +1,23 @@
+# GNU objdump version checker
+#
+# Usage:
+# objdump -v | awk -f chkobjdump.awk
+BEGIN {
+       # objdump version 2.19 or later is OK for the test.
+       od_ver = 2;
+       od_sver = 19;
+}
+
+/^GNU/ {
+       split($4, ver, ".");
+       if (ver[1] > od_ver ||
+           (ver[1] == od_ver && ver[2] >= od_sver)) {
+               exit 1;
+       } else {
+               printf("Warning: objdump version %s is older than %d.%d\n",
+                      $4, od_ver, od_sver);
+               print("Warning: Skipping posttest.");
+               # Logic is inverted, because we just skip test without error.
+               exit 0;
+       }
+}