diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2017-03-29 21:01:51 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2017-03-29 21:01:51 (GMT) |
commit | b8d5a539b1e6837f7395598a3fa25ef69650e885 (patch) | |
tree | 2fbf770b1aebf1b66a8ac87e2eeae4521775d092 /src/arch | |
parent | 4f3f96c2c98ac507f4aa7c83e2393c5c1fdd3cdd (diff) |
Handled areas which are not allocated in memory.
Diffstat (limited to 'src/arch')
-rw-r--r-- | src/arch/post.c | 2 | ||||
-rw-r--r-- | src/arch/processor.c | 2 | ||||
-rw-r--r-- | src/arch/target.c | 2 | ||||
-rw-r--r-- | src/arch/vmpa.c | 29 | ||||
-rw-r--r-- | src/arch/vmpa.h | 5 |
5 files changed, 37 insertions, 3 deletions
diff --git a/src/arch/post.c b/src/arch/post.c index 9973dd3..5c7ed13 100644 --- a/src/arch/post.c +++ b/src/arch/post.c @@ -79,7 +79,7 @@ void post_process_target_resolution(GArchInstruction *instr, GArchProcessor *pro if (!g_target_operand_resolve(G_TARGET_OPERAND(new), bfmt, true)) { - vmpa2_virt_to_string(&target, MDS_UNDEFINED, loc, NULL); + vmpa2_to_string(&target, MDS_UNDEFINED, loc, NULL); switch (type) { diff --git a/src/arch/processor.c b/src/arch/processor.c index 3a049b1..38c39e6 100644 --- a/src/arch/processor.c +++ b/src/arch/processor.c @@ -314,7 +314,7 @@ GArchInstruction *g_arch_processor_disassemble(const GArchProcessor *proc, GProc GArchInstruction *result; /* Instruction à renvoyer */ vmpa2t back; /* Position sauvegardée */ - assert(has_phys_addr(pos) && has_virt_addr(pos)); + assert(has_phys_addr(pos)); copy_vmpa(&back, pos); diff --git a/src/arch/target.c b/src/arch/target.c index bce00a7..896b9f7 100644 --- a/src/arch/target.c +++ b/src/arch/target.c @@ -245,7 +245,7 @@ static void g_target_operand_print(const GTargetOperand *operand, GBufferLine *l } else { - vmpa2_virt_to_string(&operand->addr, operand->size, value, &len); + vmpa2_to_string(&operand->addr, operand->size, value, &len); g_buffer_line_append_text(line, BLC_MAIN, value, len, RTT_LABEL, G_OBJECT(operand)); diff --git a/src/arch/vmpa.c b/src/arch/vmpa.c index f344101..dc1804c 100644 --- a/src/arch/vmpa.c +++ b/src/arch/vmpa.c @@ -530,6 +530,35 @@ char *vmpa2_virt_to_string(const vmpa2t *addr, MemoryDataSize msize, char buffer /****************************************************************************** * * +* Paramètres : addr = adresse virtuelle ou physique à traiter. * +* msize = taille de cette adresse, réelle ou désirée. * +* buffer = tampon de sortie utilisé à constituer. [OUT] * +* length = transmission de la taille du résultat ou NULL. [OUT]* +* * +* Description : Transforme une localisation en chaîne de caractères. * +* * +* Retour : Chaîne de caractères constituée. * +* * +* Remarques : - * +* * +******************************************************************************/ + +char *vmpa2_to_string(const vmpa2t *addr, MemoryDataSize msize, char buffer[VMPA_MAX_LEN], size_t *length) +{ + char *result; /* Résultat à retourner */ + + if (has_virt_addr(addr)) + result = vmpa2_virt_to_string(addr, msize, buffer, length); + else + result = vmpa2_phys_to_string(addr, msize, buffer, length); + + return result; + +} + + +/****************************************************************************** +* * * Paramètres : buffer = chaîne de caractères à consulter. * * * * Description : Transforme une chaîne de caractères en position physique. * diff --git a/src/arch/vmpa.h b/src/arch/vmpa.h index 3bfb40c..48f61a8 100644 --- a/src/arch/vmpa.h +++ b/src/arch/vmpa.h @@ -107,6 +107,8 @@ int cmp_vmpa(const vmpa2t *, const vmpa2t *); #define is_invalid_vmpa(a) (!has_phys_addr(a) && !has_virt_addr(a)) +#define reset_virt_addr(a) (a)->virtual = VMPA_NO_VIRTUAL + #define dup_vmpa(src) \ make_vmpa(get_phy_addr(src), get_virt_addr(src)) @@ -134,6 +136,9 @@ char *vmpa2_phys_to_string(const vmpa2t *, MemoryDataSize, char [VMPA_MAX_LEN], /* Transforme une adresse virtuelle en chaîne de caractères. */ char *vmpa2_virt_to_string(const vmpa2t *, MemoryDataSize, char [VMPA_MAX_LEN], size_t *); +/* Transforme une localisation en chaîne de caractères. */ +char *vmpa2_to_string(const vmpa2t *, MemoryDataSize, char [VMPA_MAX_LEN], size_t *); + /* Transforme une chaîne de caractères en position physique. */ vmpa2t *string_to_vmpa_phy(const char *); |