aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAvi Kivity <avi@redhat.com>2011-06-26 13:52:59 +0300
committerAvi Kivity <avi@redhat.com>2011-07-17 14:06:49 +0300
commit5e5e5d9f9197f68069994fbb1cd41a72366212ba (patch)
tree85156b999e7ba0d1efec0f1d0893898e19a76c5e
parent4435c89bb5fc70e2344c380daa22c724df12f732 (diff)
memory debug
Signed-off-by: Avi Kivity <avi@redhat.com>
-rw-r--r--exec.c3
-rw-r--r--memory.c31
2 files changed, 34 insertions, 0 deletions
diff --git a/exec.c b/exec.c
index e95c18300..1e0a5ff51 100644
--- a/exec.c
+++ b/exec.c
@@ -2669,6 +2669,9 @@ void cpu_register_physical_memory_log(target_phys_addr_t start_addr,
ram_addr_t orig_size = size;
subpage_t *subpage;
+ printf("%s: start %"PRIx64" size %lx offset %lx region_offset %lx\n",
+ __func__, (uint64_t)start_addr, size, phys_offset, region_offset);
+
assert(size);
cpu_notify_set_memory(start_addr, size, phys_offset, log_dirty);
diff --git a/memory.c b/memory.c
index cc5a0a495..f9a8eb4fe 100644
--- a/memory.c
+++ b/memory.c
@@ -197,6 +197,20 @@ static void flatview_simplify(FlatView *view)
}
}
+static void flatview_dump(FlatView *view)
+{
+ unsigned i;
+ FlatRange *r;
+
+ printf("memory map:\n");
+ for (i = 0; i < view->nr; ++i) {
+ r = &view->ranges[i];
+ printf("flatrange[%d]: %"PRIx64"-%"PRIx64" (%s@%"PRIx64")\n",
+ i, r->addr.start, r->addr.start + r->addr.size - 1, r->mr->name,
+ (uint64_t)r->offset_in_region);
+ }
+}
+
static void memory_region_prepare_ram_addr(MemoryRegion *mr);
static void as_memory_range_add(AddressSpace *as, FlatRange *fr)
@@ -468,6 +482,8 @@ static FlatView generate_memory_topology(MemoryRegion *mr)
render_memory_region(&view, mr, 0, addrrange_make(0, UINT64_MAX));
flatview_simplify(&view);
+ flatview_dump(&view);
+
return view;
}
@@ -564,6 +580,9 @@ static void address_space_update_topology(AddressSpace *as)
&& !flatrange_equal(frold, frnew)))) {
/* In old, but (not in new, or in new but attributes changed). */
+ printf("dropping %"PRIx64"-%"PRIx64"\n", frold->addr.start,
+ frold->addr.start + frold->addr.size - 1);
+
as->ops->range_del(as, frold);
++iold;
} else if (frold && frnew && flatrange_equal(frold, frnew)) {
@@ -580,6 +599,12 @@ static void address_space_update_topology(AddressSpace *as)
} else {
/* In new */
+ printf("adding %"PRIx64"-%"PRIx64" offset %"PRIx64" ram %lx\n",
+ frnew->addr.start,
+ frnew->addr.start + frnew->addr.size - 1,
+ (uint64_t)frnew->offset_in_region,
+ frnew->mr->ram_addr);
+
as->ops->range_add(as, frnew);
++inew;
}
@@ -691,6 +716,9 @@ static void memory_region_write_thunk_n(void *_mr,
uint64_t access_mask;
unsigned i;
+ printf("write: region %s addr %"PRIx64" size %d data %"PRIx64"\n",
+ mr->name, (uint64_t)addr, size, data);
+
if (!memory_region_access_valid(mr, addr, size)) {
return; /* FIXME: better signalling */
}
@@ -715,6 +743,9 @@ static void memory_region_write_thunk_n(void *_mr,
addr += mr->offset;
for (i = 0; i < size; i += access_size) {
/* FIXME: big-endian support */
+ printf(" -> write: addr %"PRIx64" data %"PRIx64" size %d\n",
+ (uint64_t)addr + i, (data >> (i * 8)) & access_mask,
+ access_size);
mr->ops->write(mr->opaque, addr + i, (data >> (i * 8)) & access_mask,
access_size);
}