Shorter reporting of contiguous identical blocks for the IS VM dump (F8) to avoid MFS frrom filling many screens
This commit is contained in:
parent
dafc8f1062
commit
6dec907191
@ -8,10 +8,43 @@
|
||||
|
||||
#define LINES 24
|
||||
|
||||
PRIVATE void print_region(struct vm_region_info *vri)
|
||||
PRIVATE void print_region(struct vm_region_info *vri, int *n)
|
||||
{
|
||||
static int vri_count, vri_prev_set;
|
||||
static struct vm_region_info vri_prev;
|
||||
char c;
|
||||
int is_repeat;
|
||||
|
||||
/* part of a contiguous identical run? */
|
||||
is_repeat =
|
||||
vri &&
|
||||
vri_prev_set &&
|
||||
vri->vri_seg == vri_prev.vri_seg &&
|
||||
vri->vri_prot == vri_prev.vri_prot &&
|
||||
vri->vri_flags == vri_prev.vri_flags &&
|
||||
vri->vri_length == vri_prev.vri_length &&
|
||||
vri->vri_addr == vri_prev.vri_addr + vri_prev.vri_length;
|
||||
if (vri) {
|
||||
vri_prev_set = 1;
|
||||
vri_prev = *vri;
|
||||
} else {
|
||||
vri_prev_set = 0;
|
||||
}
|
||||
if (is_repeat) {
|
||||
vri_count++;
|
||||
return;
|
||||
}
|
||||
|
||||
if (vri_count > 0) {
|
||||
printf(" (contiguously repeated %d more times)\n", vri_count);
|
||||
(*n)++;
|
||||
vri_count = 0;
|
||||
}
|
||||
|
||||
/* NULL indicates the end of a list of mappings, nothing else to do */
|
||||
if (!vri) return;
|
||||
|
||||
/* first in a run, print all info */
|
||||
switch (vri->vri_seg) {
|
||||
case T: c = 'T'; break;
|
||||
case D: c = 'D'; break;
|
||||
@ -25,6 +58,7 @@ PRIVATE void print_region(struct vm_region_info *vri)
|
||||
(vri->vri_prot & PROT_EXEC) ? 'x' : '-',
|
||||
(vri->vri_flags & MAP_SHARED) ? 's' : 'p',
|
||||
vri->vri_length / 1024L);
|
||||
(*n)++;
|
||||
}
|
||||
|
||||
PUBLIC void vm_dmp()
|
||||
@ -96,10 +130,22 @@ PUBLIC void vm_dmp()
|
||||
n++;
|
||||
}
|
||||
|
||||
for (j = 0; j < r; j++) {
|
||||
print_region(&vri[j]);
|
||||
n++;
|
||||
while (r > 0) {
|
||||
for (j = 0; j < r; j++) {
|
||||
print_region(&vri[j], &n);
|
||||
}
|
||||
|
||||
if (LINES - n - 1 <= 0) break;
|
||||
r = vm_info_region(proc[i].p_endpoint, vri, LINES - n - 1,
|
||||
&prev_base);
|
||||
|
||||
if (r < 0) {
|
||||
printf("Process %d (%s): error %d\n",
|
||||
proc[i].p_endpoint, proc[i].p_name, r);
|
||||
n++;
|
||||
}
|
||||
}
|
||||
print_region(NULL, &n);
|
||||
|
||||
if (n > LINES) printf("IS: internal error\n");
|
||||
if (n == LINES) break;
|
||||
|
Loading…
x
Reference in New Issue
Block a user