x86: Instruction decoder test should generate build warning
authorMasami Hiramatsu <mhiramat@redhat.com>
Mon, 16 Nov 2009 23:06:31 +0000 (18:06 -0500)
committerIngo Molnar <mingo@elte.hu>
Thu, 19 Nov 2009 20:40:13 +0000 (21:40 +0100)
Since some instructions are not decoded correctly by older
versions of objdump, it may cause false positive error in insn
decoder posttest.

This changes build error of insn decoder test to build warning.

Signed-off-by: Masami Hiramatsu <mhiramat@redhat.com>
Cc: systemtap <systemtap@sources.redhat.com>
Cc: DLE <dle-develop@lists.sourceforge.net>
Cc: Stephen Rothwell <sfr@canb.auug.org.au>
Cc: Randy Dunlap <rdunlap@xenotime.net>
Cc: Jim Keniston <jkenisto@us.ibm.com>
Cc: Stephen Rothwell <sfr@canb.auug.org.au>
LKML-Reference: <20091116230631.5250.41579.stgit@harusame>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
arch/x86/tools/test_get_len.c

index af75e07217ba5616f8cebed4951624bc6787594d..d8214dc03fa7a46e4dc2c9408b8674a13017e1e0 100644 (file)
@@ -114,6 +114,7 @@ int main(int argc, char **argv)
        unsigned char insn_buf[16];
        struct insn insn;
        int insns = 0, c;
+       int warnings = 0;
 
        parse_args(argc, argv);
 
@@ -151,18 +152,22 @@ int main(int argc, char **argv)
                insn_init(&insn, insn_buf, x86_64);
                insn_get_length(&insn);
                if (insn.length != nb) {
-                       fprintf(stderr, "Error: %s found a difference at %s\n",
+                       warnings++;
+                       fprintf(stderr, "Warning: %s found difference at %s\n",
                                prog, sym);
-                       fprintf(stderr, "Error: %s", line);
-                       fprintf(stderr, "Error: objdump says %d bytes, but "
+                       fprintf(stderr, "Warning: %s", line);
+                       fprintf(stderr, "Warning: objdump says %d bytes, but "
                                "insn_get_length() says %d\n", nb,
                                insn.length);
                        if (verbose)
                                dump_insn(stderr, &insn);
-                       exit(2);
                }
        }
-       fprintf(stderr, "Succeed: decoded and checked %d instructions\n",
-               insns);
+       if (warnings)
+               fprintf(stderr, "Warning: decoded and checked %d"
+                       " instructions with %d warnings\n", insns, warnings);
+       else
+               fprintf(stderr, "Succeed: decoded and checked %d"
+                       " instructions\n", insns);
        return 0;
 }