summaryrefslogtreecommitdiff
path: root/src/format
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2018-12-08 14:03:41 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2018-12-08 14:03:41 (GMT)
commit9e3c072316b1183c256595f394f3ca22f2d2b66e (patch)
treeb0cca70228482652b998a6303d6f6d34a009a190 /src/format
parent3ad8e821ec6a6e8408a9fc737b385aa863c67123 (diff)
Compared symbols using their location only to prevent duplicated symbols.
Diffstat (limited to 'src/format')
-rw-r--r--src/format/format.c62
-rw-r--r--src/format/symbol.c7
2 files changed, 6 insertions, 63 deletions
diff --git a/src/format/format.c b/src/format/format.c
index b43f78f..261f152 100644
--- a/src/format/format.c
+++ b/src/format/format.c
@@ -57,9 +57,6 @@ static void g_binary_format_finalize(GBinFormat *);
/* Retire un symbole de la collection du format binaire. */
static void _g_binary_format_remove_symbol(GBinFormat *, size_t);
-/* Supprime les éventuels doublons au sein des symboles. */
-static void g_binary_format_delete_duplicated_symbols(GBinFormat *);
-
/* Recherche le symbole associé à une adresse. */
static bool _g_binary_format_find_symbol(const GBinFormat *, const vmpa2t *, __compar_fn_t, size_t *, GBinSymbol **);
@@ -219,8 +216,6 @@ static void g_binary_format_finalize(GBinFormat *format)
bool g_binary_format_complete_loading(GBinFormat *format, GtkStatusStack *status)
{
- g_binary_format_delete_duplicated_symbols(format);
-
return true;
}
@@ -929,63 +924,6 @@ void g_binary_format_remove_symbol(GBinFormat *format, GBinSymbol *symbol)
/******************************************************************************
* *
-* Paramètres : format = informations chargées à corriger si besoin est. *
-* *
-* Description : Supprime les éventuels doublons au sein des symboles. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static void g_binary_format_delete_duplicated_symbols(GBinFormat *format)
-{
- size_t i; /* Boucle de parcours */
- const mrange_t *range; /* Emplacement à consulter */
- mrange_t last; /* Dernière localisation vue */
- size_t index; /* Indice de suppression */
-
- g_binary_format_lock_unlock_symbols_wr(format, true);
-
- if (format->sym_count > 1)
- {
- range = g_binary_symbol_get_range(format->symbols[0]);
- copy_mrange(&last, range);
- }
-
- for (i = 1; i < format->sym_count; i++)
- {
- range = g_binary_symbol_get_range(format->symbols[i]);
-
- if (cmp_vmpa(get_mrange_addr(&last), get_mrange_addr(range)) == 0)
- {
- /* TODO : établir une meilleur comparaison pour trouver le bon candidat */
- /* TODO : (éviter de) traiter selon le type aussi */
- index = (get_mrange_length(&last) == 0 ? i - 1 : i);
- /*
- printf("DELETE @ %zu / 0x%08x '%s'\n", index,
- (unsigned int)last.addr.virtual,
- g_binary_symbol_get_label(format->symbols[index]));
- */
-
- _g_binary_format_remove_symbol(format, index);
-
- i--;
-
- }
-
- copy_mrange(&last, range);
-
- }
-
- g_binary_format_lock_unlock_symbols_wr(format, false);
-
-}
-
-
-/******************************************************************************
-* *
* Paramètres : format = informations chargées à consulter. *
* label = étiquette à retrouver lors des recherches. *
* symbol = éventuel symbole trouvé à déréfenrencer. [OUT] *
diff --git a/src/format/symbol.c b/src/format/symbol.c
index 899740a..22403c5 100644
--- a/src/format/symbol.c
+++ b/src/format/symbol.c
@@ -237,8 +237,13 @@ GBinSymbol *g_binary_symbol_new(const mrange_t *range, SymbolType type)
int g_binary_symbol_cmp(const GBinSymbol * const *a, const GBinSymbol * const *b)
{
int result; /* Bilan à retourner */
+ const mrange_t *range_a; /* Emplacement du symbole A */
+ const mrange_t *range_b; /* Emplacement du symbole B */
- result = cmp_mrange(&(*a)->range, &(*b)->range);
+ range_a = &(*a)->range;
+ range_b = &(*b)->range;
+
+ result = cmp_vmpa(get_mrange_addr(range_a), get_mrange_addr(range_b));
return result;