summaryrefslogtreecommitdiff
path: root/src/format/elf/helper_arm.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/format/elf/helper_arm.c')
-rw-r--r--src/format/elf/helper_arm.c17
1 files changed, 8 insertions, 9 deletions
diff --git a/src/format/elf/helper_arm.c b/src/format/elf/helper_arm.c
index a08c473..734a2bb 100644
--- a/src/format/elf/helper_arm.c
+++ b/src/format/elf/helper_arm.c
@@ -55,6 +55,7 @@ bool load_elf_arm_relocated_symbols(GElfFormat *format, const elf_shdr *relxxx,
bool result; /* Bilan à retourner */
phys_t rel_start; /* Début de la zone à traiter */
phys_t rel_size; /* Taille de cette même zone */
+ GBinFormat *base; /* Autre version du format */
phys_t iter; /* Boucle de parcours */
elf_rel reloc; /* Infos de relocalisation */
off_t index; /* Indice de la portion visée */
@@ -67,9 +68,9 @@ bool load_elf_arm_relocated_symbols(GElfFormat *format, const elf_shdr *relxxx,
virt_t final_virt; /* Adresse virtuelle retenue */
bool status; /* Bilan d'une opération */
vmpa2t addr; /* Localisation d'une routine */
- mrange_t range; /* Couverture mémoire associée */
GBinRoutine *routine; /* Nouvelle routine trouvée */
GBinSymbol *symbol; /* Nouveau symbole construit */
+ mrange_t range; /* Couverture mémoire associée */
@@ -80,6 +81,7 @@ bool load_elf_arm_relocated_symbols(GElfFormat *format, const elf_shdr *relxxx,
get_elf_section_content(format, relxxx, &rel_start, &rel_size, NULL);
+ base = G_BIN_FORMAT(format);
for (iter = rel_start; iter < (rel_start + rel_size); )
{
@@ -110,17 +112,14 @@ bool load_elf_arm_relocated_symbols(GElfFormat *format, const elf_shdr *relxxx,
status = g_exe_format_translate_address_into_vmpa(G_EXE_FORMAT(format), final_virt, &addr);
if (!status) continue;
- init_mrange(&range, &addr, 0);
-
routine = try_to_demangle_routine(name);
+ symbol = G_BIN_SYMBOL(routine);
- g_binary_routine_set_range(routine, &range);
-
- symbol = g_binary_symbol_new(STP_ROUTINE);
- g_binary_symbol_attach_routine(symbol, routine);
+ init_mrange(&range, &addr, 0);
+ g_binary_symbol_set_range(symbol, &range);
/* Comptabilisation pour le désassemblage brut */
- g_binary_format_register_code_point(G_BIN_FORMAT(format), virt, false);
+ g_binary_format_register_code_point(base, virt, false);
break;
@@ -132,7 +131,7 @@ bool load_elf_arm_relocated_symbols(GElfFormat *format, const elf_shdr *relxxx,
}
if (symbol != NULL)
- g_binary_format_add_symbol(G_BIN_FORMAT(format), symbol);
+ g_binary_format_add_symbol(base, symbol);
}