diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2013-01-13 20:23:05 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2013-01-13 20:23:05 (GMT) |
commit | 35a6cd881528b5f77ce09476eccb39d02d9cc634 (patch) | |
tree | 13e0f080a277eb0647b6917f18fbe2cb84a67369 /src/analysis/blocks/virtual.c | |
parent | 221bcaeeb06415d501f9abbb9bc4b7d8339af1fe (diff) |
Defined the registers allocation needs for each basic block.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@323 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/analysis/blocks/virtual.c')
-rw-r--r-- | src/analysis/blocks/virtual.c | 31 |
1 files changed, 20 insertions, 11 deletions
diff --git a/src/analysis/blocks/virtual.c b/src/analysis/blocks/virtual.c index 2385f67..584e57d 100644 --- a/src/analysis/blocks/virtual.c +++ b/src/analysis/blocks/virtual.c @@ -43,9 +43,10 @@ struct _GVirtualBlock GInstrBlock **children; /* Sous-blocs intégrés */ size_t children_count; /* Nombre de ces sous-blocs */ +#if 0 reg_access *accesses; /* Commodités d'accès #1 */ size_t count; /* Commodités d'accès #2 */ - +#endif }; @@ -70,7 +71,7 @@ static void g_virtual_block_dispose(GVirtualBlock *); static void g_virtual_block_finalize(GVirtualBlock *); /* Recherche le bloc contenant une adresse donnée. */ -static GInstrBlock *g_virtual_block_find_by_addr(const GVirtualBlock *, vmpa_t); +static GInstrBlock *g_virtual_block_find_by_addr(const GVirtualBlock *, vmpa_t, bool); /* Parcours le bloc d'instructions dans un ordre donné. */ static bool g_virtual_block_visit(GVirtualBlock *, instr_block_visitor_cb, void *); @@ -79,7 +80,7 @@ static bool g_virtual_block_visit(GVirtualBlock *, instr_block_visitor_cb, void static void g_virtual_block_list_all_blocks(const GVirtualBlock *, GInstrBlock ***, size_t *); /* Fournit les différents accès aux registres. */ -static const reg_access *g_virtual_block_list_regs_accesses(const GVirtualBlock *, size_t *); +//static const reg_access *g_virtual_block_list_regs_accesses(const GVirtualBlock *, size_t *); @@ -132,7 +133,7 @@ static void g_virtual_block_init(GVirtualBlock *block) parent->find_by_addr = (find_by_addr_fc)g_virtual_block_find_by_addr; parent->visit_blocks = (visit_all_blocks_fc)g_virtual_block_visit; parent->list_blocks = (list_all_blocks_fc)g_virtual_block_list_all_blocks; - parent->list_regs = (list_regs_accesses_fc)g_virtual_block_list_regs_accesses; + //parent->list_regs = (list_regs_accesses_fc)g_virtual_block_list_regs_accesses; } @@ -175,9 +176,6 @@ static void g_virtual_block_dispose(GVirtualBlock *block) static void g_virtual_block_finalize(GVirtualBlock *block) { - if (block->accesses != NULL) - free(block->accesses); - if (block->children != NULL) free(block->children); @@ -213,6 +211,7 @@ GInstrBlock *g_virtual_block_new(void) * * * Paramètres : block = bloc de départ des recherches. * * addr = ensemble de blocs à parcourir. * +* final = indique si la cible ou le conteneur est renvoyée. * * * * Description : Recherche le bloc contenant une adresse donnée. * * * @@ -222,16 +221,25 @@ GInstrBlock *g_virtual_block_new(void) * * ******************************************************************************/ -static GInstrBlock *g_virtual_block_find_by_addr(const GVirtualBlock *block, vmpa_t addr) +static GInstrBlock *g_virtual_block_find_by_addr(const GVirtualBlock *block, vmpa_t addr, bool final) { GInstrBlock *result; /* Resultat à retourner */ size_t i; /* Boucle de parcours */ + GInstrBlock *ret; /* Retour des inspections */ result = NULL; for (i = 0; i < block->children_count && result == NULL; i++) - if (g_instr_block_find_by_addr(block->children[i], addr)) - result = block->children[i]; + { + ret = g_instr_block_find_by_addr(block->children[i], addr, final); + + if (ret != NULL) + { + if (final) result = ret; + else result = block->children[i]; + } + + } return result; @@ -292,7 +300,7 @@ static void g_virtual_block_list_all_blocks(const GVirtualBlock *block, GInstrBl } - +#if 0 /****************************************************************************** * * * Paramètres : block = bloc d'instructions à consulter. * @@ -313,6 +321,7 @@ static const reg_access *g_virtual_block_list_regs_accesses(const GVirtualBlock return NULL; } +#endif /****************************************************************************** |