diff options
author | Mike Frysinger <vapier@gentoo.org> | 2015-03-28 14:09:11 -0400 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2015-03-28 17:45:30 -0400 |
commit | ed4d32c28adc5f00ee9bc0e4ac785eeff5e1dc74 (patch) | |
tree | e1c9528e7a707c4953bbe311ca33e4c26de9390f /sim/sh/gencode.c | |
parent | 6d89786cb31dcf9b1a4e5b6c7b88c15102e9381a (diff) | |
download | fsf-binutils-gdb-ed4d32c28adc5f00ee9bc0e4ac785eeff5e1dc74.zip fsf-binutils-gdb-ed4d32c28adc5f00ee9bc0e4ac785eeff5e1dc74.tar.gz fsf-binutils-gdb-ed4d32c28adc5f00ee9bc0e4ac785eeff5e1dc74.tar.bz2 |
sim: sh: clean up gencode
The build line was missing the normal BUILD_xxx flags. Once we added
that, we get warnings that weren't shown before. As we fix those, we
notice that the -d option segfaults because it tries to write readonly
memory. Fix that too as part of the const/prototype clean up.
Diffstat (limited to 'sim/sh/gencode.c')
-rw-r--r-- | sim/sh/gencode.c | 104 |
1 files changed, 37 insertions, 67 deletions
diff --git a/sim/sh/gencode.c b/sim/sh/gencode.c index bc65604..0fb1b87 100644 --- a/sim/sh/gencode.c +++ b/sim/sh/gencode.c @@ -30,22 +30,26 @@ */ +#include <ctype.h> #include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> #define MAX_NR_STUFF 42 typedef struct { - char *defs; - char *refs; - char *name; - char *code; - char *stuff[MAX_NR_STUFF]; + const char *defs; + const char *refs; + const char *name; + const char *code; + const char * const stuff[MAX_NR_STUFF]; int index; } op; -op tab[] = +static op tab[] = { { "n", "", "add #<imm>,<REG_N>", "0111nnnni8*1....", @@ -2462,7 +2466,8 @@ op ppi_tab[] = }; /* Tables of things to put into enums for sh-opc.h */ -static char *nibble_type_list[] = +static +const char * const nibble_type_list[] = { "HEX_0", "HEX_1", @@ -2497,7 +2502,7 @@ static char *nibble_type_list[] = 0 }; static -char *arg_type_list[] = +const char * const arg_type_list[] = { "A_END", "A_BDISP12", @@ -2530,27 +2535,11 @@ char *arg_type_list[] = 0, }; -static void -make_enum_list (name, s) - char *name; - char **s; -{ - int i = 1; - printf ("typedef enum {\n"); - while (*s) - { - printf ("\t%s,\n", *s); - s++; - i++; - } - printf ("} %s;\n", name); -} - static int -qfunc (a, b) - op *a; - op *b; +qfunc (const void *va, const void *vb) { + const op *a = va; + const op *b = vb; char bufa[9]; char bufb[9]; int diff; @@ -2569,7 +2558,7 @@ qfunc (a, b) } static void -sorttab () +sorttab (void) { op *p = tab; int len = 0; @@ -2583,7 +2572,7 @@ sorttab () } static void -gengastab () +gengastab (void) { op *p; sorttab (); @@ -2598,9 +2587,7 @@ static unsigned short table[1 << 16]; static int warn_conflicts = 0; static void -conflict_warn (val, i) - int val; - int i; +conflict_warn (int val, int i) { int ix, key; int j = table[val]; @@ -2651,10 +2638,7 @@ conflict_warn (val, i) right entries in 'table' with the opcode index. */ static void -expand_opcode (val, i, s) - int val; - int i; - char *s; +expand_opcode (int val, int i, const char *s) { if (*s == 0) { @@ -2779,10 +2763,7 @@ expand_opcode (val, i, s) statement entry. */ static void -dumptable (name, size, start) - char *name; - int size; - int start; +dumptable (const char *name, int size, int start) { int lump = 256; int online = 16; @@ -2817,8 +2798,7 @@ dumptable (name, size, start) static void -filltable (p) - op *p; +filltable (op *p) { static int index = 1; @@ -2835,7 +2815,7 @@ filltable (p) processing insns (ppi) for code 0xf800 (ppi nopx nopy). Copy the latter tag to represent all combinations of ppi with ddt. */ static void -expand_ppi_movxy () +expand_ppi_movxy (void) { int i; @@ -2845,8 +2825,7 @@ expand_ppi_movxy () } static void -gensim_caselist (p) - op *p; +gensim_caselist (op *p) { for (; p->name; p++) { @@ -2854,8 +2833,7 @@ gensim_caselist (p) int sextbit = -1; int needm = 0; int needn = 0; - - char *s = p->code; + const char *s = p->code; printf (" /* %s %s */\n", p->name, p->code); printf (" case %d: \n", p->index); @@ -3038,7 +3016,7 @@ gensim_caselist (p) { /* Do the refs. */ - char *r; + const char *r; for (r = p->refs; *r; r++) { if (*r == 'f') printf (" CREF (15);\n"); @@ -3080,7 +3058,7 @@ gensim_caselist (p) { /* Do the defs. */ - char *r; + const char *r; for (r = p->defs; *r; r++) { if (*r == 'f') printf (" CDEF (15);\n"); @@ -3114,7 +3092,7 @@ gensim_caselist (p) } static void -gensim () +gensim (void) { printf ("{\n"); printf ("/* REG_xy = [r4, r5, r0, r1]. */\n"); @@ -3143,19 +3121,17 @@ gensim () } static void -gendefines () +gendefines (void) { op *p; filltable (tab); for (p = tab; p->name; p++) { - char *s = p->name; + const char *s = p->name; printf ("#define OPC_"); while (*s) { - if (isupper (*s)) - *s = tolower (*s); if (isalpha (*s)) - printf ("%c", *s); + printf ("%c", tolower (*s)); if (*s == ' ') printf ("_"); if (*s == '@') @@ -3175,10 +3151,7 @@ static int ppi_index; NOTE: tail recursion optimization removed for simplicity. */ static void -expand_ppi_code (val, i, s) - int val; - int i; - char *s; +expand_ppi_code (int val, int i, const char *s) { int j; @@ -3223,7 +3196,7 @@ expand_ppi_code (val, i, s) } static void -ppi_filltable () +ppi_filltable (void) { op *p; ppi_index = 1; @@ -3236,7 +3209,7 @@ ppi_filltable () } static void -ppi_gensim () +ppi_gensim (void) { op *p = ppi_tab; @@ -3294,8 +3267,7 @@ ppi_gensim () int shift, j; int cond = 0; int havedecl = 0; - - char *s = p->code; + const char *s = p->code; printf (" /* %s %s */\n", p->name, p->code); printf (" case %d: \n", p->index); @@ -3406,9 +3378,7 @@ ppi_gensim () } int -main (ac, av) - int ac; - char **av; +main (int ac, char *av[]) { /* Verify the table before anything else. */ { @@ -3418,7 +3388,7 @@ main (ac, av) /* Check that the code field contains 16 bits. */ if (strlen (p->code) != 16) { - fprintf (stderr, "Code `%s' length wrong (%d) for `%s'\n", + fprintf (stderr, "Code `%s' length wrong (%zu) for `%s'\n", p->code, strlen (p->code), p->name); abort (); } |