diff options
Diffstat (limited to 'src/arch')
-rw-r--r-- | src/arch/vmpa.c | 42 | ||||
-rw-r--r-- | src/arch/vmpa.h | 3 |
2 files changed, 45 insertions, 0 deletions
diff --git a/src/arch/vmpa.c b/src/arch/vmpa.c index a2430b5..e2da876 100644 --- a/src/arch/vmpa.c +++ b/src/arch/vmpa.c @@ -990,6 +990,48 @@ bool mrange_contains_addr_inclusive(const mrange_t *range, const vmpa2t *addr) /****************************************************************************** * * * Paramètres : range = zone mémoire à consulter. * +* other = autre zone mémoire à manipuler. * +* * +* Description : Détermine si deux zones mémoire se chevauchent ou non. * +* * +* Retour : Bilan de la consultation. * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool mrange_intersects_mrange(const mrange_t *range, const mrange_t *other) +{ + bool result; /* Bilan à retourner */ + vmpa2t end; /* Fin d'une zone mémoire */ + + result = false; + + result |= mrange_contains_addr(range, &other->addr); + result |= mrange_contains_addr(other, &range->addr); + + if (get_mrange_length(other) > 0) + { + compute_mrange_end_addr(other, &end); + deminish_vmpa(&end, 1); + result |= mrange_contains_addr(range, &end); + } + + if (get_mrange_length(range) > 0) + { + compute_mrange_end_addr(range, &end); + deminish_vmpa(&end, 1); + result |= mrange_contains_addr(other, &end); + } + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : range = zone mémoire à consulter. * * addr = localisation mémoire à déterminer. * * * * Description : Calcule la position extérieure finale d'une couverture. * diff --git a/src/arch/vmpa.h b/src/arch/vmpa.h index 4470676..eb63324 100644 --- a/src/arch/vmpa.h +++ b/src/arch/vmpa.h @@ -198,6 +198,9 @@ bool mrange_contains_addr(const mrange_t *, const vmpa2t *); /* Indique si une localisation est incluse dans une zone ou non. */ bool mrange_contains_addr_inclusive(const mrange_t *, const vmpa2t *); +/* Détermine si deux zones mémoire se chevauchent ou non. */ +bool mrange_intersects_mrange(const mrange_t *, const mrange_t *); + /* Calcule la position extérieure finale d'une couverture. */ void compute_mrange_end_addr(const mrange_t *, vmpa2t *); |