summaryrefslogtreecommitdiff
path: root/src/arch
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2017-03-29 21:01:51 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2017-03-29 21:01:51 (GMT)
commitb8d5a539b1e6837f7395598a3fa25ef69650e885 (patch)
tree2fbf770b1aebf1b66a8ac87e2eeae4521775d092 /src/arch
parent4f3f96c2c98ac507f4aa7c83e2393c5c1fdd3cdd (diff)
Handled areas which are not allocated in memory.
Diffstat (limited to 'src/arch')
-rw-r--r--src/arch/post.c2
-rw-r--r--src/arch/processor.c2
-rw-r--r--src/arch/target.c2
-rw-r--r--src/arch/vmpa.c29
-rw-r--r--src/arch/vmpa.h5
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 *);