diff options
Diffstat (limited to 'opcodes/s390-mkopc.c')
-rw-r--r-- | opcodes/s390-mkopc.c | 49 |
1 files changed, 35 insertions, 14 deletions
diff --git a/opcodes/s390-mkopc.c b/opcodes/s390-mkopc.c index 5f921ee..aad093f 100644 --- a/opcodes/s390-mkopc.c +++ b/opcodes/s390-mkopc.c @@ -21,9 +21,27 @@ #include <stdio.h> #include <stdlib.h> +#include <stdarg.h> #include <string.h> #include "opcode/s390.h" +/* Return code. */ +int return_code = EXIT_SUCCESS; + +/* Helper to print an error message and set the return code. */ +static void __attribute__ ((format (printf, 1, 2))) +print_error (const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + fprintf(stderr, "Error: "); + vfprintf(stderr, fmt, ap); + va_end(ap); + + return_code = EXIT_FAILURE; +} + struct op_struct { char opcode[16]; @@ -223,8 +241,7 @@ insertExpandedMnemonic (char *opcode, char *mnemonic, char *format, if (mask_start & 3) { - fprintf (stderr, "Conditional mask not at nibble boundary in: %s\n", - mnemonic); + print_error ("Mnemonic \"%s\": Conditional mask not at nibble boundary\n", mnemonic); return; } @@ -257,7 +274,7 @@ insertExpandedMnemonic (char *opcode, char *mnemonic, char *format, return; malformed_mnemonic: - fprintf (stderr, "Malformed mnemonic: %s\n", mnemonic); + print_error ("Malformed mnemonic: %s\n", mnemonic); } static const char file_header[] = @@ -343,8 +360,8 @@ main (void) cpu_string, modes_string, flags_string); if (num_matched != 6 && num_matched != 7) { - fprintf (stderr, "Couldn't scan line %s\n", currentLine); - exit (1); + print_error ("Couldn't scan line %s\n", currentLine); + exit (EXIT_FAILURE); } if (strcmp (cpu_string, "g5") == 0 @@ -385,8 +402,9 @@ main (void) || strcmp (cpu_string, "arch14") == 0) min_cpu = S390_OPCODE_ARCH14; else { - fprintf (stderr, "Couldn't parse cpu string %s\n", cpu_string); - exit (1); + print_error ("Mnemonic \"%s\": Couldn't parse CPU string: %s\n", + mnemonic, cpu_string); + goto continue_loop; } str = modes_string; @@ -401,9 +419,9 @@ main (void) mode_bits |= 1 << S390_OPCODE_ZARCH; str += 5; } else { - fprintf (stderr, "Couldn't parse modes string %s\n", - modes_string); - exit (1); + print_error ("Mnemonic \"%s\": Couldn't parse modes string: %s\n", + mnemonic, modes_string); + goto continue_loop; } if (*str == ',') str++; @@ -444,17 +462,20 @@ main (void) flag_bits |= S390_INSTR_FLAGS_CLASS_JUMPSR; str += 6; } else { - fprintf (stderr, "Couldn't parse flags string %s\n", - flags_string); - exit (1); + print_error ("Mnemonic \"%s\": Couldn't parse flags string: %s\n", + mnemonic, flags_string); + goto continue_loop; } if (*str == ',') str++; } while (*str != 0); } insertExpandedMnemonic (opcode, mnemonic, format, min_cpu, mode_bits, flag_bits); + + continue_loop: + ; } dumpTable (); - return 0; + return return_code; } |