diff options
Diffstat (limited to 'src/analysis/disass/area.c')
-rw-r--r-- | src/analysis/disass/area.c | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/src/analysis/disass/area.c b/src/analysis/disass/area.c index 352069c..e19a4c0 100644 --- a/src/analysis/disass/area.c +++ b/src/analysis/disass/area.c @@ -32,7 +32,8 @@ #include <i18n.h> -#include "../../analysis/contents/restricted.h" +#include "../routine.h" +#include "../contents/restricted.h" #include "../../arch/raw.h" #include "../../common/bits.h" #include "../../common/sort.h" @@ -654,27 +655,25 @@ static void update_address_as_routine(GBinFormat *format, const vmpa2t *addr) if (!found || (found && wrong_type)) { + if (found) + g_binary_format_remove_symbol(format, symbol); + init_mrange(&range, addr, 0); vmpa2_virt_to_string(addr, MDS_UNDEFINED, loc, NULL); snprintf(name, sizeof(name), "sub_%s", loc + 2); routine = g_binary_routine_new(); - g_binary_routine_set_name(routine, strdup(name)); + symbol = G_BIN_SYMBOL(routine); - g_binary_routine_set_range(routine, &range); + g_binary_routine_set_name(routine, strdup(name)); + g_binary_symbol_set_range(symbol, &range); - if (!found) - { - symbol = g_binary_symbol_new(STP_ROUTINE); - g_binary_symbol_attach_routine(symbol, routine); - g_binary_format_add_symbol(format, symbol); - } - else _g_binary_symbol_attach_routine(symbol, routine, STP_ROUTINE); + g_binary_format_add_symbol(format, symbol); } - if (found) + else g_object_unref(G_OBJECT(symbol)); } |