diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2007-09-06 21:31:55 +0000 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2007-09-06 21:31:55 +0000 |
commit | 34edb9ad0763d910e11da84a186febeba8354f30 (patch) | |
tree | a33a723be8bdb5e3935b5307783fa01128ab51ec /opcodes/i386-gen.c | |
parent | f0027ce2699c8d2a1e9f263838f2f3dd3c74b0eb (diff) | |
download | gdb-34edb9ad0763d910e11da84a186febeba8354f30.zip gdb-34edb9ad0763d910e11da84a186febeba8354f30.tar.gz gdb-34edb9ad0763d910e11da84a186febeba8354f30.tar.bz2 |
2007-09-06 H.J. Lu <hongjiu.lu@intel.com>
* i386-gen.c (table): New.
(process_i386_opcodes): Report errno when faied to open
i386-opc.tbl. Output opcodes to table. Close i386-opc.tbl
before return.
(process_i386_registers): Report errno when faied to open
i386-reg.tbl. Output opcodes to table. Close i386-reg.tbl
before return.
(main): Open i386-tbl.h for output.
* Makefile.am ($(srcdir)/i386-tbl.h): Remove " > $@".
* Makefile.in: Regenerated.
Diffstat (limited to 'opcodes/i386-gen.c')
-rw-r--r-- | opcodes/i386-gen.c | 65 |
1 files changed, 40 insertions, 25 deletions
diff --git a/opcodes/i386-gen.c b/opcodes/i386-gen.c index fc27504..2be26f1 100644 --- a/opcodes/i386-gen.c +++ b/opcodes/i386-gen.c @@ -33,6 +33,9 @@ static const char *program_name = NULL; static int debug = 0; +/* File of i386 opcode and register tables. */ +static FILE *table; + static void fail (const char *message, ...) { @@ -106,10 +109,11 @@ process_i386_opcodes (void) char *cpu_flags, *opcode_modifier, *operand_types [MAX_OPERANDS]; if (fp == NULL) - fail (_("can't find i386-opc.tbl for reading\n")); + fail (_("can't find i386-opc.tbl for reading, errno = %s\n"), + strerror (errno)); - printf ("\n/* i386 opcode table. */\n\n"); - printf ("const template i386_optab[] =\n{\n"); + fprintf (table, "\n/* i386 opcode table. */\n\n"); + fprintf (table, "const template i386_optab[] =\n{\n"); while (!feof (fp)) { @@ -129,7 +133,7 @@ process_i386_opcodes (void) switch (p[0]) { case '#': - printf ("%s\n", p); + fprintf (table, "%s\n", p); case '\0': continue; break; @@ -218,13 +222,13 @@ process_i386_opcodes (void) } } - printf (" { \"%s\", %s, %s, %s, %s,\n", - name, operands, base_opcode, extension_opcode, - cpu_flags); + fprintf (table, " { \"%s\", %s, %s, %s, %s,\n", + name, operands, base_opcode, extension_opcode, + cpu_flags); - printf (" %s,\n", opcode_modifier); + fprintf (table, " %s,\n", opcode_modifier); - printf (" { "); + fprintf (table, " { "); for (i = 0; i < ARRAY_SIZE (operand_types); i++) { @@ -232,20 +236,22 @@ process_i386_opcodes (void) || *operand_types[i] == '0') { if (i == 0) - printf ("0"); + fprintf (table, "0"); break; } if (i != 0) - printf (",\n "); + fprintf (table, ",\n "); - printf ("%s", operand_types[i]); + fprintf (table, "%s", operand_types[i]); } - printf (" } },\n"); + fprintf (table, " } },\n"); } - printf (" { NULL, 0, 0, 0, 0, 0, { 0 } }\n"); - printf ("};\n"); + fclose (fp); + + fprintf (table, " { NULL, 0, 0, 0, 0, 0, { 0 } }\n"); + fprintf (table, "};\n"); } static void @@ -257,10 +263,11 @@ process_i386_registers (void) char *reg_name, *reg_type, *reg_flags, *reg_num; if (fp == NULL) - fail (_("can't find i386-reg.tbl for reading\n")); + fail (_("can't find i386-reg.tbl for reading, errno = %s\n"), + strerror (errno)); - printf ("\n/* i386 register table. */\n\n"); - printf ("const reg_entry i386_regtab[] =\n{\n"); + fprintf (table, "\n/* i386 register table. */\n\n"); + fprintf (table, "const reg_entry i386_regtab[] =\n{\n"); while (!feof (fp)) { @@ -280,7 +287,7 @@ process_i386_registers (void) switch (p[0]) { case '#': - printf ("%s\n", p); + fprintf (table, "%s\n", p); case '\0': continue; break; @@ -311,13 +318,15 @@ process_i386_registers (void) /* Find reg_num. */ reg_num = next_field (str, &str); - printf (" { \"%s\", %s, %s, %s },\n", - reg_name, reg_type, reg_flags, reg_num); + fprintf (table, " { \"%s\", %s, %s, %s },\n", + reg_name, reg_type, reg_flags, reg_num); } - printf ("};\n"); + fclose (fp); + + fprintf (table, "};\n"); - printf ("\nconst unsigned int i386_regtab_size = ARRAY_SIZE (i386_regtab);\n"); + fprintf (table, "\nconst unsigned int i386_regtab_size = ARRAY_SIZE (i386_regtab);\n"); } /* Program options. */ @@ -386,8 +395,12 @@ main (int argc, char **argv) fail (_("unable to change directory to \"%s\", errno = %s\n"), srcdir, strerror (errno)); - printf ("/* This file is automatically generated by i386-gen. Do not edit! */\n"); - printf ("/* Copyright 2007 Free Software Foundation, Inc.\n\ + table = fopen ("i386-tbl.h", "w"); + if (table == NULL) + fail (_("can't create i386-tbl.h, errno = %s\n"), strerror (errno)); + + fprintf (table, "/* This file is automatically generated by i386-gen. Do not edit! */\n\ +/* Copyright 2007 Free Software Foundation, Inc.\n\ \n\ This file is part of the GNU opcodes library.\n\ \n\ @@ -409,5 +422,7 @@ main (int argc, char **argv) process_i386_opcodes (); process_i386_registers (); + fclose (table); + exit (0); } |