diff options
Diffstat (limited to 'tools/d2c/hooks')
-rw-r--r-- | tools/d2c/hooks/Makefile.am | 3 | ||||
-rw-r--r-- | tools/d2c/hooks/manager.c | 21 | ||||
-rw-r--r-- | tools/d2c/hooks/manager.h | 4 | ||||
-rw-r--r-- | tools/d2c/hooks/tokens.l | 10 |
4 files changed, 16 insertions, 22 deletions
diff --git a/tools/d2c/hooks/Makefile.am b/tools/d2c/hooks/Makefile.am index 27d88ec..c049ac5 100644 --- a/tools/d2c/hooks/Makefile.am +++ b/tools/d2c/hooks/Makefile.am @@ -26,6 +26,9 @@ libd2chooks_la_SOURCES = \ tokens.l \ grammar.y +# _GNU_SOURCE : asprintf +libd2chooks_la_CFLAGS = -D_GNU_SOURCE + # Automake fait les choses à moitié CLEANFILES = grammar.h grammar.c grammar.output tokens.c tokens.h diff --git a/tools/d2c/hooks/manager.c b/tools/d2c/hooks/manager.c index ff2749b..02544d0 100644 --- a/tools/d2c/hooks/manager.c +++ b/tools/d2c/hooks/manager.c @@ -134,7 +134,6 @@ void register_hook_function(instr_hooks *hooks, char *type, char *name) /****************************************************************************** * * * Paramètres : hooks = gestionnaire d'un ensemble de fonctions associées. * -* top = indique si l'écriture se réalise au plus haut niveau.* * fd = descripteur d'un flux ouvert en écriture. * * * * Description : Déclare des opérations complémentaires pour une instruction. * @@ -145,7 +144,7 @@ void register_hook_function(instr_hooks *hooks, char *type, char *name) * * ******************************************************************************/ -bool declare_hook_functions(const instr_hooks *hooks, bool top, int fd) +bool declare_hook_functions(const instr_hooks *hooks, int fd) { bool result; /* Bilan à retourner */ size_t i; /* Boucle de parcours #1 */ @@ -176,27 +175,18 @@ bool declare_hook_functions(const instr_hooks *hooks, bool top, int fd) if (hooks->func_count > 0) { - if (!top) - dprintf(fd, "\t"); - dprintf(fd, "\tstatic const instr_hook_fc hooks[IPH_COUNT] = {\n\n"); for (i = 0; i < (sizeof(hook_types) / sizeof(hook_types[0])); i++) { func = find_hook_by_name(hooks, hook_types[i]); - if (!top) - dprintf(fd, "\t"); - dprintf(fd, "\t\t[IPH_%s] = (instr_hook_fc)%s,\n", hook_types[i], func != NULL ? func->name : "NULL"); } dprintf(fd, "\n"); - if (!top) - dprintf(fd, "\t"); - dprintf(fd, "\t};\n"); dprintf(fd, "\n"); @@ -211,7 +201,6 @@ bool declare_hook_functions(const instr_hooks *hooks, bool top, int fd) /****************************************************************************** * * * Paramètres : hooks = gestionnaire d'un ensemble de fonctions associées. * -* top = indique si l'écriture se réalise au plus haut niveau.* * fd = descripteur d'un flux ouvert en écriture. * * * * Description : Associe dans le code des fonctions à une instruction. * @@ -222,7 +211,7 @@ bool declare_hook_functions(const instr_hooks *hooks, bool top, int fd) * * ******************************************************************************/ -bool write_hook_functions(const instr_hooks *hooks, bool top, int fd) +bool write_hook_functions(const instr_hooks *hooks, int fd) { bool result; /* Bilan à retourner */ @@ -230,11 +219,7 @@ bool write_hook_functions(const instr_hooks *hooks, bool top, int fd) if (hooks->func_count > 0) { - if (!top) - dprintf(fd, "\t"); - - dprintf(fd, "\tg_arch_instruction_set_hooks(%s, hooks);\n", - top ? "result" : "instr"); + dprintf(fd, "\tg_arch_instruction_set_hooks(result, hooks);\n"); dprintf(fd, "\n"); diff --git a/tools/d2c/hooks/manager.h b/tools/d2c/hooks/manager.h index c502ab0..3647b74 100644 --- a/tools/d2c/hooks/manager.h +++ b/tools/d2c/hooks/manager.h @@ -44,10 +44,10 @@ void delete_instr_hooks(instr_hooks *); void register_hook_function(instr_hooks *, char *, char *); /* Déclare des opérations complémentaires pour une instruction. */ -bool declare_hook_functions(const instr_hooks *, bool, int); +bool declare_hook_functions(const instr_hooks *, int); /* Associe dans le code des fonctions à une instruction. */ -bool write_hook_functions(const instr_hooks *, bool, int); +bool write_hook_functions(const instr_hooks *, int); diff --git a/tools/d2c/hooks/tokens.l b/tools/d2c/hooks/tokens.l index 6aebe87..1f72d2c 100644 --- a/tools/d2c/hooks/tokens.l +++ b/tools/d2c/hooks/tokens.l @@ -16,11 +16,17 @@ %% -" " { } +[ \t\n] { } -[ \t\n]+ { } [a-z_][a-z0-9_]* { yylvalp->string = strdup(yytext); return NAME; } "=" { return EQ; } +. { + char *msg; + asprintf(&msg, "Unhandled token in d2c hooks block: '%s'", yytext); + YY_FATAL_ERROR(msg); + free(msg); + } + %% |