summaryrefslogtreecommitdiff
path: root/tools/d2c/hooks
diff options
context:
space:
mode:
Diffstat (limited to 'tools/d2c/hooks')
-rw-r--r--tools/d2c/hooks/Makefile.am3
-rw-r--r--tools/d2c/hooks/manager.c21
-rw-r--r--tools/d2c/hooks/manager.h4
-rw-r--r--tools/d2c/hooks/tokens.l10
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);
+ }
+
%%