summaryrefslogtreecommitdiff
path: root/src/analysis/disass/area.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/analysis/disass/area.c')
-rw-r--r--src/analysis/disass/area.c21
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));
}